【问题标题】:How do I change my objective to "Minimize Max() - Min()" in OPL Code?如何在 OPL 代码中将我的目标更改为“最小化 Max() - Min()”?
【发布时间】:2018-12-08 22:05:01
【问题描述】:

我有一些 OPL 代码可以最小化我的决策变量的总和。它工作得很好,我很满意,但我想改变我的目标,以最小化我的决策变量的......范围......。

这是我的工作 OPL 代码:

// Decision Variables
dvar int Column0Row1;
dvar int Column0Row2;
dvar int Column0Row3;
dvar int OColumn0Row1;
dvar int Column1Row2;
dvar int Column1Row4;
dvar int OColumn0Row2;
dvar int OColumn1Row2;
dvar int Column2Row3;
dvar int Column2Row4;
dvar int OColumn0Row3;
dvar int OColumn2Row3;
dvar int Column3Row4;
dvar int OColumn1Row4;
dvar int OColumn2Row4;
dvar int OColumn3Row4;

// Objective
minimize Column0Row1 + Column0Row3 + Column1Row2 + Column1Row4 + OColumn0Row2 + Column2Row3 + Column3Row4 + OColumn2Row4;
// Constraints
subject to
{
    Column0Row1 == -OColumn0Row1;
    Column0Row1 >= 1;
    Column0Row2 <= -1;
    Column0Row3 == -OColumn0Row3;
    Column0Row3 >= 1;
    OColumn0Row1 <= -1;
    Column1Row2 == -OColumn1Row2;
    Column1Row2 >= 1;
    Column1Row4 == -OColumn1Row4;
    Column1Row4 >= 1;
    OColumn0Row2 == -Column0Row2;
    OColumn0Row2 >= 1;
    OColumn1Row2 <= -1;
    Column2Row3 == -OColumn2Row3;
    Column2Row3 >= 1;
    Column2Row4 <= -1;
    OColumn0Row3 <= -1;
    OColumn2Row3 <= -1;
    Column3Row4 == -OColumn3Row4;
    Column3Row4 >= 1;
    OColumn1Row4 <= -1;
    OColumn2Row4 == -Column2Row4;
    OColumn2Row4 >= 1;
    OColumn3Row4 <= -1;
    Column0Row1 + Column0Row2 + Column0Row3 == 0;
    OColumn0Row1 + Column1Row2 + Column1Row4 == 0;
    OColumn0Row2 + OColumn1Row2 + Column2Row3 + Column2Row4 == 0;
    OColumn0Row3 + OColumn2Row3 + Column3Row4 == 0;
    OColumn1Row4 + OColumn2Row4 + OColumn3Row4 == 0;
}

我想把我的目标改成这样:

// Objective
minimize Math.Max(Column0Row1, Column0Row3, Column1Row2, Column1Row4, OColumn0Row2, Column2Row3, Column3Row4, OColumn2Row4) - Math.Min(Column0Row1, Column0Row3, Column1Row2, Column1Row4, OColumn0Row2, Column2Row3, Column3Row4, OColumn2Row4);

所以目标应该是:最高决策变量减去最低决策变量。

任何想法表示赞赏。

【问题讨论】:

    标签: cplex opl


    【解决方案1】:
    minimize maxl(Column0Row1, Column0Row3, Column1Row2, Column1Row4, OColumn0Row2, Column2Row3, Column3Row4, OColumn2Row4) - minl(Column0Row1, Column0Row3, Column1Row2, Column1Row4, OColumn0Row2, Column2Row3, Column3Row4, OColumn2Row4);
    

    工作正常

    【讨论】:

    • 谢谢你:)。我很高兴它是如此简单。我习惯了 VS C#,所以我想按 F12 并阅读元数据。在 Cplex 中是否有类似的替代方案? @Alex Fleischer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多