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整数规划 

计算结果部分展示如下:

 

posted @ 2020-05-26 09:00  CollinsLi  阅读(3734)  评论(0编辑  收藏  举报