1

I've got some OPL code that minimizes the sum of my decision variables. It works fine and I'm happy with it, but I would like to change my objective to minimize the... sort of range... of my decision variables.

Here's my working OPL code:

// 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;
}

I want to change my objective to something like this:

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

So the objective should be: The highest decision variable subtracted by the lowest decision variable.

Any ideas appreciated.

Shiasu-sama
  • 1,179
  • 2
  • 12
  • 39

1 Answers1

1
minimize maxl(Column0Row1, Column0Row3, Column1Row2, Column1Row4, OColumn0Row2, Column2Row3, Column3Row4, OColumn2Row4) - minl(Column0Row1, Column0Row3, Column1Row2, Column1Row4, OColumn0Row2, Column2Row3, Column3Row4, OColumn2Row4);

works fine

Alex Fleischer
  • 9,276
  • 2
  • 12
  • 15
  • Thank you :). I'm glad it is this simple. I'm used to VS C# so I want to hit F12 and read meta. Is there any alternative like this in Cplex? @Alex Fleischer – Shiasu-sama Jun 30 '18 at 06:41