@size:
lingo中的@size()函式用於確定集合中元素的個數。比如你的集合是
注意:在使用size的時候直接在@size()括號裡寫上集合名就行,不需要寫@size(s1(i))中的(i)
s1/a b c d f g /
:x;
當呼叫m=@size(s1)時,它返回的乙個數值6,因為s裡面有6個元素。
@for:
該函式用來表示線性規劃中的約束條件
sets:r/1
..8/:d;c/1
..8/:
; !就算沒有集合屬性也要寫":"
;link(r,c)
:x,y; !派生集合;
endsets
@for
(r(i)
:@for
(c(j)
:x(i,j)
<=y(i,j)))
; !可用@for
(link:x<=y)代替;
@for
(r(i)
|i#ge#2:d(i)>=3) !":"前說的是對哪個集合進行約束,":"後面說的事具體是什麼樣的約束;
!"|"表示過濾,即篩選r(i)下標集中i>=
2的下標,即/2,
3..8/
@sum
該函式用來求和,格式:@sum(setname(i):x(i))
總的例子:
model:
title cutting-stock problem; !給模型起個名字;
sets:
needs/1.
.4/:length,num;
cuts/1.
.3/:x;patterns(needs,cuts)
:r;endsets
data:
length =45
68;num =
5010
2015
;capacity =
19; !後面用的比較多的常數;
enddata
min= @sum
(cuts(i)
:x(i));
@for
(cuts(j)
:@sum
(needs(i)
:length(i)
*r(i,j)
);@for
(cuts(j)
:@sum
(needs(i)
:length(i)
*r(i,j)
)>capacity-@min
(needs:length));
@for
(needs(i)
:@sum
(cuts(j)
:x(j)
*r(i,j)
)>num(i));
@sum
(cuts(i)
:x(i)
)>26;
@sum
(cuts(i)
:x(i)
)<
31;
@for
(cuts(i)
|i#lt#@size(cuts):x(i)>x(i+1)); !x1>=x2>=x3;
@for
(cuts:@gin(x)
); !每乙個x都要是整數;
@for
(patterns:@gin(r)
); !每乙個r都要是整數;
end
如果不足歡迎指正 Lingo 集合小結
現在,我們歸納一下基本集合和派生集合的定義語法。基本集合的定義格式為 以下語 法中凡是在方括號 中的內容,表示是可選的項,即該項可以有也可以沒有 setname member list attribute list 其中 setname 為定義的集合名,member list 為元素列表,attri...
Lingo基本操作
二 函式 三 待更新 lingo是一門主要求解非線性規劃數學模型的程式設計軟體,記得最初接觸lingo是在閱讀 數學建模教程 一書,該書在第五章主要講解使用lingo來解決優化問題,也是在那個時候認識到了lingo的強大之處。lingo的使用就好比解決一道簡單的數學問題,而你只需要使用lingo支援...
Lingo入門基礎
lingo linear interactive and general optimizer 可以求解非線性規劃,也可以用於線性和非線性方程組的求解,是求解優化模型的最佳選擇。確保模型是正確的 清楚每個式子的意思,變數 下標均嚴格區分,確定模型型別 確定指標集,定義集合 確定變數 已知資料的量 決策...