Lingo的基本使用方法_第1頁(yè)
Lingo的基本使用方法_第2頁(yè)
Lingo的基本使用方法_第3頁(yè)
Lingo的基本使用方法_第4頁(yè)
Lingo的基本使用方法_第5頁(yè)
已閱讀5頁(yè),還剩145頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

LINGO軟件的基本使用方法目前一頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)LINGO軟件的功能與特點(diǎn)LINGO模型的功能集成了線性(非線性)/連續(xù)(整數(shù))優(yōu)化功能具有多點(diǎn)搜索/全局優(yōu)化功能提供了靈活的編程語(yǔ)言(矩陣生成器),可方便地輸入模型提供與其他數(shù)據(jù)文件的接口提供與其他編程語(yǔ)言的接口LINDOAPI可用于自主開(kāi)發(fā)運(yùn)行速度較快目前二頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)

最優(yōu)化是工程技術(shù)、經(jīng)濟(jì)管理、科學(xué)研究、社會(huì)生活中經(jīng)常遇到的問(wèn)題,如:優(yōu)化模型和算法的重要意義結(jié)構(gòu)設(shè)計(jì)資源分配生產(chǎn)計(jì)劃運(yùn)輸方案解決優(yōu)化問(wèn)題的手段

經(jīng)驗(yàn)積累,主觀判斷

作試驗(yàn),比優(yōu)劣

建立數(shù)學(xué)模型,求解最優(yōu)策略最優(yōu)化:在一定條件下,尋求使目標(biāo)最大(小)的決策目前三頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)LPQPNLPIP全局優(yōu)化(選)

ILPIQPINLP

LINGO軟件的求解過(guò)程LINGO預(yù)處理程序線性優(yōu)化求解程序非線性優(yōu)化求解程序分枝定界管理程序1.確定常數(shù)2.識(shí)別類型1.單純形算法2.內(nèi)點(diǎn)算法(選)1、順序線性規(guī)劃法(SLP)2、廣義既約梯度法(GRG)(選)

3、多點(diǎn)搜索(Multistart)(選)目前四頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)建模時(shí)需要注意的幾個(gè)基本問(wèn)題

1、盡量使用實(shí)數(shù)優(yōu)化,減少整數(shù)約束和整數(shù)變量2、盡量使用光滑優(yōu)化,減少非光滑約束的個(gè)數(shù)如:盡量少使用絕對(duì)值、符號(hào)函數(shù)、多個(gè)變量求最大/最小值、四舍五入、取整函數(shù)等3、盡量使用線性模型,減少非線性約束和非線性變量的個(gè)數(shù)(如x/y<5改為x<5y)4、合理設(shè)定變量上下界,盡可能給出變量初始值5、模型中使用的參數(shù)數(shù)量級(jí)要適當(dāng)(如小于103)目前五頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)內(nèi)容提要LINGO入門2.在LINGO中使用集合3.運(yùn)算符和函數(shù)4.LINGO的主要菜單命令5.LINGO命令窗口

6.習(xí)題目前六頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)1.LINGO入門LINGO入門2.在LINGO中使用集合3.運(yùn)算符和函數(shù)4.LINGO的主要菜單命令5.LINGO命令窗口

6.習(xí)題目前七頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)LINGO軟件的主要特色兩種命令模式Windows模式:通過(guò)下拉式菜單命令驅(qū)動(dòng)LINGO運(yùn)行(多數(shù)菜單命令有快捷鍵,常用的菜單命令有快捷按鈕),圖形界面,使用方便;命令行模式:僅在命令窗口(CommandWindow)下操作,通過(guò)輸入行命令驅(qū)動(dòng)LINGO運(yùn)行。(這里主要介紹這種模式)目前八頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)LINGO11.0功能增強(qiáng),性能穩(wěn)定,解答結(jié)果可靠。LINGO軟件主要具有兩大優(yōu)點(diǎn):內(nèi)置建模語(yǔ)言,允許以簡(jiǎn)練、直觀的方式描述較大規(guī)模的優(yōu)化問(wèn)題,所需的數(shù)據(jù)可以以一定格式保存在獨(dú)立的文件中。可用于求解經(jīng)典的數(shù)學(xué)規(guī)劃問(wèn)題,包括非線性整數(shù)規(guī)劃問(wèn)題;目前九頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)LINGO的界面LINGO軟件的主窗口(用戶界面),所有其他窗口都在這個(gè)窗口之內(nèi)。模型窗口(ModelWindow),用于輸入LINGO優(yōu)化模型(即LINGO程序)。狀態(tài)行(最左邊顯示“Ready”,表示“準(zhǔn)備就緒”)當(dāng)前時(shí)間當(dāng)前光標(biāo)的位置目前十頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)一個(gè)簡(jiǎn)單的LINGO程序例1直接用LINGO來(lái)解如下二次規(guī)劃問(wèn)題:輸入窗口如下:目前十一頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)程序語(yǔ)句輸入的備注:LINGO總是根據(jù)“MAX=”或“MIN=”尋找目標(biāo)函數(shù),而除注釋語(yǔ)句和TITLE語(yǔ)句外的其他語(yǔ)句都是約束條件,因此語(yǔ)句的順序并不重要。限定變量取整數(shù)值的語(yǔ)句為“@GIN(X1)”和“@GIN(X2)”,不可以寫成“@GIN(2)”,否則LINGO將把這個(gè)模型看成沒(méi)有整數(shù)變量。LINGO中函數(shù)一律需要以“@”開(kāi)頭,其中整型變量函數(shù)(@BIN、@GIN)和上下界限定函數(shù)(@FREE、@SUB、@SLB)與LINDO中的命令類似。而且0/1變量函數(shù)是@BIN函數(shù)。目前十二頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)輸出結(jié)果:運(yùn)行菜單命令“LINGO|Solve”最優(yōu)整數(shù)解X=(35,65)最大利潤(rùn)=11077.5目前十三頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)輸出結(jié)果備注:通過(guò)菜單“WINDOW|StatusWindow”看到狀態(tài)窗口,可看到最佳目標(biāo)值“BestObj”與問(wèn)題的上界“ObjBound”已經(jīng)是一樣的,當(dāng)前解的最大利潤(rùn)與這兩個(gè)值非常接近,是計(jì)算誤差引起的。如果采用全局最優(yōu)求解程序(后面介紹),可以驗(yàn)證它就是全局最優(yōu)解。LINGO是將它作為PINLP(純整數(shù)非線性規(guī)劃)來(lái)求解,因此找到的是局部最優(yōu)解。目前十四頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)運(yùn)行狀態(tài)窗口Variables(變量數(shù)量):變量總數(shù)(Total)、非線性變量數(shù)(Nonlinear)、整數(shù)變量數(shù)(Integer)。Constraints(約束數(shù)量):約束總數(shù)(Total)、非線性約束個(gè)數(shù)(Nonlinear)。Nonzeros(非零系數(shù)數(shù)量):總數(shù)(Total)、非線性項(xiàng)系數(shù)個(gè)數(shù)(Nonlinear)。GeneratorMemoryUsed(K)(內(nèi)存使用量)ElapsedRuntime(hh:mm:ss)(求解花費(fèi)的時(shí)間)目前十五頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)運(yùn)行狀態(tài)窗口求解器(求解程序)狀態(tài)框當(dāng)前模型的類型:LP,QP,ILP,IQP,PILP,PIQP,NLP,INLP,PINLP(以I開(kāi)頭表示IP,以PI開(kāi)頭表示PIP)當(dāng)前解的狀態(tài):"GlobalOptimum","LocalOptimum","Feasible","Infeasible“(不可行),"Unbounded“(無(wú)界),"Interrupted“(中斷),"Undetermined“(未確定)解的目標(biāo)函數(shù)值當(dāng)前約束不滿足的總量(不是不滿足的約束的個(gè)數(shù)):實(shí)數(shù)(即使該值=0,當(dāng)前解也可能不可行,因?yàn)檫@個(gè)量中沒(méi)有考慮用上下界命令形式給出的約束)目前為止的迭代次數(shù)目前十六頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)運(yùn)行狀態(tài)窗口擴(kuò)展的求解器(求解程序)狀態(tài)框使用的特殊求解程序:B-and-B(分枝定界算法)Global(全局最優(yōu)求解程序)Multistart(用多個(gè)初始點(diǎn)求解的程序)目前為止找到的可行解的最佳目標(biāo)函數(shù)值目標(biāo)函數(shù)值的界特殊求解程序當(dāng)前運(yùn)行步數(shù):分枝數(shù)(對(duì)B-and-B程序);子問(wèn)題數(shù)(對(duì)Global程序);初始點(diǎn)數(shù)(對(duì)Multistart程序)有效步數(shù)目前十七頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)注:凡是可以從一個(gè)約束直接解出變量取值時(shí),這個(gè)變量就不認(rèn)為是決策變量而是固定變量,不列入統(tǒng)計(jì)中;只含有固定變量的約束也不列入約束統(tǒng)計(jì)中。運(yùn)行狀態(tài)窗口目前十八頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)一個(gè)簡(jiǎn)單的LINGO程序LINGO的基本用法的幾點(diǎn)注意事項(xiàng)LINGO中不區(qū)分大小寫字母;變量和行名可以超過(guò)8個(gè)字符,但不能超過(guò)32個(gè)字符,且必須以字母開(kāi)頭。用LINGO解優(yōu)化模型時(shí)已假定所有變量非負(fù)(除非用限定變量取值范圍的函數(shù)@free或@sub或@slb另行說(shuō)明)。變量可以放在約束條件的右端(同時(shí)數(shù)字也可放在約束條件的左端)。但為了提高LINGO求解時(shí)的效率,應(yīng)盡可能采用線性表達(dá)式定義目標(biāo)和約束(如果可能的話)。語(yǔ)句是組成LINGO模型的基本單位,每個(gè)語(yǔ)句都以分號(hào)結(jié)尾,編寫程序時(shí)應(yīng)注意模型的可讀性。例如:一行只寫一個(gè)語(yǔ)句,按照語(yǔ)句之間的嵌套關(guān)系對(duì)語(yǔ)句安排適當(dāng)?shù)目s進(jìn),增強(qiáng)層次感。以感嘆號(hào)開(kāi)始的是說(shuō)明語(yǔ)句(說(shuō)明語(yǔ)句也需要以分號(hào)結(jié)束)。目前十九頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)LINGO的文件類型.LG4:LINGO格式的模型文件,保存了模型窗口中所能夠看到的所有文本和其他對(duì)象及其格式信息;.LNG:文本格式的模型文件,不保存模型中的格式信息(如字體、顏色、嵌入對(duì)象等);.LDT:LINGO數(shù)據(jù)文件;.LTF:LINGO命令腳本文件;.LGR:LINGO報(bào)告文件;.LTX:LINDO格式的模型文件;.MPS:表示MPS(數(shù)學(xué)規(guī)劃系統(tǒng))格式的模型文件。除“LG4”文件外,另外幾種格式的文件都是普通的文本文件,可以用任何文本編輯器打開(kāi)和編輯。目前二十頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)2.在LINGO中使用集合LINGO入門2.在LINGO中使用集合3.運(yùn)算符和函數(shù)4.LINGO的主要菜單命令5.LINGO命令窗口

