IBM ILOG CPLEX多场景自动化测试参数更新异常问题求助
解决IBM ILOG CPLEX多场景参数不更新问题
核心问题分析
你遇到的参数不生效、赋值报错问题,本质是主程序与OPL模型的参数作用域隔离+模型生成/求解流程错误,导致修改后的参数未传递到模型中,每次都用初始值计算。
分步修复方案
1. 修正参数赋值方式
主程序中必须通过thisOplModel对象访问模型内的参数,不能直接使用局部变量赋值:
- 错误写法:
W1 = currentW[1]; - 正确写法:
thisOplModel.W1 = currentW[1];
同理,ratio参数需直接赋值给模型的ratio_script数组,而非临时数组后未关联:
// 替换原tempRatio相关代码 thisOplModel.ratio_script[1] = 0.0; thisOplModel.ratio_script[2] = r2_val; thisOplModel.ratio_script[3] = r3;
2. 动态更新修正因子S1/S2/S3
原模型中S1=W1/WMAX是静态计算的,W1更新后S1不会自动刷新,需改为动态依赖表达式:
// 替换原S1/S2/S3的静态定义 dexpr float S1 = W1 / WMAX; dexpr float S2 = W2 / WMAX; dexpr float S3 = W3 / WMAX;
或者在主程序每次更新权重后手动刷新:
thisOplModel.W1 = currentW[1]; thisOplModel.W2 = currentW[2]; thisOplModel.W3 = currentW[3]; // 手动更新修正因子 thisOplModel.S1 = thisOplModel.W1 / thisOplModel.WMAX; thisOplModel.S2 = thisOplModel.W2 / thisOplModel.WMAX; thisOplModel.S3 = thisOplModel.W3 / thisOplModel.WMAX;
3. 修复模型求解流程
每次参数更新后,必须清理旧模型状态并重新生成,否则会复用之前的约束和参数:
for (var r3 = 0.0; r3 <= 0.7 + 0.0001; r3 += 0.1) { // 赋值参数 thisOplModel.ratio_script[1] = 0.0; thisOplModel.ratio_script[2] = r2_val; thisOplModel.ratio_script[3] = r3; // 清理旧模型+重新生成 cplex.clearModel(); thisOplModel.generate(); writeln("--- Résolution : R2=", thisOplModel.ratio_script[2], ", W=(", thisOplModel.W1, ", ", thisOplModel.W2, ", ", thisOplModel.W3, ") et R3=", thisOplModel.ratio_script[3], " ---"); if (cplex.solve()) { ofile.writeln(thisOplModel.W1, ";", thisOplModel.W2, ";", thisOplModel.W3, ";", thisOplModel.ratio_script[1], ";", thisOplModel.ratio_script[2], ";", thisOplModel.ratio_script[3], ";", cplex.getObjValue(), ";", thisOplModel.TestCOU, ";", thisOplModel.Cmax, ";", thisOplModel.QTEREMP); } else { ofile.writeln(thisOplModel.W1, ";", thisOplModel.W2, ";", thisOplModel.W3, ";", thisOplModel.ratio_script[1], ";", thisOplModel.ratio_script[2], ";", thisOplModel.ratio_script[3], ";", "No Solution", ";", "N/A", ";", "N/A", ";", "N/A"); } }
4. 索引匹配修正
确保ratio_script的索引与Mode集合一致,若Mode是1-based,需在模型中明确定义:
float ratio_script[1..3] = [0, 0, 0];
内容的提问来源于stack exchange,提问作者Félix Veillette
相关产品推荐
相关产品推荐

