AMPL求和运算符

时间:2016-02-23 19:57:22

标签: ampl

我正在尝试使用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是优化问题的目标值

2 个答案:

答案 0 :(得分:1)

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

param total;

答案 1 :(得分:1)

我终于意识到这是因为AMPL拥有的新关键字“重置数据”。通过将关键字更改为“更新”,代码可以正常工作。