6.習(xí)題目前二十一頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)集合的基本用法和LINGO模型的基本要素理解LINGO建模語(yǔ)言最重要的是理解集合(Set)及其屬性(Attribute)的概念。例2

SAILCO公司需要決定下四個(gè)季度的帆船生產(chǎn)量。下四個(gè)季度的帆船需求量分別是40條,60條,75條,25條,這些需求必須按時(shí)滿足。每個(gè)季度正常的生產(chǎn)能力是40條帆船,每條船的生產(chǎn)費(fèi)用為400美元。如果加班生產(chǎn),每條船的生產(chǎn)費(fèi)用為450美元。每個(gè)季度末,每條船的庫(kù)存費(fèi)用為20美元。假定生產(chǎn)提前期為0,初始庫(kù)存為10條船。如何安排生產(chǎn)可使總費(fèi)用最???用DEM,RP,OP,INV分別表示需求量、正常生產(chǎn)的產(chǎn)量、加班生產(chǎn)的產(chǎn)量、庫(kù)存量,則DEM,RP,OP,INV對(duì)每個(gè)季度都應(yīng)該有一個(gè)對(duì)應(yīng)的值,也就說(shuō)他們都應(yīng)該是一個(gè)由4個(gè)元素組成的數(shù)組,其中DEM是已知的,而RP,OP,INV是未知數(shù)。目前二十二頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)問(wèn)題的模型(可以看出是LP模型)目標(biāo)函數(shù)是所有費(fèi)用的和

約束條件主要有兩個(gè):1)能力限制:2)產(chǎn)品數(shù)量的平衡方程:加上變量的非負(fù)約束目前二十三頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)注:LINGO中沒(méi)有數(shù)組,只能對(duì)每個(gè)季度分別定義變量,如正常產(chǎn)量就要有RP1,RP2,RP3,RP44個(gè)變量等。寫起來(lái)就比較麻煩,尤其是更多(如1000個(gè)季度)的時(shí)候。記四個(gè)季度組成的集合QUARTERS={1,2,3,4},它們就是上面數(shù)組的下標(biāo)集合,而數(shù)組DEM,RP,OP,INV對(duì)集合QUARTERS中的每個(gè)元素1,2,3,4分別對(duì)應(yīng)于一個(gè)值。LINGO正是充分利用了這種數(shù)組及其下標(biāo)的關(guān)系,引入了“集合”及其“屬性”的概念,把QUARTERS={1,2,3,4}稱為集合,把DEM,RP,OP,INV稱為該集合的屬性(即定義在該集合上的屬性)。目前二十四頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)QUARTERS集合的屬性DEMRPOPINVQUARTERS集合2341

