II.III 變量賦值區(qū)域
賦值模塊顧名思義是涉及到給變量賦值,但這里的變量特指是集合變量,因?yàn)槠渌膯蝹€(gè)的決策變量,可以直接在定義時(shí)賦值,只有集合變量涉及到定義和賦值分開。
該模塊以data:開頭,以enddata結(jié)尾,因此所有對(duì)集合的賦值操作都要在這個(gè)區(qū)域內(nèi)完成。
賦值的方法是很簡(jiǎn)單的,這里跟之前一樣分一維和二維集合變量進(jìn)行介紹:
II.III.i 一維集合變量的賦值
對(duì)一維集合的賦值,格式為:
集合變量名 = n1,n2,…
注意這里是集合變量名,不是集合名。
II.III.ii 二維集合變量的賦值
對(duì)二維集合的賦值,格式為:
集合變量名 = a11,a12,a13…a1n, a21,a22,….a2n,…ann
簡(jiǎn)單的說(shuō)就是二維集合變量的賦值,從左到右,是從第一行的第一列開始,到最后一行的最后一列,每一行結(jié)束后,下一個(gè)數(shù)字是下一行的第一列的數(shù)字。
下面的代碼演示了這部分的內(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ū)域(邏輯部分)
通過(guò)一個(gè)@for函數(shù)(和@sum)的使用場(chǎng)景實(shí)例,講解for循環(huán)和@sum在lingo中的實(shí)現(xiàn)。通過(guò)對(duì)一個(gè)具體問(wèn)題的分析,我們得到了一組約束條件:
這個(gè)例子中,變量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ù)的定義,接下來(lái)就要處理三個(gè)累加的問(wèn)題了。累加的問(wèn)題用編程解決就是用循環(huán)思想,在lingo中,@sum函數(shù)提供了累加,@for函數(shù)提供了循環(huán)的方法。
II.IV.i @max函數(shù)的使用
@sum函數(shù)的定義:@sum(參數(shù)1:參數(shù)2_參數(shù)3_…)
總得來(lái)說(shuō),@sum函數(shù)有兩個(gè)傳參,參數(shù)1和參數(shù)2,它們的意義:
參數(shù)1:設(shè)要參與累加的那個(gè)集合變量所在的集合的集合名稱為A,參數(shù)1:A(i,j) (或一維集合:A(i)),這里注意,第一個(gè)參數(shù)是集合名稱,不是集合變量名稱!
參數(shù)2:設(shè)要參與累加的那個(gè)集合的一系列集合變量的名稱為B, 參數(shù)2:B(i,j). 當(dāng)然了如果是單純的加法,那么參數(shù)2只有一個(gè)集合變量B,那么參數(shù)2就是簡(jiǎn)簡(jiǎn)單單的B(i,j)而已,但如果出現(xiàn)積的和,需要添加一步乘法的運(yùn)算。(也可能是一維的集合,那么就是B(i))
了解了@sum函數(shù),那么第一個(gè)約束條件就可以轉(zhuǎn)換成代碼了,因?yàn)樗挥玫搅薂sum函數(shù),不涉及@for。
首先,min就用min函數(shù)表示,后面出現(xiàn)了累加,我們進(jìn)行簡(jiǎn)單的分析,發(fā)現(xiàn)g和L來(lái)自于集合link,于是@sum的第一個(gè)參數(shù)就是link(i,j)。
第2個(gè)參數(shù),上面提到了,是集合變量(i,j),由于這里是一個(gè)乘積關(guān)系,在集合名稱(i,j)的基礎(chǔ)上加上一個(gè)乘法的運(yùn)算,套用參數(shù)2的結(jié)論,第二個(gè)參數(shù)就是g(i,j) * L(i,j)。
把兩個(gè)參數(shù)用之前定義格式放好,我們得到了關(guān)于第一個(gè)約束條件的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),也即只有一個(gè)索引值的那個(gè)集合。第2個(gè)參數(shù)是@sum函數(shù),這個(gè)函數(shù)內(nèi)部的定義與之前@sum函數(shù)有稍微區(qū)別:第1個(gè)參數(shù)不再是參與累加的變量所在的集合的集合名稱,而是參與累加的變量實(shí)際累加的下標(biāo)對(duì)應(yīng)的集合的集合名稱,例如參與累加的變量g(i,j),如果每一輪的循環(huán),只有i在變化,那么這個(gè)第1個(gè)參數(shù)就是組成g(i,j)所在的二維集合的提供i索引的一維集合的名稱,本例中提供i索引的一維集合是supply集合,因此第1個(gè)參數(shù)是supply(i),第2個(gè)參數(shù)照舊,即參與累加的集合變量名(i,j)。
下面分析下面的兩個(gè)條件轉(zhuǎn)譯為lingo代碼:
首先,對(duì)于第一個(gè)條件,@for的參數(shù)1是d這個(gè)集合變量所在集合的集合名稱(j),也即d(j)。之后,第2個(gè)參數(shù)@sum函數(shù),根據(jù)條件的定義,是對(duì)于每一個(gè)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))
同理,第二個(gè)約束條件轉(zhuǎn)譯代碼:
@for(supply(i):@sum(demand(j):g(i,j)) = s(i))
II.V 補(bǔ)充:lingo常見函數(shù)
@bin(x):只有0和1結(jié)果的函數(shù)
@free(x):解除變量的非負(fù)性
@abs(x):絕對(duì)值函數(shù),返回x的絕對(duì)值;
@cos(x):余弦函數(shù),返回x的余弦值(x的單位是弧度);
@exp(x):指數(shù)函數(shù),返回e x e^xe
x
的值(其中e為自然對(duì)數(shù)的底);
@floor(x):取整函數(shù),返回x的整數(shù)部分(向最靠近0的方向取整);
@lgm(x):返回x的伽馬(Gamma)函數(shù)的自然對(duì)數(shù)值(當(dāng)x為整數(shù)時(shí),lgm(x)=log(x-1);當(dāng)x不為整數(shù)時(shí),采用線性插值得到結(jié)果);
@log(x):自然對(duì)數(shù)函數(shù),返回x的自然對(duì)數(shù)值;
@mod(x,y):模函數(shù),返回x對(duì)y取模結(jié)果,即x除以y的余數(shù),這里x和y應(yīng)該是整數(shù);
@pow(x,y):指數(shù)函數(shù),返回x y x^yx
y
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過(guò),也去過(guò)華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)Python工程師,想要提升技能,往往是自己摸索成長(zhǎng)或者是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年P(guān)ython開發(fā)全套學(xué)習(xí)資料》,初衷也很簡(jiǎn)單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Python開發(fā)知識(shí)點(diǎn),真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來(lái),每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且后續(xù)會(huì)持續(xù)更新
如果你覺得這些內(nèi)容對(duì)你有幫助,可以添加V獲?。簐ip1024c (備注Python)
如果你也是看準(zhǔn)了Python,想自學(xué)Python,在這里為大家準(zhǔn)備了豐厚的免費(fèi)學(xué)習(xí)大禮包,帶大家一起學(xué)習(xí),給大家剖析Python兼職、就業(yè)行情前景的這些事兒。
一、Python所有方向的學(xué)習(xí)路線
Python所有方向路線就是把Python常用的技術(shù)點(diǎn)做整理,形成各個(gè)領(lǐng)域的知識(shí)點(diǎn)匯總,它的用處就在于,你可以按照上面的知識(shí)點(diǎn)去找對(duì)應(yīng)的學(xué)習(xí)資源,保證自己學(xué)得較為全面。
二、學(xué)習(xí)軟件
工欲善其必先利其器。學(xué)習(xí)Python常用的開發(fā)軟件都在這里了,給大家節(jié)省了很多時(shí)間。
三、全套PDF電子書
書籍的好處就在于權(quán)威和體系健全,剛開始學(xué)習(xí)的時(shí)候你可以只看視頻或者聽某個(gè)人講課,但等你學(xué)完之后,你覺得你掌握了,這時(shí)候建議還是得去看一下書籍,看權(quán)威技術(shù)書籍也是每個(gè)程序員必經(jīng)之路。
四、入門學(xué)習(xí)視頻
我們?cè)诳匆曨l學(xué)習(xí)的時(shí)候,不能光動(dòng)眼動(dòng)腦不動(dòng)手,比較科學(xué)的學(xué)習(xí)方法是在理解之后運(yùn)用它們,這時(shí)候練手項(xiàng)目就很適合了。
四、實(shí)戰(zhàn)案例
光學(xué)理論是沒(méi)用的,要學(xué)會(huì)跟著一起敲,要?jiǎng)邮謱?shí)操,才能將自己的所學(xué)運(yùn)用到實(shí)際當(dāng)中去,這時(shí)候可以搞點(diǎn)實(shí)戰(zhàn)案例來(lái)學(xué)習(xí)。
五、面試資料
我們學(xué)習(xí)Python必然是為了找到高薪的工作,下面這些面試題是來(lái)自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠最新的面試資料,并且有阿里大佬給出了權(quán)威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-858444.html
成為一個(gè)Python程序員專家或許需要花費(fèi)數(shù)年時(shí)間,但是打下堅(jiān)實(shí)的基礎(chǔ)只要幾周就可以,如果你按照我提供的學(xué)習(xí)路線以及資料有意識(shí)地去實(shí)踐,你就有很大可能成功!
最后祝你好運(yùn)?。。?span toymoban-style="hidden">文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-858444.html
2731a671c1fb70aad5355a2c5eeff0.png)
五、面試資料
我們學(xué)習(xí)Python必然是為了找到高薪的工作,下面這些面試題是來(lái)自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠最新的面試資料,并且有阿里大佬給出了權(quán)威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
成為一個(gè)Python程序員專家或許需要花費(fèi)數(shù)年時(shí)間,但是打下堅(jiān)實(shí)的基礎(chǔ)只要幾周就可以,如果你按照我提供的學(xué)習(xí)路線以及資料有意識(shí)地去實(shí)踐,你就有很大可能成功!
最后祝你好運(yùn)?。?!
到了這里,關(guān)于Lingo軟件入門【數(shù)學(xué)建?!?,面試Python開發(fā)十大問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!