Нов съм в 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) не е изпълнено!
Проблемът е някак прост. Опитвам се да групирам възможно най-много променливи, за да максимизирам резултата и да отговоря на всички ограничения.
Можете ли да ми помогнете да го разбера?