集合及其屬性目前二十五頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)集合元素及集合的屬性確定的所有變量集合QUARTERS的元素1234定義在集合QUARTERS上的屬性DEMDEM(1)DEM(2)DEM(3)DEM(4)RPRP(1)RP(2)RP(3)RP(4)OPOP(1)OP(2)OP(3)OP(4)INVINV(1)INV(2)INV(3)INV(4)目前二十六頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)LINGO中定義集合及其屬性LP模型在LINGO中的一個(gè)典型輸入方式以“MODEL:”開(kāi)始以“END”結(jié)束集合定義部分從(“SETS:”到“ENDSETS”):定義集合及其屬性數(shù)據(jù)輸入部分從(“DATA:”到“ENDDATA”)給出優(yōu)化目標(biāo)和約束目前二十七頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)目標(biāo)函數(shù)的定義方式@SUM(集合(下標(biāo)):關(guān)于集合的屬性的表達(dá)式)對(duì)語(yǔ)句中冒號(hào)“:”后面的表達(dá)式,按照“:”前面的集合指定的下標(biāo)(元素)進(jìn)行求和。本例中目標(biāo)函數(shù)也可以等價(jià)地寫成@SUM(QUARTERS(i):400*RP(i)+450*OP(i)+20*INV(i)),“@SUM”相當(dāng)于求和符號(hào)“∑”,“QUARTERS(i)”相當(dāng)于“iQUARTERS”的含義。由于本例中目標(biāo)函數(shù)對(duì)集合QUARTERS的所有元素(下標(biāo))都要求和,所以可以將下標(biāo)i省去。目前二十八頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)約束的定義方式循環(huán)函數(shù)@FOR(集合(下標(biāo)):關(guān)于集合的屬性的約束關(guān)系式)對(duì)冒號(hào)“:”前面的集合的每個(gè)元素(下標(biāo)),冒號(hào)“:”后面的約束關(guān)系式都要成立本例中,每個(gè)季度正常的生產(chǎn)能力是40條帆船,這正是語(yǔ)句“@FOR(QUARTERS(I):RP(I)<40);”的含義。由于對(duì)所有元素(下標(biāo)I),約束的形式是一樣的,所以也可以像上面定義目標(biāo)函數(shù)時(shí)一樣,將下標(biāo)i省去,這個(gè)語(yǔ)句可以簡(jiǎn)化成“@FOR(QUARTERS:RP<40);”。目前二十九頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)本例中,對(duì)于產(chǎn)品數(shù)量的平衡方程,由于下標(biāo)i=1時(shí)的約束關(guān)系式與i=2,3,4時(shí)有所區(qū)別,所以不能省略下標(biāo)“i”。實(shí)際上,i=1時(shí)要用到變量INV(0),但定義的屬性變量中INV不包含INV(0)(INV(0)=10是一個(gè)已知的)。為了區(qū)別i=1和i=2,3,4,把i=1時(shí)的約束關(guān)系式單獨(dú)寫出,即“INV(1)=10+RP(1)+OP(1)-DEM(1);”;而對(duì)i=2,3,4對(duì)應(yīng)的約束,對(duì)下標(biāo)集合的元素(下標(biāo)i)增加了一個(gè)邏輯關(guān)系式“i#GT#1”(這個(gè)限制條件與集合之間有一個(gè)豎線“|”分開(kāi),稱為過(guò)濾條件)。限制條件“i#GT#1”是一個(gè)邏輯表達(dá)式,意思就是i>1;“#GT#”是邏輯運(yùn)算符號(hào),意思是“大于(GreaterThan的字首字母縮寫)”。約束的定義方式目前三十頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)問(wèn)題的求解:運(yùn)行菜單命令“LINGO|Solve”全局最優(yōu)解RP=(40,40,40,25),OP=(0,10,35,0)最小成本=78450目前三十一頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)注:由于輸入中沒(méi)有給出行名,所以行名是系統(tǒng)自動(dòng)按照行號(hào)1-9生成的。選擇菜單命令“LINGO|Generate|Displymodel(Ctrl+G)”,可以得到展開(kāi)形式的模型(如圖),可以看到完整的模型,也能確定行號(hào)(行號(hào)放在方括號(hào)“[]”中,且數(shù)字前面帶有下劃線“_”)。最好在輸入模型時(shí)用戶主動(dòng)設(shè)定約束的行名(即約束名),使程序清晰些。單一約束的行名設(shè)置方法就是將行名放在方括號(hào)“[]”中,置于約束之前。后面將結(jié)合具體例子介紹在使用集合的情況下如何設(shè)置行名。目前三十二頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)小結(jié):LINGO模型最基本的組成要素一般來(lái)說(shuō),LINGO中建立的優(yōu)化模型可以由五個(gè)部分組成,或稱為五“段”(SECTION):(1)集合段(SETS):以“SETS:”開(kāi)始,“ENDSETS”結(jié)束,定義必要的集合變量(SET)及其元素(MEMBER,含義類似于數(shù)組的下標(biāo))和屬性(ATTRIBUTE,含義類似于數(shù)組)。如上例中定義了集合quarters(含義是季節(jié)),它包含四個(gè)元素即四個(gè)季節(jié)指標(biāo)(1,2,3,4),每個(gè)季節(jié)都有需求(DEM)、正常生產(chǎn)量(RP)、加班生產(chǎn)量(OP)、庫(kù)存量(INV)等屬性(相當(dāng)于數(shù)組,數(shù)組下標(biāo)由quarters元素決定)。一旦這樣的定義建立起來(lái),如果quarters的數(shù)量不是4而是1000,只需擴(kuò)展其元素為1,2,...,1000,每個(gè)季節(jié)仍然都有DEM,RP,OP,INV這樣的屬性(這些量的具體數(shù)值如果是常量,則可在數(shù)據(jù)段輸入;如果是未知數(shù),則可不在初始段輸入初值)。當(dāng)quarters的數(shù)量不是4而是1000時(shí),沒(méi)有必要把1,2,...,1000全部一個(gè)一個(gè)列出來(lái),而是可以如下定義quarters集合:“quarters/1..1000/:DEM,RP,OP,INV;”,“1..1000”的意思就是從1到1000的所有整數(shù)。目前三十三頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)(2)目標(biāo)與約束段:目標(biāo)函數(shù)、約束條件等,沒(méi)有段的開(kāi)始和結(jié)束標(biāo)記,因此實(shí)際上就是除其它四個(gè)段(都有明確的段標(biāo)記)外的LINGO模型。這里一般要用到LINGO的內(nèi)部函數(shù),尤其是與集合相關(guān)的求和函數(shù)@SUM和循環(huán)函數(shù)@FOR等。上例中定義的目標(biāo)函數(shù)與quarters的元素?cái)?shù)目是4或1000并無(wú)具體的關(guān)系。約束的表示也類似。目前三十四頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)(3)數(shù)據(jù)段(DATA):以“DATA:”開(kāi)始,“ENDDATA”結(jié)束,對(duì)集合的屬性(數(shù)組)輸入必要的常數(shù)數(shù)據(jù)。格式為:“attribute(屬性)=value_list(常數(shù)列表);”常數(shù)列表(value_list)中數(shù)據(jù)之間可以用逗號(hào)“,”分開(kāi),也可以用空格分開(kāi)(回車等價(jià)于一個(gè)空格),如上面對(duì)DEM的賦值也可以寫成“DEM=40607525;”。在LINGO模型中,如果想在運(yùn)行時(shí)才對(duì)參數(shù)賦值,可以在數(shù)據(jù)段使用輸入語(yǔ)句。但這僅能用于對(duì)單個(gè)變量賦值,輸入語(yǔ)句格式為:“變量名=?;”。例如,上例中如果需要在求解模型時(shí)才給出初始庫(kù)存量(記為A),則可以在模型中數(shù)據(jù)段寫上語(yǔ)句:”A=?;“在求解時(shí)LINDO系統(tǒng)給出提示界面,等待用戶輸入變量A的數(shù)值。當(dāng)然,此時(shí)的約束語(yǔ)句INV(1)=10+RP(1)+OP(1)-DEM(1);也應(yīng)該改寫成INV(1)=A+RP(1)+OP(1)-DEM(1);這樣,模型就可以計(jì)算任意初始庫(kù)存量(而不僅僅只能計(jì)算初始庫(kù)存量為10)的情況了。目前三十五頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)(4)初始段(INIT):以“INIT:”開(kāi)始,“ENDINIT”結(jié)束,對(duì)集合的屬性(數(shù)組)定義初值(因?yàn)榍蠼馑惴ㄒ话闶堑惴?,所以用戶如果能給出一個(gè)比較好的迭代初值,對(duì)提高算法的計(jì)算效果是有益的)。如果有一個(gè)接近最優(yōu)解的初值,對(duì)LINGO求解模型是有幫助的。定義初值的格式為:“attribute(屬性)=value_list(常數(shù)列表);”這與數(shù)據(jù)段中的用法是類似的。上例中沒(méi)有初始化部分,我們將在下一個(gè)例子中舉例說(shuō)明。目前三十六頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)(5)計(jì)算段(CALC):以“CALC:”開(kāi)始,“ENDCALC”結(jié)束,對(duì)一些原始數(shù)據(jù)進(jìn)行計(jì)算處理。在實(shí)際問(wèn)題中,輸入的數(shù)據(jù)通常是原始數(shù)據(jù),不一定能在模型中直接使用,可以在這個(gè)段對(duì)這些原始數(shù)據(jù)進(jìn)行一定的“預(yù)處理”,得到模型中真正需要的數(shù)據(jù)。例如上例,如果希望得到全年的總需求和季度平均需求,可以增加這個(gè)段:CALC:T_DEM=@SUM(quarters:DEM);!總需求;A_DEM=T_DEM/@size(quarters);!平均需求;ENDCALC在計(jì)算段中也可以使用集合函數(shù)(其中函數(shù)@size(quarters)表示集合quarters的元素個(gè)數(shù),這里也就是4)。這時(shí),變量T_DEM的值就是總需求,A_DEM的值就是平均需求(如果需要的話,這兩個(gè)變量就可以在程序的其它地方作為常數(shù)使用了)。注:上面的兩個(gè)語(yǔ)句不能交換順序,因?yàn)橛?jì)算A_DEM必須要用到T_DEM的值。此外,在計(jì)算段中只能直接使用賦值語(yǔ)句,而不能包含需要經(jīng)過(guò)解方程或經(jīng)過(guò)求解優(yōu)化問(wèn)題以后才能決定的變量。目前三十七頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)基本集合與派生集合例3建筑工地的位置(用平面坐標(biāo)a,b表示,距離單位:公里)及水泥日用量d(噸)下表給出。有兩個(gè)臨時(shí)料場(chǎng)位于P(5,1),Q(2,7),日儲(chǔ)量各有20噸。從A,B兩料場(chǎng)分別向各工地運(yùn)送多少噸水泥,使總的噸公里數(shù)最小。兩個(gè)新的料場(chǎng)應(yīng)建在何處,節(jié)省的噸公里數(shù)有多大?123456a1.258.750.55.7537.25b1.250.754.7556.57.75d3547611目前三十八頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)建立模型記工地的位置為,水泥日用量為;料場(chǎng)位置為,日儲(chǔ)量為;從料場(chǎng)向工地的運(yùn)送量為。使用現(xiàn)有臨時(shí)料場(chǎng)時(shí),決策變量只有(非負(fù)),所以這是LP模型;當(dāng)為新建料場(chǎng)選址時(shí)決策變量為和,由于目標(biāo)函數(shù)對(duì)是非線性的,所以在新建料場(chǎng)時(shí)是NLP模型。先解NLP模型,而把現(xiàn)有臨時(shí)料場(chǎng)的位置作為初始解告訴LINGO。目前三十九頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)本例中集合的概念利用集合的概念,可以定義需求點(diǎn)DEMAND和供應(yīng)點(diǎn)SUPPLY兩個(gè)集合,分別有6個(gè)和2個(gè)元素(下標(biāo))。但決策變量(運(yùn)送量)與集合DEMAND和集合SUPPLY都有關(guān)系的。該如何定義這樣的屬性?集合的屬性相當(dāng)于以集合的元素為下標(biāo)的數(shù)組。這里的

