Lingo求解0-1整数规划问题(LINGO 18.0 x64)
案例:有99个数,从中取17个数使它们的和为89.884。
用于解决该问题的Lingo代码如下:
1 model: 2 sets: 3 row/1..99/:c,x; 4 endsets 5 data: 6 c=6,6,6,4.56,5.76,2.94,2.1738,0.5723,6,6,3.3,6,3.72,3.6,1.8,2.145,4.785,6,6,6,3,2.85,3.2565,4.776,3.063,3,6,6,6,5.4,5.4,6,3.54,30,30,10,6.3,10,2.34,2.514,6.555,7.8,10,30,5.04,10,6.3,6.075,9.32988,7.2,9,2.7,5.415,10,3.75,1.5,8.1,3.15,1.8,4.95,5.208,4.876,4.272,6.192,3.408,3.168,2.256,2.64,3.84,2.4,4.8,2.4,2.844,2.1024,4.8,4.2,5.28,3.756,1.68,1.67,5.244,5.16,5.976,8,3,3.936,7.68,7.2,4.8,2.28,5.6522,2.7,6.48,4.824,4.68,8,2.04,1.716,3.9804; 7 enddata 8 min=@abs(89.884-@sum(row:c*x)); 9 @sum(row:x)=17; 10 @for(row:@bin(x));
其中
row/1..99/:c,x; 用于定义长度为99的行向量c,x
min=@abs(89.884-@sum(row:c*x)); 表示选出的数的和为89.884,且该条件作为目标函数
@sum(row:x)=17; 表示向量x的和为17
@for(row:@bin(x)); 用于设定向量x中的元素取值非0即1,用于0-1整数规划
计算结果部分展示如下: