У меня есть некоторый код 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);
Таким образом, цель должна быть следующей: самая высокая переменная решения, вычитаемая из самой низкой переменной решения.
Любые идеи приветствуются.