相當(dāng)于二維數(shù)組。它的兩個(gè)下標(biāo)分別來(lái)自集合DEMAND和SUPPLY,因此可以定義一個(gè)由二元對(duì)組成的新的集合,然后將定義成這個(gè)新集合的屬性。目前四十頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)輸入程序

定義了三個(gè)集合,其中LINK在前兩個(gè)集合DEMAND和SUPPLY的基礎(chǔ)上定義表示集合LINK中的元素就是集合DEMAND和SUPPLY的元素組合成的有序二元組,從數(shù)學(xué)上看LINK是DEMAND和SUPPLY的笛卡兒積,也就是說(shuō)LINK={(S,T)|SDEMAND,TSUPPLY}因此,其屬性C也就是一個(gè)6*2的矩陣(或者說(shuō)是含有12個(gè)元素的二維數(shù)組)。LINGO建模語(yǔ)言也稱為矩陣生成器(MATRIXGENERATOR)。類似DEMAND和SUPPLY直接把元素列舉出來(lái)的集合,稱為基本集合(primaryset),而把LINK這種基于其它集合而派生出來(lái)的二維或多維集合稱為派生集合(derivedset)。由于是DEMAND和SUPPLY生成了派生集合LINK,所以DEMAND和SUPPLY稱為L(zhǎng)INK的父集合。目前四十一頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)輸入程序

初始段INGO對(duì)數(shù)據(jù)是按列賦值的語(yǔ)句的實(shí)際賦值順序是X=(5,2),Y=(1,7),而不是X=(5,1),Y=(2,7)等價(jià)寫法:“X=5,2;Y=1,7;”同理,數(shù)據(jù)段中對(duì)常數(shù)數(shù)組A,B的賦值語(yǔ)句也可以寫成A,B=1.251.258.750.750.54.755.75536.57.257.75;目前四十二頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)輸入程序

定義目標(biāo)和約束,與前例的方法是類似(這里包含了派生集合),請(qǐng)?zhí)貏e注意進(jìn)一步體會(huì)集合函數(shù)@SUM和@FOR的用法。由于新建料場(chǎng)的位置理論上講可以是任意的,所以在約束的最后(模型的“END”語(yǔ)句上面的一行)用@free函數(shù)取消了變量X、Y的非負(fù)限制在程序開(kāi)頭用TITLE語(yǔ)句對(duì)這個(gè)模型取了一個(gè)標(biāo)題“LOCATIONPROBLEM;并且對(duì)目標(biāo)行([OBJ])和兩類約束(DEMAND_CON、SUPPLY_CON)分別進(jìn)行了命名(請(qǐng)?zhí)貏e注意這里約束命名的特點(diǎn))。目前四十三頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)解答:運(yùn)行菜單命令“LINGO|Solve”局部最優(yōu)解X(1)=7.249997,X(2)=5.695940,Y(1)=7.749998,Y(2)=4.928524,C(略),最小運(yùn)量=89.8835(噸公里)。問(wèn)題:最小運(yùn)量89.8835是不是全局最優(yōu)是用“LINGO|Options”菜單命令打開(kāi)選項(xiàng)對(duì)話框,在“GlobalSolver”選項(xiàng)卡上選擇“UseGlobalSolver”,激活全局最優(yōu)求解程序。目前四十四頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)問(wèn)題:最小運(yùn)量89.8835是不是全局最優(yōu)為減少計(jì)算工作量,對(duì)X,Y的取值再做一些限制。雖然理論上新建料場(chǎng)的位置可以是任意的,但顯然最佳的料場(chǎng)位置不應(yīng)該離工地太遠(yuǎn),至少不應(yīng)該超出現(xiàn)在6個(gè)工地所決定的坐標(biāo)的最大、最小值決定的矩形之外,即:0.5<=x<=8.75,0.75<=y<=7.75.可以用@bnd函數(shù)加上這個(gè)條件取代模型END上面的行,運(yùn)行NLP模型,全局最優(yōu)求解程序花費(fèi)的時(shí)間仍然很長(zhǎng),運(yùn)行27分35秒時(shí)人為終止求解(按下“InterruptSolver”按鈕)得到左邊模型窗口和全局求解器的狀態(tài)窗口此時(shí)目標(biāo)函數(shù)值的下界(ObjBound=85.2638)與目前得到的最好的可行解的目標(biāo)函數(shù)值(BestObj=85.2661)相差已經(jīng)非常小,可以認(rèn)為已經(jīng)得到了全局最優(yōu)解。目前四十五頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)計(jì)算結(jié)果

工地與料場(chǎng)示意圖:“*”表示料場(chǎng),“+”表示工地

可以認(rèn)為是模型的最后結(jié)果附注:如果要把料廠P(5,1),Q(2,7)的位置看成是已知并且固定的,這時(shí)是LP模型。只需要把初始段的“XY=5,1,2,7;”語(yǔ)句移到數(shù)據(jù)段就可以了。此時(shí),運(yùn)行結(jié)果告訴我們得到全局最優(yōu)解(變量C的取值這里略去),最小運(yùn)量136.2275(噸公里)。目前四十六頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)稠密集合與稀疏集合包含了兩個(gè)基本集合構(gòu)成的所有二元有序?qū)Φ呐缮戏Q為稠密集合(簡(jiǎn)稱稠集)。有時(shí)候,在實(shí)際問(wèn)題中,一些屬性(數(shù)組)只在笛卡兒積的一個(gè)真子集合上定義,這種派生集合稱為稀疏集合(簡(jiǎn)稱疏集)。例(最短路問(wèn)題)在縱橫交錯(cuò)的公路網(wǎng)中,貨車司機(jī)希望找到一條從一個(gè)城市到另一個(gè)城市的最短路.下圖表示的是公路網(wǎng),節(jié)點(diǎn)表示貨車可以??康某鞘?弧上的權(quán)表示兩個(gè)城市之間的距離(百公里).那么,貨車從城市S出發(fā)到達(dá)城市T,如何選擇行駛路線,使所經(jīng)過(guò)的路程最短?STA1

A2

A3

B1

B2

C1

C2

633665874678956目前四十七頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)STA1

A2

A3

B1

B2

C1

C2

633665874678956分析

假設(shè)從S到T的最優(yōu)行駛路線P經(jīng)過(guò)城市C1,則P中從S到C1的子路也一定是從S到C1的最優(yōu)行駛路線;

假設(shè)P經(jīng)過(guò)城市C2,則P中從S到C2的子路也一定是從S到C2的最優(yōu)行駛路線.因此,為得到從S到T的最優(yōu)行駛路線,只需要先求出從S到Ck(k=1,2)的最優(yōu)行駛路線,就可以方便地得到從S到T的最優(yōu)行駛路線.同樣,為了求出從S到Ck(k=1,2)的最優(yōu)行駛路線,只需要先求出從S到Bj(j=1,2)的最優(yōu)行駛路線;為了求出從S到Bj(j=1,2)的最優(yōu)行駛路線,只需要先求出從S到Ai(i=1,2,3)的最優(yōu)行駛路線.而S到Ai(i=1,2,3)的最優(yōu)行駛路線是很容易得到的(實(shí)際上,此例中S到Ai(i=1,2,3)只有唯一的道路)目前四十八頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)分析

