问题描述
我正在使用 GLPK,我正在努力理解为什么不遵守上限约束。 我有这样的事情:
param n0;
param n1;
param n2;
param start_0{i in 0..n0};
param end_0{i in 0..n0};
param start_1{i in 0..n1};
param end_1{i in 0..n1};
param start_2{i in 0..n2};
param end_2{i in 0..n2};
var y0 {k in 0..n0} binary;
var y1 {k in 0..n1} binary;
var y2 {k in 0..n2} binary;
[...]
minimize obj: (sum{k in 0..n2}(end_2[k]*y2[k] + 600*y2[k]) - (sum{k in 0..n0} (start_0[k]*y0[k])));
[...]
s.t. c1: (sum{k in 0..n2} (end_2[k]*y2[k] ) - (sum{k in 0..n0} (start_0[k]*y0[k] ))) <= 7000;
s.t. c2_1: sum{k in 0..n0} y0[k] = 1 ;
s.t. c2_2: sum{k in 0..n1} y1[k] = 1 ;
s.t. c2_3: sum{k in 0..n2} y2[k] = 1 ;
[...]
solve;
[...]
printf (sum{k in 0..n2} (end_2[k]*y2[k] ) - (sum{k in 0..n0} (start_0[k]*y0[k] )));
最后一个 printf 给了我 7200。但是上面的约束 c1 应该保证差值不大于 7000。
求解器输出如下:
GLPK Integer Optimizer,v4.65
7 rows,353 columns,1332 non-zeros
353 integer variables,all of which are binary
Preprocessing...
6 rows,1059 non-zeros
353 integer variables,all of which are binary
Scaling...
A: min|aij| = 1.000e+00 max|aij| = 1.625e+09 ratio = 1.625e+09
GM: min|aij| = 9.998e-01 max|aij| = 1.000e+00 ratio = 1.000e+00
EQ: min|aij| = 9.996e-01 max|aij| = 1.000e+00 ratio = 1.000e+00
2N: min|aij| = 7.561e-01 max|aij| = 1.000e+00 ratio = 1.323e+00
Constructing initial basis...
Size of triangular part is 6
Solving LP relaxation...
GLPK Simplex Optimizer,v4.65
6 rows,1059 non-zeros
0: obj = -2.232000000e+05 inf = 1.329e-04 (2)
2: obj = 6.210000000e+04 inf = 0.000e+00 (0)
* 5: obj = 7.097321429e+03 inf = 0.000e+00 (0)
OPTIMAL LP SOLUTION FOUND
Integer optimization begins...
Long-step dual simplex will be used
+ 5: mip = not found yet >= -inf (1; 0)
+ 272: >>>>> 1.320000000e+04 >= 1.140000000e+04 13.6% (237; 2)
+ 304: mip = 1.320000000e+04 >= tree is empty 0.0% (0; 477)
INTEGER OPTIMAL SOLUTION FOUND
Time used: 0.0 secs
Memory used: 0.8 Mb (851464 bytes)
display statement at line 22
[...]
Model has been successfully processed
我做错了什么? 非常感谢您的帮助,
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)