下面的代碼演示了這部分的內(nèi)容:
sets:
supply/1…2/: s; !集合一,s是集合變量
demand/1…3/: d; !集合二,d是集合變量
link(supply,demand): road, g; !二維集合,road和g是集合變量
endsets
data:
road = 10,5,6,4,8,12;
d = 50,70,40;
s = 60,100;
enddata
II.IV 約束條件區(qū)域(邏輯部分)
通過一個@for函數(shù)(和@sum)的使用場景實例,講解for循環(huán)和@sum在lingo中的實現(xiàn)。通過對一個具體問題的分析,我們得到了一組約束條件:
這個例子中,變量g是決策變量,L、d和s都是已知的變量,已知變量的賦值:
model:
sets:
supply/1…2/??;
demand/1…3/:d;
link(supply, demand):road, g;
endsets
data:
L = 10, 5, 6, 4, 8, 12;
d = 50, 70, 40;
s = 60, 100;
顯然上述的代碼還原了我們的規(guī)劃方程中關(guān)于數(shù)據(jù)的定義,接下來就要處理三個累加的問題了。累加的問題用編程解決就是用循環(huán)思想,在lingo中,@sum函數(shù)提供了累加,@for函數(shù)提供了循環(huán)的方法。
II.IV.i @max函數(shù)的使用
@sum函數(shù)的定義:@sum(參數(shù)1:參數(shù)2_參數(shù)3_…)
總得來說,@sum函數(shù)有兩個傳參,參數(shù)1和參數(shù)2,它們的意義:
參數(shù)1:設(shè)要參與累加的那個集合變量所在的集合的集合名稱為A,參數(shù)1:A(i,j) (或一維集合:A(i)),這里注意,第一個參數(shù)是集合名稱,不是集合變量名稱!
參數(shù)2:設(shè)要參與累加的那個集合的一系列集合變量的名稱為B, 參數(shù)2:B(i,j). 當(dāng)然了如果是單純的加法,那么參數(shù)2只有一個集合變量B,那么參數(shù)2就是簡簡單單的B(i,j)而已,但如果出現(xiàn)積的和,需要添加一步乘法的運算。(也可能是一維的集合,那么就是B(i))
了解了@sum函數(shù),那么第一個約束條件就可以轉(zhuǎn)換成代碼了,因為它只用到了@sum函數(shù),不涉及@for。
首先,min就用min函數(shù)表示,后面出現(xiàn)了累加,我們進(jìn)行簡單的分析,發(fā)現(xiàn)g和L來自于集合link,于是@sum的第一個參數(shù)就是link(i,j)。
第2個參數(shù),上面提到了,是集合變量(i,j),由于這里是一個乘積關(guān)系,在集合名稱(i,j)的基礎(chǔ)上加上一個乘法的運算,套用參數(shù)2的結(jié)論,第二個參數(shù)就是g(i,j) * L(i,j)。
把兩個參數(shù)用之前定義格式放好,我們得到了關(guān)于第一個約束條件的lingo代碼:
min = @sum(link(i,j) : L(i,j) * g(i,j));
II.IV.ii @for循環(huán)的使用
@for函數(shù)的定義:@for(參數(shù)1:@sum函數(shù))
其中參數(shù)1是被操作的一維集合的集合名稱(i/j),也即只有一個索引值的那個集合。第2個參數(shù)是@sum函數(shù),這個函數(shù)內(nèi)部的定義與之前@sum函數(shù)有稍微區(qū)別:第1個參數(shù)不再是參與累加的變量所在的集合的集合名稱,而是參與累加的變量實際累加的下標(biāo)對應(yīng)的集合的集合名稱,例如參與累加的變量g(i,j),如果每一輪的循環(huán),只有i在變化,那么這個第1個參數(shù)就是組成g(i,j)所在的二維集合的提供i索引的一維集合的名稱,本例中提供i索引的一維集合是supply集合,因此第1個參數(shù)是supply(i),第2個參數(shù)照舊,即參與累加的集合變量名(i,j)。
下面分析下面的兩個條件轉(zhuǎn)譯為lingo代碼:
首先,對于第一個條件,@for的參數(shù)1是d這個集合變量所在集合的集合名稱(j),也即d(j)。之后,第2個參數(shù)@sum函數(shù),根據(jù)條件的定義,是對于每一個j的值,進(jìn)行i從1-2的累加,那么@sum函數(shù)寫作:
@sum(supply(i):g(i,j))
最后,在@for函數(shù)中執(zhí)行賦值操作,即把@sum函數(shù)得到的結(jié)果賦值給d變量,因此完整的代碼寫作:
@for(demand(j):@sum(supply(i):g(i,j)) = d(j))
同理,第二個約束條件轉(zhuǎn)譯代碼:
@for(supply(i):@sum(demand(j):g(i,j)) = s(i))
II.V 補充:lingo常見函數(shù)
@bin(x):只有0和1結(jié)果的函數(shù)
@free(x):解除變量的非負(fù)性
@abs(x):絕對值函數(shù),返回x的絕對值;
@cos(x):余弦函數(shù),返回x的余弦值(x的單位是弧度);
@exp(x):指數(shù)函數(shù),返回e x e^xe
x
的值(其中e為自然對數(shù)的底);
@floor(x):取整函數(shù),返回x的整數(shù)部分(向最靠近0的方向取整);
@lgm(x):返回x的伽馬(Gamma)函數(shù)的自然對數(shù)值(當(dāng)x為整數(shù)時,lgm(x)=log(x-1);當(dāng)x不為整數(shù)時,采用線性插值得到結(jié)果);
@log(x):自然對數(shù)函數(shù),返回x的自然對數(shù)值;
@mod(x,y):模函數(shù),返回x對y取模結(jié)果,即x除以y的余數(shù),這里x和y應(yīng)該是整數(shù);
@pow(x,y):指數(shù)函數(shù),返回x y x^yx
y
的值。
@sign(x):符號函數(shù),返回x的符號值(x<0時返回-1,x=0時返回0,x>0時返回+1);
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)前端工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但對于培訓(xùn)機(jī)構(gòu)動則幾千的學(xué)費,著實壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Web前端開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上前端開發(fā)知識點,真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新文章來源:http://www.zghlxwxcb.cn/news/detail-845770.html
如果你覺得這些內(nèi)容對你有幫助,可以添加V獲?。簐ip1024c (備注前端)
白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上前端開發(fā)知識點,真正體系化!**
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新
如果你覺得這些內(nèi)容對你有幫助,可以添加V獲?。簐ip1024c (備注前端)
[外鏈圖片轉(zhuǎn)存中…(img-CXlBlaCl-1711773922161)]文章來源地址http://www.zghlxwxcb.cn/news/detail-845770.html
到了這里,關(guān)于Lingo軟件入門【數(shù)學(xué)建?!?,騰訊T2大牛親自教你的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!