STA1

A2

A3

B1

B2

C1

C2

633665874678956此例中可把從S到T的行駛過(guò)程分成4個(gè)階段,即S→Ai

(i=1,2或3),Ai

→Bj(j=1或2),Bj→Ck(k=1或2),Ck→T.記d(Y,X)為城市Y與城市X之間的直接距離(若這兩個(gè)城市之間沒(méi)有道路直接相連,則可以認(rèn)為直接距離為∞),用L(X)表示城市S到城市X的最優(yōu)行駛路線的路長(zhǎng):目前四十九頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)本例的計(jì)算STA1

A2

A3

B1

B2

C1

C2

633665874678956所以,從S到T的最優(yōu)行駛路線的路長(zhǎng)為20.進(jìn)一步分析以上求解過(guò)程,可以得到從S到T的最優(yōu)行駛路線為S→A3→B2→C1→T.這種計(jì)算方法在數(shù)學(xué)上稱為動(dòng)態(tài)規(guī)劃(DynamicProgramming)目前五十頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)本例的LINGO求解“CITIES”(城市):一個(gè)基本集合(元素通過(guò)枚舉給出)L:CITIES對(duì)應(yīng)的屬性變量(我們要求的最短路長(zhǎng))“ROADS”(道路):由CITIES導(dǎo)出的一個(gè)派生集合(請(qǐng)?zhí)貏e注意其用法),由于只有一部分城市之間有道路相連,所以不應(yīng)該把它定義成稠密集合,將其元素通過(guò)枚舉給出,這就是一個(gè)稀疏集合。D:稀疏集合ROADS對(duì)應(yīng)的屬性變量(給定的距離)目前五十一頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)本例的LINGO求解從模型中還可以看出:這個(gè)LINGO程序可以沒(méi)有目標(biāo)函數(shù),這在LINGO中,可以用來(lái)找可行解(解方程組和不等式組)。在數(shù)據(jù)段對(duì)L進(jìn)行賦值,只有L(S)=0已知,后面的值為空(但位置必須留出來(lái),即逗號(hào)“,”一個(gè)也不能少,否則會(huì)出錯(cuò))。如果這個(gè)語(yǔ)句直接寫成“L=0;”,語(yǔ)法上看也是對(duì)的,但其含義是L所有元素的取值全部為0,所以也會(huì)與題意不符。目前五十二頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)本例的LINGO求解雖然集合CITIES中的元素不是數(shù)字,但當(dāng)它以CITIES(I)的形式出現(xiàn)在循環(huán)中時(shí),引用下標(biāo)I卻實(shí)際上仍是正整數(shù),也就是說(shuō)I指的正是元素在集合中的位置(順序),一般稱為元素的索引(INDEX)。在@for循環(huán)中的過(guò)濾條件里用了一個(gè)函數(shù)“@index”,其作用是返回一個(gè)元素在集合中的索引值,這里@index(S)=1(即元素S在集合中的索引值為1),所以邏輯關(guān)系式“I#GT#@index(S)”可以可以直接等價(jià)地寫成“I#GT#1”。這里@index(S)實(shí)際上還是@index(CITIES,S)的簡(jiǎn)寫,即返回S在集合CITIES中的索引值。目前五十三頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)本例的LINGO求解結(jié)果從S到T的最優(yōu)行駛路線的路長(zhǎng)為20(進(jìn)一步分析,可以得到最優(yōu)行駛路線為S→A3→B2→C1→T)。本例中定義稀疏集合ROADS的方法是將其元素通過(guò)枚舉給出,有時(shí)如果元素比較多,用起來(lái)不方便。另一種定義稀疏集合的方法是“元素過(guò)濾”法,能夠從笛卡兒積中系統(tǒng)地過(guò)濾下來(lái)一些真正的元素。目前五十四頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)例某班8名同學(xué)準(zhǔn)備分成4個(gè)調(diào)查隊(duì)(每隊(duì)兩人)前往4個(gè)地區(qū)進(jìn)行社會(huì)調(diào)查。這8名同學(xué)兩兩之間組隊(duì)的效率如下表所示(由于對(duì)稱性,只列出了嚴(yán)格上三角部分),問(wèn)如何組隊(duì)可以使總效率最高?學(xué)生S1S2S3S4S5S6S7S8S1-9342156S2--173521S3---44292S4----1552S5-----876S6------23S7-------4目前五十五頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)分析

這是一個(gè)匹配(MATCHING)問(wèn)題。把上表的效率矩陣記為BENEFIT(由于對(duì)稱性,這個(gè)矩陣只有嚴(yán)格上三角部分共28個(gè)數(shù)取非零值)。用MATCH(Si,Sj)=1表示同學(xué)Si,Sj組成一隊(duì),而MATCH(Si,Sj)=0表示Si,Sj不組隊(duì)。由于對(duì)稱性,只需考慮i<j共28個(gè)0-1變量(而不是全部32個(gè)變量)。顯然,目標(biāo)函數(shù)正好是BENEFIT(Si,Sj)*MATCH(Si,Sj)對(duì)I,j之和。約束條件是每個(gè)同學(xué)只能(而且必須在)某一組,即對(duì)于任意i有:只要屬性MATCH的某個(gè)下標(biāo)為i就加起來(lái),此和應(yīng)該等于1。

由上面的分析,因此,完整的數(shù)學(xué)模型如下(顯然,這是一個(gè)0-1線性規(guī)劃):目前五十六頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)問(wèn)題的LINGO求解“S1..S8”等價(jià)于寫成“S1S2S3S4S5S6S7S8”,它沒(méi)有相關(guān)的屬性列表,只用于表示是一個(gè)下標(biāo)集合在派生集合PAIRS定義中增加了過(guò)濾條件“&2#GT#&1”,意思是第2個(gè)父集合的元素的索引值(用“&2”表示)大于第1個(gè)父集合的元素的索引值(用“&1”表示)。PAIRS中的元素對(duì)應(yīng)于上表中的嚴(yán)格上三角部分的二維下標(biāo)(共28個(gè)元素)。BENEFIT和MATCH是PAIRS的屬性。注意數(shù)據(jù)段對(duì)BENEFIT的賦值方式,“LINGO按照列的順序?qū)傩宰兞康脑剡M(jìn)行賦值。在約束部分,過(guò)濾條件“J#EQ#I#OR#K#EQ#I”是由邏輯運(yùn)算符“#OR#(或者)”連接的一個(gè)復(fù)合的邏輯關(guān)系式,連接由“#EQ#(等于)”表示的兩個(gè)邏輯關(guān)系。由于“#OR#”的運(yùn)算級(jí)別低于“#EQ#”,所以這個(gè)邏輯式中沒(méi)有必要使用括號(hào)指定運(yùn)算次序。目前五十七頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)LINGO求解結(jié)果“LINGO|SOLVE”運(yùn)行這個(gè)程序,可以得到全局最優(yōu)值為30MATCH變量中多數(shù)為0,可以更清晰地瀏覽最優(yōu)解解。選擇菜單命令“LINGO|SOLUTION”,可以看到圖示對(duì)話框。選擇屬性MATCH(變量)選擇Text(文本格式)選擇NonzerosOnly(只顯示非零值)點(diǎn)擊“OK”按鈕,得到關(guān)于最優(yōu)解的非零分量的報(bào)告學(xué)生最佳的組隊(duì)方式是(1,8),(2,4),(3,7),(5,6).目前五十八頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)集合的使用小結(jié)集合的不同類型及其關(guān)系集合派生集合稀疏集合稠密集合基本集合元素列表法元素過(guò)濾法

直接列舉法

隱式列舉法

