AMPL 求和变量运算符

AMPL Sum variables operator

我正在尝试使用 AMPL 解决一组问题并添加它们的 objective 值。但是,求和运算符似乎不起作用,只会不断更新为最新值。

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 是来自优化问题的 objective 值

由于 AMPL 是一种 algebraic modeling language 而不是通用编程语言,因此其中的变量表示在求解过程中确定的优化变量。所以每次调用 solve 时,优化变量 total 都会被重置。这里你需要的是一个参数,它不像变量,在优化过程中不会改变:

param total;

我终于意识到这是由于 AMPL 的新关键字 "reset data" 造成的。通过将关键字更改为 "update",代码有效。