如何在CPLEX的execute块中实现含双层求和的公式
在CPLEX Execute块中实现双层嵌套求和的方法
在CPLEX的execute块里,双层嵌套求和无需拆分,直接通过嵌套循环遍历对应集合即可同步完成计算,以下是具体实现方案:
基础实现示例
假设你已在OPL中定义了外层求和集合I、内层求和集合J,以及涉及的决策变量/参数(比如x[I][J]),代码如下:
// 先定义集合与变量(示例) {int} I = {1,2,3}; {int} J = {1,2}; dvar float x[I][J]; execute { var denominator = 0; // 外层循环遍历集合I的每个元素 for(var i in I) { // 内层循环遍历集合J的每个元素 for(var j in J) { // 替换为你公式中对应项的计算逻辑,比如x[i][j]或其他表达式 denominator += x[i][j]; } } // 验证计算结果 writeln("分母计算值:", denominator); }
带条件的嵌套求和
如果求和仅针对满足特定条件的索引对(比如i≠j),只需在循环内添加判断逻辑:
execute { var denominator = 0; for(var i in I) { for(var j in J) { if(i != j) { // 自定义条件 denominator += x[i][j]; } } } }
注意事项
- 若涉及的是参数而非决策变量,逻辑完全一致,直接调用参数值即可(比如
param a[I][J];就用a[i][j]); - 循环顺序需与公式中的求和层级对应(外层对应第一个求和符号,内层对应第二个)。
内容的提问来源于stack exchange,提问作者user23351039
相关产品推荐
相关产品推荐