目前五十九頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)基本集合的定義語(yǔ)法基本集合的定義格式為(方括號(hào)“[]”中的內(nèi)容是可選項(xiàng),可以沒(méi)有):setname[/member_list/][:attribute_list];其中setname為定義的集合名,member_list為元素列表,attribute_list為屬性列表。元素列表可以采用顯式列舉法(即直接將所有元素全部列出,元素之間用逗號(hào)或空格分開(kāi)),也可以采用隱式列舉法。隱式列舉法可以有幾種不同格式,類型隱式列舉格式示例示例集合表示的元素?cái)?shù)字型1..n1..51,2,3,4,5字符-數(shù)字型stringM..stringNCar101..car208Car101,car102,…,car208日期(星期)型dayM..dayNMON..FRIMON,TUE,WED,THU,FRI月份型monthM..monthNOCT..JANOCT,NOV,DEC,JAN年份-月份型monthYearM..monthYearNOCT2001..JAN2002OCT2001,NOV2001,DEC2001,JAN2002目前六十頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)

元素列表和屬性列表都是可選的。當(dāng)屬性列表不在集合定義中出現(xiàn)時(shí),這樣的集合往往只是為了將來(lái)在程序中作為一個(gè)循環(huán)變量來(lái)使用,或者作為構(gòu)造更復(fù)雜的派生集合的父集合使用(匹配問(wèn)題中的集合STUDENTS沒(méi)有屬性列表)。而當(dāng)元素列表不在基本集合的定義中出現(xiàn)時(shí),則必須在程序的數(shù)據(jù)段以賦值語(yǔ)句的方式直接給出元素列表。例如,前例中SAILCO公司決定四個(gè)季度的帆船生產(chǎn)量模型的集合段和數(shù)據(jù)段可以分別改為:SETS:QUARTERS:DEM,RP,OP,INV;!注意沒(méi)有給出集合的元素列表;ENDSETSDATA:QUARTERSDEM=140260375425;!注意LINGO按列賦值的特點(diǎn);ENDDATA基本集合的定義語(yǔ)法帆船生產(chǎn)量模型的源程序匹配問(wèn)題的源程序目前六十一頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)派生集合的定義語(yǔ)法派生集合的定義格式為(方括號(hào)“[]”中的內(nèi)容是可選項(xiàng),可以沒(méi)有):setname(parent_set_list)[/member_list/][:attribute_list];與基本集合的定義相比較多了一個(gè)parent_set_list(父集合列表)。父集合列表中的集合(如set1,set2,…,等)稱為派生集合setname的父集合,它們本身也可以是派生集合。當(dāng)元素列表(member_list)不在集合定義中出現(xiàn)時(shí),還可以在程序的數(shù)據(jù)段以賦值語(yǔ)句的方式給出元素列表;若在程序的數(shù)據(jù)段也不以賦值語(yǔ)句的方式給出元素列表,則認(rèn)為定義的是稠密集合,即父集合中所有元素的有序組合(笛卡兒積)都是setname的元素。當(dāng)元素列表在集合定義中出現(xiàn)時(shí),又有“元素列表法”(直接列出元素)和“元素過(guò)濾法”(利用過(guò)濾條件)兩種不同方式。目前六十二頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)3.運(yùn)算符和函數(shù)

LINGO入門2.在LINGO中使用集合3.運(yùn)算符和函數(shù)4.LINGO的主要菜單命令5.LINGO命令窗口

6.習(xí)題目前六十三頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)運(yùn)算符及其優(yōu)先級(jí)算術(shù)運(yùn)算符加、減、乘、除、乘方等數(shù)學(xué)運(yùn)算(即數(shù)與數(shù)之間的運(yùn)算,運(yùn)算結(jié)果也是數(shù))。LINGO中的算術(shù)運(yùn)算符有以下5種:+(加法),—(減法或負(fù)號(hào)),*(乘法),/(除法),^(求冪)。目前六十四頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)邏輯運(yùn)算符運(yùn)算結(jié)果只有“真”(TRUE)和“假”(FALSE)兩個(gè)值(稱為“邏輯值”),LINGO中用數(shù)字1代表TRUE,其他值(典型的值是0)都是FALSE。在LINGO中,邏輯運(yùn)算(表達(dá)式)通常作為過(guò)濾條件使用,邏輯運(yùn)算符有9種,可以分成兩類:#AND#(與),#OR#(或),#NOT#(非):邏輯值之間的運(yùn)算,它們操作的對(duì)象本身已經(jīng)是邏輯值或邏輯表達(dá)式,計(jì)算結(jié)果也是邏輯值。#EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于):是“數(shù)與數(shù)之間”的比較,也就是它們操作的對(duì)象本身必須是兩個(gè)數(shù),計(jì)算得到的結(jié)果是邏輯值。目前六十五頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)關(guān)系運(yùn)算符表示是“數(shù)與數(shù)之間”的大小關(guān)系,在LINGO中用來(lái)表示優(yōu)化模型的約束條件。LINGO中關(guān)系運(yùn)算符有3種:<(即<=,小于等于),=(等于),>(即>=,大于等于)(在優(yōu)化模型中約束一般沒(méi)有嚴(yán)格小于、嚴(yán)格大于關(guān)系)運(yùn)算符的優(yōu)先級(jí)優(yōu)先級(jí)最高

最低運(yùn)算符#NOT#—(負(fù)號(hào))^*/+—(減法)#EQ##NE##GT##GE##LT##LE##AND##OR#<=>目前六十六頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)基本的數(shù)學(xué)函數(shù)在LINGO中建立優(yōu)化模型時(shí)可以引用大量的內(nèi)部函數(shù),這些函數(shù)以”@”打頭。LINGO中包括相當(dāng)豐富的數(shù)學(xué)函數(shù),這些函數(shù)的用法非常簡(jiǎn)單,下面一一列出。@ABS(X):絕對(duì)值函數(shù),返回X的絕對(duì)值。@COS(X):余弦函數(shù),返回X的余弦值(X的單位是弧度)。@EXP(X):指數(shù)函數(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ù)值。的值(其中e=2.718281...)。目前六十七頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)基本的數(shù)學(xué)函數(shù)@MOD(X,Y):模函數(shù),返回X對(duì)Y取模的結(jié)果,即X除以Y的余數(shù),這里X和Y應(yīng)該是整數(shù)。@POW(X,Y):指數(shù)函數(shù),返回X^Y的值。@SIGN(X):符號(hào)函數(shù),返回X的符號(hào)值(X<0時(shí)返回-1,X>=0時(shí)返回+1)。@SIN(X):正弦函數(shù),返回X的正弦值(X的單位是弧度)。@SMAX(list):最大值函數(shù),返回一列數(shù)(list)的最大值。@SMIN(list):最小值函數(shù),返回一列數(shù)(list)的最小值。@SQR(X):平方函數(shù),返回X的平方(即X*X)的值。@SQRT(X):開(kāi)平方函數(shù),返回X的正的平方根的值。@TAN(X):正切函數(shù),返回X的正切值(X的單位是弧度)。目前六十八頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)集合循環(huán)函數(shù)集合上的元素(下標(biāo))進(jìn)行循環(huán)操作的函數(shù),一般用法如下:@function(setname[(set_index_list)[|condition]]:expression_list);其中:function集合函數(shù)名,FOR、MAX、MIN、PROD、SUM之一;Setname集合名;set_index_list集合索引列表(不需使用索引時(shí)可以省略);Condition用邏輯表達(dá)式描述的過(guò)濾條件(通常含有索引,無(wú)條件時(shí)可以省略);expression_list一個(gè)表達(dá)式(對(duì)@FOR函數(shù),可以是一組表達(dá)式。目前六十九頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)集合循環(huán)函數(shù)五個(gè)集合函數(shù)名的含義:@FOR(集合元素的循環(huán)函數(shù)):對(duì)集合setname的每個(gè)元素獨(dú)立地生成表達(dá)式,表達(dá)式由expression_list描述(通常是優(yōu)化問(wèn)題的約束)。@MAX(集合屬性的最大值函數(shù)):返回集合setname上的表達(dá)式的最大值。@MIN(集合屬性的最小值函數(shù)):返回集合setname上的表達(dá)式的最小值。@PROD(集合屬性的乘積函數(shù)):返回集合setname上的表達(dá)式的積。@SUM(集合屬性的求和函數(shù)):返回集合setname上的表達(dá)式的和。目前七十頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)集合操作函數(shù)@INDEX([set_name,]primitive_set_element)給出元素primitive_set_element在集合set_name中的索引值(即按定義集合時(shí)元素出現(xiàn)順序的位置編號(hào))。省略set_name,LINGO按模型中定義的集合順序找到第一個(gè)含有該元素的集合,并返回索引值。如果沒(méi)有找到該元素,則出錯(cuò)。注:Set_name的索引值是正整數(shù)且只能位于1和元素個(gè)數(shù)之間。例:定義一個(gè)女孩姓名集合(GIRLS)和男孩姓名集合(BOYS):SETS:GIRLS/DEBBIE,SUE,ALICE/;BOYS/BOB,JOE,SUE,FRED/;ENDSETS都有SUE,GIRLS在BOYS前定義,調(diào)用@INDEX(SUE)將返2,相當(dāng)于@INDEX(GIRLS,SUE)。要找男孩中名為SUE的小孩的索引,應(yīng)該使用@INDEX(BOYS,SUE),返3。目前七十一頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)集合操作函數(shù)@IN(set_name,primitive_index_1[,primitive_index_2...])判斷一個(gè)集合中是否含有某個(gè)索引值。如果集合set_name中包含由索引primitive_index_1[,primitive_index_2...]所對(duì)應(yīng)元素,則返回1(邏輯值“真”),否則返回0(邏輯值“假”)。索引用“&1”、“&2”或@INDEX函數(shù)等形式給出,這里“&1”表示對(duì)應(yīng)于第1個(gè)父集合的元素的索引值,“&2”表示對(duì)應(yīng)于第2個(gè)父集合的元素的索引值。例:定義一個(gè)集合STUDENTS(基本集合),派生出集合PASSED和FAILED,定義:SETS:STUDENTS/ZHAO,QIAN,SUN,LI/:;PASSED(STUDENTS)/QIAN,SUN/:;FAILED(STUDENTS)|#NOT#@IN(PASSED,&1):;ENDSETS目前七十二頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)如果集合C是由集合A,B派生的,例如:SETS:A/1..3/:; B/XYZ/:; C(A,B)/1,X1,Z2,Y3,X/:;ENDSETS判斷C中是否包含元素(2,Y),則可以利用以下語(yǔ)句: X=@IN(C,@INDEX(A,2),@INDEX(B,Y));對(duì)本例,結(jié)果是X=1(真)。注:X既是集合B的元素,又對(duì)X賦值1,在LINGO中這種表達(dá)是允許的,因?yàn)榍罢呤羌系脑兀笳呤亲兞?,邏輯上沒(méi)有關(guān)系(除了同名外),所以不會(huì)出現(xiàn)混淆。集合操作函數(shù)@IN(set_name,primitive_index_1[,primitive_index_2...])目前七十三頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)@WRAP(I,N)

