案例:有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整數規划
計算結果部分展示如下: