如何在CPLEX中输出决策变量之外的自定义表达式计算结果
在CPLEX中输出指定表达式的计算结果
要输出表达式pl[i] + pevdis[i][j] - pevch[i][j](对应每个时间点i∈tavail、每辆车j∈number)的计算结果,你可以通过以下几种方式实现:
方法一:使用Execute块直接输出
在你的CPLEX代码末尾添加execute块,遍历所有时间点和车辆,计算并打印结果:
execute { for(var i in tavail) { writeln("时间点 ", i, " 的结果:"); for(var j in number) { var result = pl[i] + pevdis[i][j] - pevch[i][j]; writeln("车辆 ", j, ": ", result); } writeln(); } }
这段代码会在模型求解完成后,逐个时间点、逐个车辆输出表达式的计算值。
方法二:定义辅助变量存储结果
如果你希望将表达式的值作为模型的一部分存储,可以先定义一个辅助变量,再通过约束赋值,最后输出该变量:
// 定义辅助变量存储表达式结果 float levelised_load[tavail][number]; subject to { // 原有约束... // 为辅助变量赋值 forall(i in tavail, j in number) levelised_load[i][j] = pl[i] + pevdis[i][j] - pevch[i][j]; } // 输出辅助变量的值 execute { for(var i in tavail) { writeln("时间点 ", i, " 的平准化负荷:"); for(var j in number) { writeln("车辆 ", j, ": ", levelised_load[i][j]); } writeln(); } }
这种方式更便于后续对结果进行二次处理,比如统计分析或写入文件。
额外提示
- 你的目标函数中
sum(j in number)-pevch[i][j]的写法存在语法问题,应改为sum(j in number) (-pevch[i][j]),否则会导致编译错误。 - 条件约束中的
0.7<soc[j][i]<0.9在CPLEX中需要拆分为0.7 < soc[j][i] && soc[j][i] < 0.9,原写法无法正确解析。
内容的提问来源于stack exchange,提问作者Haripriya M R
相关产品推荐
相关产品推荐