此函數(shù)對(duì)N<1無(wú)定義當(dāng)I位于區(qū)間[1,N]內(nèi)時(shí)直接返回I;一般地,返回J=I-K*N,其中J位于區(qū)間[1,N],K為整數(shù)。即@WRAP(I,N)=@MOD(I,N)。但當(dāng)@MOD(I,N)=0時(shí)@WRAP(I,N)=N.

此函數(shù)可以用來(lái)防止集合的索引值越界。用戶在編寫LINGO程序時(shí),應(yīng)注意避免LINGO模型求解時(shí)出現(xiàn)集合的索引值越界的錯(cuò)誤。集合操作函數(shù)@SIZE(set_name)

返回?cái)?shù)據(jù)集set_name中包含元素的個(gè)數(shù)。目前七十四頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)變量定界函數(shù)對(duì)變量的取值范圍附加限制,共有以下四種:@BND(L,X,U)

:限制L<=X<=U。注意LINGO中沒(méi)有與LINDO命令SLB、SUB類似的函數(shù)@SLB和@SUB@BIN(X)

:限制X為0或1。注意LINDO中的命令是INT,但LINGO中這個(gè)函數(shù)的名字卻不是@INT(X)@FREE(X):取消對(duì)X的符號(hào)限制(即可取負(fù)數(shù)、0或正數(shù))@GIN(X):限制X為整數(shù)目前七十五頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)財(cái)務(wù)會(huì)計(jì)函數(shù)

用于計(jì)算凈現(xiàn)值,包括以下兩個(gè)函數(shù):@FPA(I,N)

返回如下情形下總的凈現(xiàn)值:?jiǎn)挝粫r(shí)段利率為I,連續(xù)N個(gè)時(shí)段支付,每個(gè)時(shí)段支付單位費(fèi)用。根據(jù)復(fù)利的計(jì)算公式,很容易知道

@FPA(I,N)=。@FPL(I,N)

返回如下情形下總的凈現(xiàn)值:?jiǎn)挝粫r(shí)段利率為I,第N個(gè)時(shí)段支付單位費(fèi)用。根據(jù)復(fù)利的計(jì)算公式,很容易知道

@FPL(I,N)。目前七十六頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)概率相關(guān)函數(shù)@PSN(X):標(biāo)準(zhǔn)正態(tài)分布函數(shù),即返回標(biāo)準(zhǔn)正態(tài)分布的分布函數(shù)在X點(diǎn)的取值。@PSL(X):標(biāo)準(zhǔn)正態(tài)線性損失函數(shù),即返回MAX(0,Z-X)的期望值,其中Z為標(biāo)準(zhǔn)正態(tài)隨機(jī)變量。@PPS(A,X):Poisson分布函數(shù),即返回均值為A的Poisson分布的分布函數(shù)在X點(diǎn)的取值(當(dāng)X不是整數(shù)時(shí),采用線性插值進(jìn)行計(jì)算)。@PPL(A,X):Poisson分布的線性損失函數(shù),即返回MAX(0,Z-X)的期望值,其中Z為均值為A的Poisson隨機(jī)變量。@PBN(P,N,X):二項(xiàng)分布函數(shù),即返回參數(shù)為(N,P)的二項(xiàng)分布的分布函數(shù)在X點(diǎn)的取值(當(dāng)N和(或)X不是整數(shù)時(shí),采用線性插值進(jìn)行計(jì)算)。目前七十七頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)@PHG(POP,G,N,X):超幾何(Hypergeometric)分布的分布函數(shù)。也就是說(shuō),返回如下概率:當(dāng)總共有POP個(gè)球,其中G個(gè)是白球時(shí),那么隨機(jī)地從中取出N個(gè)球,白球不超過(guò)X個(gè)的概率。當(dāng)POP,G,N和(或)X不是整數(shù)時(shí),采用線性插值進(jìn)行計(jì)算。@PEL(A,X):當(dāng)?shù)竭_(dá)負(fù)荷(強(qiáng)度)為A,服務(wù)系統(tǒng)有X個(gè)服務(wù)器且不允許排隊(duì)時(shí)的Erlang損失概率。@PEB(A,X):當(dāng)?shù)竭_(dá)負(fù)荷(強(qiáng)度)為A,服務(wù)系統(tǒng)有X個(gè)服務(wù)器且允許無(wú)窮排隊(duì)時(shí)的Erlang繁忙概率。@PFS(A,X,C):當(dāng)負(fù)荷上限為A,顧客數(shù)為C,并行服務(wù)器數(shù)量為X時(shí),有限源的Poisson服務(wù)系統(tǒng)的等待或返修顧客數(shù)的期望值。(A是顧客數(shù)乘以平均服務(wù)時(shí)間,再除以平均返修時(shí)間。當(dāng)C和(或)X不是整數(shù)時(shí),采用線性插值進(jìn)行計(jì)算)。概率相關(guān)函數(shù)目前七十八頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)@PFD(N,D,X):自由度為N和D的F分布的分布函數(shù)在X點(diǎn)的取值。@PCX(N,X):自由度為N的分布的分布函數(shù)在X點(diǎn)的取值。@PTD(N,X):自由度為N的t分布的分布函數(shù)在X點(diǎn)的取值。@QRAND(SEED):返回0與1之間的多個(gè)擬均勻隨機(jī)數(shù)(SEED為種子,缺省時(shí)取當(dāng)前計(jì)算機(jī)時(shí)間為種子)。該函數(shù)只能用在數(shù)據(jù)段,擬均勻隨機(jī)數(shù)可以認(rèn)為是“超均勻”的隨機(jī)數(shù),需要詳細(xì)了解“擬均勻隨機(jī)數(shù)(quasi-randomuniformnumbers)”請(qǐng)進(jìn)一步參閱LINGO的使用手冊(cè)。@RAND(SEED):返回0與1之間的一個(gè)偽均勻隨機(jī)數(shù)(SEED為種子)。概率相關(guān)函數(shù)目前七十九頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)文件輸入輸出函數(shù)@FILE(filename)

