一.基本語法規則(參考博文:https://blog.csdn.net/qq_37158933/article/details/83002940)
1.語句必須以分號;結束,每行可以有多個語句,語句可以跨行。
2.!開頭爲註釋,註釋也需要;結尾。
3.若對變量取值範圍沒有特殊說明,則默認所有決策變量都是負。
4.Lingo模型以語句“model:”開頭,以“end"結尾。對於簡單模型,可以省略。
5.Lingo沒有單獨”<"或”>"關係,若出現”<"等價於"<="。如果需要嚴格要求大/小關係。可以寫成:A+α<=B,α是一個小的正數,它的值依賴於模型小於B多少纔算不等。
二.集合(參考博文:https://blog.csdn.net/breeze_blows/article/details/75332726)
直接貼代碼(註釋很詳細)
!模型的開始;
model:
!集合定義的開始;
sets:
quarters/1,2,3,4/:dem, rp, op, inv;
!集合quarters類似於數組,dem等表示該集合包含的元素,這裏一共有四個元素。
/1,2,3,4/表示該集合的大小,對應着實際問題的每一個季度,/1,2,3,4/等價於
/1..4/,當集合大小比較大時,建議寫後者;
endsets !集合定義的結束;
min = @sum(quarters:400*rp+450*op+20*inv);
!@sum(),求和函數表示對該集合所有依次進行求和,由於這是是對所有,所以省去了循環變量,這裏等價於
@sum(quarters(i):400*rp(i)+450*op(i)+20*inv(i));
@for(quarters(i):rp(i)<40);
!@for類似於c/c++中的for循環,對其中操作循環進行;
@for(quarters(i)|I#GT#1 !|表示對於循環的限制,#GT#表示大於;
inv(i) = inv(i-1)+rp(i)+op(i)-dem(i););
:inv(1) = 10+rp(1)+op(1)-dem(1);
data: !初始數據段開始;
dem = 40, 60, 75, 25;
enddata
end