Я новичок в AMPL «Математический язык программирования». Я пытаюсь решить некоторые уравнения, но обнаружил, что ответ логически неверен (или, насколько я понимаю!). Итак, мой код выглядит следующим образом (после того, как я обнаружил проблему, мне пришлось упростить его, чтобы понять):
option solver minos;
var x;
var y;
var z;
maximize output: x+y+z;
subject to x_lim: 0<=x<=1;
subject to y_lim: 0<=y<=1;
subject to z_lim: 0<=z<=1;
subject to disable: if x = 1 then (y+z) = 0;
solve;
display output,x,y,z;
Вывод следующий:
output = 1
x = 1
y = 0
z = 0
но если я прав, максимальный вывод должен быть 2 (когда x = 0, y = 1, z = 1).
Теперь, если я изменю порядок объявления переменных:
var y;
var x;
var z;
maximize output: x+y+z;
subject to x_lim: 0<=x<=1;
subject to y_lim: 0<=y<=1;
subject to z_lim: 0<=z<=1;
subject to disable: if x = 1 then (y+ z) = 0;
solve;
display output,x,y,z;
тогда выход становится равным 3 (x=y=z=1) и ограничение (если x = 1, то (y+z) = 0) не выполняется!
Проблема как-то проста. Я пытаюсь сгруппировать как можно больше переменных, чтобы максимизировать результат и удовлетворить все ограничения.
Не могли бы вы помочь мне понять это?