我正在尝试使用AMPL解决一组问题并添加其目标值。但是,sum运算符似乎不起作用,只是不断更新到最新值。
set CASES := {1,2,3,4,5,6};
model modelFile.mod;
option solver cplex;
option eexit -123456789;
var total;
let total := 0;
for {j in CASES}
{
reset data;
data ("data" & j & ".dat")
solve;
display total_Cost;
let total := total + total_Cost;
display total;
}
示例输出:
CPLEX 12.6.3.0: optimal solution; objective 4.236067977
2 dual simplex iterations (0 in phase I)
total_Cost = 4.23607
total = 4.23607
CPLEX 12.6.3.0: optimal solution; objective 5.656854249
5 dual simplex iterations (0 in phase I)
total_Cost = 5.65685
total = 5.65685
其中total_cost
是优化问题的目标值
答案 0 :(得分:1)
由于AMPL是algebraic modeling language而不是通用编程语言,因此其中的变量表示在求解过程中确定的优化变量。因此,每次调用solve
时,都会重置优化变量total
。你需要的是一个参数,与变量不同,在优化过程中不会改变:
param total;
答案 1 :(得分:1)
我终于意识到这是因为AMPL拥有的新关键字“重置数据”。通过将关键字更改为“更新”,代码可以正常工作。