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整數規划 

計算結果部分展示如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM