如何在CPLEX中修改矩阵元素?代码逻辑与语法问题咨询
CPLEX矩阵元素修改的正确实现方案
原代码存在的问题
- 集合不匹配:
forall循环中使用了未定义的集合Z,应对应矩阵的列集合I - 运算符错误:将赋值操作写成了比较运算符
==,正确赋值需用= - 逻辑条件不全:原条件仅判断
<=5,未排除0,需补充>0的判断 - 语法结构残缺:代码缺少闭合大括号,导致语法报错
修正后的完整代码
// 定义与矩阵维度匹配的集合 {int} T = 1..8; {int} I = 1..5; int demand1[T][I] = [ [0,17,4,7,10], [0,39,7,3,9], [0,15,13,10,10], [0,2,19,5,2], [0,7,13,4,16], [0,5,5,1,10], [0,15,13,12,7], [0,15,14,10,10] ]; // 遍历并修改符合条件的矩阵元素 forall(t in T, i in I) { if (demand1[t][i] > 0 && demand1[t][i] <= 5) { demand1[t][i] = 0; } } // 可选:输出修改后的矩阵用于验证 execute { writeln("修改后的demand1矩阵:"); for(var t in T) { writeln(demand1[t]); } }
修正说明
- 补充集合
T和I的定义,确保与矩阵的行、列维度对应(CPLEX中需明确集合范围) - 将
forall循环变量改为i in I,匹配矩阵的列集合 - 修正条件为
demand1[t][i] > 0 && demand1[t][i] <=5,精准筛选需要置0的元素 - 替换
==为=完成赋值操作 - 补全缺失的大括号,保证语法结构完整
- 增加
execute块输出结果,方便验证修改效果
内容的提问来源于stack exchange,提问作者COdeboi
相关产品推荐
相关产品推荐

