我是 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)!
这个问题有点简单。我正在尝试对尽可能多的变量进行分组,以最大化输出并满足所有约束。
你能帮我理解吗?