當(dāng)前模型引用其他ASCII碼文件中的數(shù)據(jù)或文本時(shí)可以采用該語(yǔ)句(但不允許嵌套使用),其中filename為存放數(shù)據(jù)的文件名,該文件中記錄之間用“~”分開(kāi)。@ODBC

提供LINGO與ODBC(OpenDataBaseConnection,開(kāi)放式數(shù)據(jù)庫(kù)連接)的接口。@OLE

提供LINGO與OLE(ObjectLinkingandEmbeding)接口。@POINTER(N)

在Windows下使用LINGO的動(dòng)態(tài)連接庫(kù)DLL,直接從共享的內(nèi)存中傳送數(shù)據(jù)。@TEXT(['filename'])

用于數(shù)據(jù)段中將解答結(jié)果送到文本文件filename中,當(dāng)省略filename時(shí),結(jié)果送到標(biāo)準(zhǔn)的輸出設(shè)備(通常就是屏幕)。filename中可以帶有文件路徑,沒(méi)有指定路徑時(shí)表示在當(dāng)前目錄,如果這個(gè)文件已經(jīng)存在,將會(huì)被覆蓋。目前八十頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)結(jié)果報(bào)告函數(shù)@ITERS()

只能在程序的數(shù)據(jù)段使用,調(diào)用時(shí)不需要任何參數(shù),返回LINGO求解器計(jì)算所使用的總迭代次數(shù)。例如:

@TEXT()=@ITERS();

將迭代次數(shù)顯示在屏幕上。@NEWLINE(n)

在輸出設(shè)備上輸出n個(gè)新行。@STRLEN(string)

返回字串“string”的長(zhǎng)度,如@STRLEN(123)返回值為3。目前八十一頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)@NAME(var_or_row_refernce)

返回變量名或行名。例:

SETS:WH/WH1..WH3/;!WH表示倉(cāng)庫(kù)的集合;

C/C1..C4/;!C表示顧客的集合;

ROAD(WH,C):X;!ROAD表示倉(cāng)庫(kù)到顧客的道路集合;!X表示某個(gè)倉(cāng)庫(kù)對(duì)某個(gè)顧客供貨數(shù);

ENDSETSDATA:@TEXT()=@WRITEFOR(ROAD(I,J)|X(I,J)#GT#0:@NAME(X),'',X,@NEWLINE(1));ENDDATA結(jié)果報(bào)告函數(shù)目前八十二頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)@NAME(var_or_row_refernce)

返回變量名或行名。輸出結(jié)果示意如下(這里沒(méi)有詳細(xì)交待屬性X當(dāng)前的取值):X(WH1,C1)2X(WH1,C2)17X(WH1,C3)1X(WH2,C1)13X(WH2,C4)12X(WH3,C3)21注:“變量”是指“數(shù)組元素”X(WH1,C1)、X(WH2,C4)等,即屬性加上相應(yīng)的下標(biāo)(集合元素)。同理,約束名也是指模型展開(kāi)后的約束名(用LINGO|Generate命令可以看到約束展開(kāi)后的情況),即也應(yīng)該是帶有相應(yīng)的下標(biāo)(集合元素)的。結(jié)果報(bào)告函數(shù)目前八十三頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)結(jié)果報(bào)告函數(shù)@WRITE(obj1[,…,objn])

只能在數(shù)據(jù)段中使用,輸出一系列結(jié)果(obj1,…,objn),其中obj1,…,objn等可以是變量(但不能只是屬性),也可以是字符串(放在單引號(hào)中的為字符串)或換行(@NEWLINE)等。結(jié)果可以輸出到一個(gè)文件,或電子表格(如EXCEL),或數(shù)據(jù)庫(kù),這取決于@WRITE所在的輸出語(yǔ)句中左邊的定位函數(shù)。例如:

DATA:@TEXT()=@WRITE('Ais',A,',Bis',B,',A/Bis',A/B);ENDDATA

其中A,B是該模型中的變量,在屏幕上輸出A,B以及A/B的值(增加了一些字符串,使結(jié)果讀起來(lái)更方便)。假設(shè)計(jì)算結(jié)束時(shí)A=10,B=5,則輸出為:

Ais10,Bis5,A/Bis2目前八十四頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)結(jié)果報(bào)告函數(shù)@WRITEFOR(setname[(set_index_list)[|condition]]:obj1[,…,objn])

函數(shù)@WRITE在循環(huán)情況下的推廣,輸出集合上定義的屬性對(duì)應(yīng)的多個(gè)變量的取值。例:(這里WH,C,X含義同上):

DATA:@TEXT()=@WRITEFOR(ROAD(I,J)|X(I,J)#GT#0:‘從倉(cāng)庫(kù)',WH(I),'到顧客',C(J),'供貨',X(I,J),'件',@NEWLINE(1));ENDDATA對(duì)應(yīng)的輸出效果示意如下:從倉(cāng)庫(kù)WH1到顧客C1供貨2件…..從倉(cāng)庫(kù)WH3到顧客C3供貨21件注:這里省略了部分輸出結(jié)果目前八十五頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)結(jié)果報(bào)告函數(shù)*:

在@WRITE和@WRITEFFOR函數(shù)中,可以使用符號(hào)“*”表示將一個(gè)字符串重復(fù)多次,用法是將“*”放在一個(gè)正整數(shù)n和這個(gè)字符串之前,表示將這個(gè)字符串重復(fù)n次。

DATA:LEAD=3;@TEXT()='上班人數(shù)圖示';@TEXT()=@WRITEFOR(DAY(D):LEAD*'',DAY(D),'',ON_DUTY(D),'',ON_DUTY(D)*'+',@NEWLINE(1));ENDDATA

程序執(zhí)行的效果示意如下(DAY表示一周,ON_DUTY表示每天上班人數(shù)):

上班人數(shù)圖示

MON20++++++++++++++++++++…SUN13+++++++++++++注:這里省略了部分輸出結(jié)果目前八十六頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)結(jié)果報(bào)告函數(shù)@FORMAT(value,format_descriptor)

在@WRITE和@WRITEFFOR函數(shù)中,@FORMAT對(duì)數(shù)值設(shè)定輸出格式。value表示輸出的值,format_descriptor(格式描述符)表示輸出格式。格式描述符的含義與C語(yǔ)言中的格式描述類似,如“12.2f”表示十進(jìn)制數(shù),總共12位,其中有2位小數(shù)。 注:使用@FORMAT函數(shù)將把數(shù)值轉(zhuǎn)換成字符串,所以輸出的實(shí)際上是字符串,這對(duì)于向數(shù)據(jù)庫(kù),電子表中輸出不一定合適。@DUAL(variable_or_row_name)@DUAL(variable)返回解答中variable的判別數(shù)(reducedcost);@DUAL(row)將返回約束行row的對(duì)偶(影子)價(jià)格(dualprices)。例:DATA:@TEXT()=@WRITEFOR(SET1(I):X(I),@DUAL(X(I),@NEWLINE(1));ENDDATA目前八十七頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)結(jié)果報(bào)告函數(shù)@RANGED(variable_or_row_name)

為了保持最優(yōu)基不變,目標(biāo)函數(shù)中變量的系數(shù)或約束行的右端項(xiàng)允許減少的量(參見(jiàn)第2章2.2節(jié)敏感性分析中的allowabledecrease)。@RANGEU(variable_or_row_name)

為了保持最優(yōu)基不變,目標(biāo)函數(shù)中變量的系數(shù)或約束行的右端項(xiàng)允許增加的量(參見(jiàn)第2章2.2節(jié)敏感性分析中的allowableincrease)。目前八十八頁(yè)\總數(shù)一百五十頁(yè)\編于十四點(diǎn)結(jié)果報(bào)告函數(shù)@STATUS()

返回LINGO求解模型結(jié)束后的最后狀態(tài):0 GlobalOptimum(全局最優(yōu))1 Infeasible(不可行)2 Unbounded(無(wú)界)3 Undetermined(不確定)4 Interrupted(用戶人為

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論