【问题标题】:AMPL Sum variables operatorAMPL Sum 变量运算符
【发布时间】:2016-03-02 07:04:52
【问题描述】:

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

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 是优化问题的目标值

【问题讨论】:

    标签: ampl


    【解决方案1】:

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

    param total;
    

    【讨论】:

    • 我试过用 param 做,但也没有用。
    • @statBeginner 究竟是什么不起作用?更新不正确吗?
    • 不,使用 param 和 var 的输出没有区别。但我现在明白你的意思了。我没有使用没有“重置数据”的参数进行检查。如果可行,那么从概念上讲,它应该比在这里使用 var 更好。同意。
    【解决方案2】:

    我终于意识到这是由于 AMPL 的新关键字“重置数据”造成的。通过将关键字更改为“更新”,代码就可以工作了。

    【讨论】:

    • 对,你不应该使用“重置数据”=)。但是切换到 param 也是一个好主意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多