CPLEX中如何定义min/max求两数或数组最值?代码报错求助
在CPLEX OPL中正确使用min/max函数求解最值
1. 求解多个离散值的最值
OPL的min/max函数不支持直接传入逗号分隔的多个数值,需将这些值放入集合或数组中再调用函数:
方法一:使用集合字面量
float Y = min({2.3, 3, 4, 2, 13, 45}); float Z = max({2.3, 3, 4, 2, 13, 45});
方法二:先定义数组再计算
float vals[] = [2.3, 3, 4, 2, 13, 45]; float Y = min(vals); float Z = max(vals);
2. 求解两数的最值
仅比较两个数时,用三元表达式更简洁:
float a = 2.3; float b = 4; float min_val = (a < b) ? a : b; float max_val = (a > b) ? a : b;
3. 决策变量数组的最值计算
针对决策变量数组,需结合索引迭代范围使用:
dvar float x[1..5]; // 约束定义... float min_x = min(i in 1..5) x[i]; float max_x = max(i in 1..5) x[i];
报错原因:你之前的写法
min (2.3, 3, 4, 2, 13, 45)不符合OPL语法,min/max函数仅接收集合、数组或带索引的迭代范围,不支持直接传入多个逗号分隔的参数。
内容的提问来源于stack exchange,提问作者Nasser Tarin
相关产品推荐
相关产品推荐

