所以我试图在 GAMS 中实现一个算法,方法是在每次迭代后用削减来增加一个主问题。主要问题是,
minimize w =-x - 10z
s.t.
-25x + 20z ≤ 30
x + 2z ≤ 10
2x - z ≤ 15
-2x - 10z ≤ -15
w >= -26
w <= -22
where x and z are nonnegative integer variables.
在第一次迭代之后,我想添加约束,
1 ≤ x ≤ 6 IFF z ≤ 2
在第二次迭代之后,我想添加约束,
2.5 ≤ x ≤ 8 IFF z ≤ 1
这两个增加问题的约束限制了解空间产生(w=-22,x=2,z=2)作为最优解。
我尝试通过使用带有以下脚本的动态集在 GAMS 中实现它(在 GAMSworld 的帮助下)。然而,GAMS 给出的最终解决方案是 (x=6, z=2)。最佳答案应该是 (x=2, z=2),因为由于第二次迭代后的约束,除非 z <= 1,否则 x 不能大于 2.5。
Integer Variable
x, z;
Free Variable w;
Set k /1*5/;
Set cut1set(k);
cut1set(k) = no;
Set cut2set(k);
cut2set(k) = no;
Equations
obj, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11;
obj.. w =e= - x - 10 *z;
c1.. -25 * x + 20 * z =l= 30;
c2.. x + 2 * z =l= 10;
c3.. 2 * x - z =l= 15;
c4.. - 2 * x - 10 * z =l= - 15;
c5.. w =g= -26;
c6.. w =l= -22;
* z is nonnegative integer
* z is nonnegative integer
c7.. z =g= 0;
c8(cut1set).. x =l= 6;
c9(cut1set).. x =g= 1;
c10(cut2set).. x =l= 8;
c11(cut2set).. x =g= 2.5;
Model mymodel /all/;
loop(k,
solve mymodel use mip min w;
if(ord(k) = 1 and z.l <= 2,
cut1set(k) = yes;
);
if(ord(k) = 2 and z.l <= 1,
cut2set(k) = yes;
);
);
谁能告诉我如何在迭代后使用带有 IFF 条件的增强约束的削减?我现在拥有它的方式是没有正确限制解决方案空间。我将非常感谢一些帮助。谢谢你!