Lingo簡單入門,以及對線性規划做敏感性分析設置


Lingo中用!表示注釋,注釋結束用;表示,lingo不區分大小寫,運行時會自動統一裝換成大寫

編程步驟:

1.推算出正確的模型

2.確定描述集,定義集合

3.確定變量

4.正確寫出每個式子

 

常用函數(lingo每個函數都必須用@強調):

!max, min用於用於定義目標函數
@bin(x)表示x為0或1
@gin(x)表示x是整數
@free(x)表示x為任意實數,因為變量默認為非負實數,所以必須用這個函數解除這種限制
@bnd(1, x, u)表示x為[1, u]之間的實數
如表示x在(-5,5)之間的整數,@free(x),@gin(x),@bnd(-5, x, 5)

 編程方法:

1.不使用集合語言--解決小規模問題(笨方法編程)

例如解下面這個線性規划問題

max = 72 * x1 + 64 * x2;
x1 + x2 < 50;
12 * x1 + 8 * x2 < 480;
3 * x1 < 100;
x1, x2 >= 0;

model:
max = 72 * x1 + 64 * x2;
[milk] x1 + x2 < 50;        !milk是約束條件的別名,方便在結果窗口中查看相關信息;
[time] 12 * x1 + 8 * x2 < 480;  !time也是別名;
[cpct] 3 * x1 < 100;        !cpct也是別名;
end

運行結果(會彈出兩個窗口,只需關心下面這個窗口,另一個不用管)

 

2.使用集合語言--解決大規模問題

sets: !定義集合;
S/1..6/: a, b, d;    !S集合下標范圍是1到6,a b d這三個變量用到了這個集合;
T/1..2/: e, x, y;
U(S, T): c;    !雙索引的集合,c用到了這個集合;

endsets    !結束集合的定義;
data:    !定義已知變量,也就是為每個已知變量賦值;

a = 1.25 8.75 0.5 5.75 3 7.25;
b = 1.25 0.75 4.75 5 6.5 7.75;
d = 3 5 4 7 6 11;
x = 5 2;
y = 1 7;
e = 20 20;
enddata    !結束數據的寫入;

!目標方程;
min = @sum(T(j):@sum(S(i):c(i, j) * @sqrt((x(j) - a(i))^2 + (y(j) - b(i))^2)));

!約束條件;
@for(S(i):@sum(T(j):c(i, j)) = d(i));    !i屬於S集合范圍,j屬於T集合范圍,這個約束條件的意思是在j方向上對Cij求和 == d(i);
@for(T(j):@sum(S(i):c(i, j)) <= e(j));

 教學視屏:https://www.bilibili.com/video/av36145650?from=search&seid=8857491974091223952

(建議1.25倍速)

 對線性規划做敏感性分析設置(這里用第一個題目做樣例)

點擊lingo -> option -> general solver -> Dura Computations -> Price& ranges -> apply -> save --> ok

 

點擊lingo -> range

 


免責聲明!

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



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