




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、LINGO軟件的基本使用方法內(nèi)容提要LINGO入門2.在LINGO中使用集合3. 運(yùn)算符和函數(shù)4. LINGO的主要菜單命令5. LINGO命令窗口 6.習(xí)題1. LINGO入門LINGO入門2.在LINGO中使用集合3. 運(yùn)算符和函數(shù)4. LINGO的主要菜單命令5. LINGO命令窗口 LINGO軟件的主要特色兩種命令模式Windows模式: 通過(guò)下拉式菜單命令驅(qū)動(dòng)LINGO運(yùn)行(多數(shù)菜單命令有快捷鍵,常用的菜單命令有快捷按鈕),圖形界面,使用方便;命令行 模式:僅在命令窗口(Command Window)下操作,通過(guò)輸入行命令驅(qū)動(dòng)LINGO運(yùn)行 。(這里主要介紹這種模式)從LINDO 到
2、 LINGO如今 LINGO 功能增強(qiáng),性能穩(wěn)定,解答結(jié)果可靠。與LINDO相比,LINGO 軟件主要具有兩大優(yōu)點(diǎn):內(nèi)置建模語(yǔ)言,允許以簡(jiǎn)練、直觀的方式描述較大規(guī)模的優(yōu)化問(wèn)題,所需的數(shù)據(jù)可以以一定格式保存在獨(dú)立的文件中。除具有LINDO的全部功能外,還可用于求解非線性規(guī)劃問(wèn)題,包括非線性整數(shù)規(guī)劃問(wèn)題;LINGO的界面LINGO軟件的主窗口(用戶界面),所有其他窗口都在這個(gè)窗口之內(nèi)。 模型窗口(Model Window),用于輸入LINGO優(yōu)化模型(即LINGO程序)。 狀態(tài)行(最左邊顯示“Ready”,表示 “準(zhǔn)備就緒”)當(dāng)前時(shí)間 當(dāng)前光標(biāo)的位置 LINGO的文件類型.LG4:LINGO格式的
3、模型文件,保存了模型窗口中所能夠看到的所有文本和其他對(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ùn)行狀態(tài)窗口Variables(變量數(shù)量): 變量總數(shù)(Total)、 非線性變量數(shù)(Nonlinear)、 整數(shù)變量數(shù)(Integer)。Constraints(約束數(shù)量):
4、 約束總數(shù)(Total)、 非線性約束個(gè)數(shù)(Nonlinear)。Nonzeros(非零系數(shù)數(shù)量): 總數(shù)(Total)、 非線性項(xiàng)系數(shù)個(gè)數(shù)(Nonlinear)。Generator Memory Used (K) (內(nèi)存使用量)Elapsed Runtime (hh:mm:ss)(求解花費(fèi)的時(shí)間) 運(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) : Global Optimum, Local Optimum, Feasible, Infeasible
5、“(不可行), Unbounded“(無(wú)界), Interrupted“(中斷), Undetermined“(未確定) 解的目標(biāo)函數(shù)值 當(dāng)前約束不滿足的總量(不是不滿足的約束的個(gè)數(shù)):實(shí)數(shù)(即使該值=0,當(dāng)前解也可能不可行,因?yàn)檫@個(gè)量中沒(méi)有考慮用上下界命令形式給出的約束) 目前為止的迭代次數(shù) 運(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ì)G
6、lobal程序);初始點(diǎn)數(shù)(對(duì)Multistart程序)有效步數(shù) 注:凡是可以從一個(gè)約束直接解出變量取值時(shí),這個(gè)變量就不認(rèn)為是決策變量而是固定變量,不列入統(tǒng)計(jì)中;只含有固定變量的約束也不列入約束統(tǒng)計(jì)中。運(yùn)行狀態(tài)窗口一個(gè)簡(jiǎn)單的LINGO程序例 直接用LINGO來(lái)解如下二次規(guī)劃問(wè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中
7、函數(shù)一律需要以“”開(kāi)頭,其中整型變量函數(shù)(BIN、GIN)和上下界限定函數(shù)(FREE、BND(L,X,U))。而且0/1變量函數(shù)是BIN函數(shù)。輸出結(jié)果:運(yùn)行菜單命令“LINGO|Solve” 最優(yōu)整數(shù)解X=(35,65)最大利潤(rùn)=11077.5 輸出結(jié)果備注:通過(guò)菜單 “WINDOW| Status Window”看到狀態(tài)窗口,可看到最佳目標(biāo)值“Best Obj”與問(wèn)題的上界“Obj Bound”已經(jīng)是一樣的,當(dāng)前解的最大利潤(rùn)與這兩個(gè)值非常接近,是計(jì)算誤差引起的。如果采用全局最優(yōu)求解程序(后面介紹),可以驗(yàn)證它就是全局最優(yōu)解。LINGO是將它作為PINLP(純整數(shù)非線性規(guī)劃)來(lái)求解,因此找到的
8、是局部最優(yōu)解。一個(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或BND另行說(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)
9、始的是說(shuō)明語(yǔ)句(說(shuō)明語(yǔ)句也需要以分號(hào)結(jié)束))。2.在LINGO中使用集合 LINGO入門2.在LINGO中使用集合3. 運(yùn)算符和函數(shù)4. LINGO的主要菜單命令5. LINGO命令窗口 6.習(xí)題集合的基本用法和LINGO模型的基本要素 理解LINGO建模語(yǔ)言最重要的是理解集合(Set)及其屬性(Attribute)的概念。 例 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)用
10、為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ù)。 問(wèn)題的模型(可以看出是LP模型 )目標(biāo)函數(shù)是所有費(fèi)用的和 約束條件主要有兩個(gè):1)能力限制:2)產(chǎn)品數(shù)量的平衡方程:加上變量的非負(fù)約束注:LINDO中沒(méi)有數(shù)組,只能對(duì)每個(gè)季度分別定義變量,如正常產(chǎn)量就要有RP1,RP2,RP3,RP4 4個(gè)變量等。寫起來(lái)就比較麻煩,尤其是更多(如
11、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稱為該集合的屬性(即定義在該集合上的屬性)。QUARTERS集合的屬性DEM RPOP INVQUARTERS集合2341 集合及其屬性 集合元素及集合的屬性確定的所有變量集合QUARTERS的元素1234定義在集合QUARTERS上的
12、屬性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)LINGO中定義集合及其屬性 LP模型在LINGO中的一個(gè)典型輸入方式 以“MODEL:”開(kāi)始 以“END”結(jié)束集合定義部分從(“SETS:”到“ENDSETS” ):定義集合及其屬性集合定義部分從(“DATA:”到“ENDDATA” )給出優(yōu)化目標(biāo)和約束 目標(biāo)函數(shù)的定義方式SUM(集合(下標(biāo)):關(guān)于集合的屬性的表達(dá)式)對(duì)語(yǔ)句中冒號(hào)“:”后面的表達(dá)式,按照“:”前面的集合指定的下標(biāo)(元素)進(jìn)行求和
13、。 本例中目標(biāo)函數(shù)也可以等價(jià)地寫成SUM(QUARTERS(i): 400*RP(i) +450*OP(i) +20*INV(i) ),“SUM”相當(dāng)于求和符號(hào)“”,由于本例中目標(biāo)函數(shù)對(duì)集合QUARTERS的所有元素(下標(biāo)) 都要求和,所以可以將下標(biāo)i省去。 約束的定義方式循環(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)函
14、數(shù)時(shí)一樣,將下標(biāo)i省去,這個(gè)語(yǔ)句可以簡(jiǎn)化成“FOR(QUARTERS:RP1;“#GT#”是邏輯運(yùn)算符號(hào),意思是“大于(Greater Than的字首字母縮寫)” 。約束的定義方式問(wèn)題的求解:運(yùn)行菜單命令“LINGO|Solve” 全局最優(yōu)解RP=(40,40,40,25),OP=(0,10,35,0) 最小成本=78450 注:由于輸入中沒(méi)有給出行名,所以行名是系統(tǒng)自動(dòng)按照行號(hào)1-9生成的。 選擇菜單命令“LINGO|Generate|Disply model(Ctrl+G)”,可以得到展開(kāi)形式的模型(如圖),可以看到完整的模型,也能確定行號(hào)(行號(hào)放在方括號(hào)“ ”中,且數(shù)字前面帶有下劃線“_
15、”)。 最好在輸入模型時(shí)用戶主動(dòng)設(shè)定約束的行名(即約束名),使程序清晰些。單一約束的行名設(shè)置方法就是將行名放在方括號(hào)“ ”中,置于約束之前。 后面將結(jié)合具體例子介紹在使用集合的情況下如何設(shè)置行名。 小結(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é)
16、指標(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
17、,INV;” ,“1.1000”的意思就是從1到1000的所有整數(shù)。(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)系。約束的表示也類似。(3)數(shù)據(jù)段(DATA):以 “DATA:” 開(kāi)始, “ENDDATA”結(jié)束,對(duì)集合的屬性(數(shù)組)輸入必要的常數(shù)數(shù)據(jù)。格式為:“attribute(屬性) = value_list(常數(shù)列表);”常數(shù)列表(val
18、ue_list)中數(shù)據(jù)之間可以用逗號(hào)“,”分開(kāi),也可以用空格分開(kāi)(回車等價(jià)于一個(gè)空格),如上面對(duì)DEM的賦值也可以寫成“DEM=40 60 75 25;”。在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)-
19、DEM(1);這樣,模型就可以計(jì)算任意初始庫(kù)存量(而不僅僅只能計(jì)算初始庫(kù)存量為10)的情況了。(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ō)明?;炯吓c派生集合 例3.4 建筑工地的位置(用平面坐標(biāo)a, b表示,距
20、離單位:公里)及水泥日用量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ù)有多大?a1.258.750.55.7537.25b1.250.754.7556.57.75d3547611建立模型記工地的位置為 ,水泥日用量為 ;料場(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模型,
21、而把現(xiàn)有臨時(shí)料場(chǎng)的位置作為初始解告訴LINGO。 本例中集合的概念利用集合的概念,可以定義需求點(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è)新集合的屬性。輸入程序 定義了三個(gè)集合,其中LINK在前兩個(gè)集合DEMAND 和SUPPLY的基礎(chǔ)上定義表示集合LINK中的元素就是集合DEMAND 和SUPPLY
22、的元素組合成的有序二元組,從數(shù)學(xué)上看LINK是DEMAND 和SUPPLY的笛卡兒積,也就是說(shuō)LINK=(S,T)|SDEMAND,TSUPPLY因此,其屬性C也就是一個(gè)6*2的矩陣(或者說(shuō)是含有12個(gè)元素的二維數(shù)組)。LINGO建模語(yǔ)言也稱為矩陣生成器(MATRIX GENERATOR)。類似DEMAND 和SUPPLY直接把元素列舉出來(lái)的集合,稱為基本集合(primary set),而把LINK這種基于其它集合而派生出來(lái)的二維或多維集合稱為派生集合(derived set)。由于是DEMAND 和SUPPLY生成了派生集合LINK,所以DEMAND 和SUPPLY 稱為L(zhǎng)INK的父集合。輸
23、入程序 初始段 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.25 1.25 8.75 0.75 0.5 4.75 5.75 5 3 6.5 7.25 7.75;輸入程序 定義目標(biāo)和約束,與前例的方法是類似(這里包含了派生集合),請(qǐng)?zhí)貏e注意進(jìn)一步體會(huì)集合函數(shù)SUM和FOR的用法。由于新建料場(chǎng)的位置理論上講可以是任意的,所以在約束的最后(模型的“END”語(yǔ)句上面的一行)用free函數(shù)取消了變量X、Y的非負(fù)限制在程序開(kāi)
24、頭用TITLE語(yǔ)句對(duì)這個(gè)模型取了一個(gè)標(biāo)題“LOCATION PROBLEM;并且對(duì)目標(biāo)行(OBJ)和兩類約束(DEMAND_CON、SUPPLY_CON)分別進(jìn)行了命名(請(qǐng)?zhí)貏e注意這里約束命名的特點(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ì)話框,在“Global Solver”選項(xiàng)卡上選擇“Use Global Sol
25、ver”, 激活全局最優(yōu)求解程序。問(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í)人為終止求解(按下“Interrupt Solver”按鈕)得到左邊模型窗口和全局求解器的狀態(tài)窗口此時(shí)目標(biāo)函數(shù)值的下界(Obj Bound=85.2638
26、)與目前得到的最好的可行解的目標(biāo)函數(shù)值(Best Obj=85.2661)相差已經(jīng)非常小,可以認(rèn)為已經(jīng)得到了全局最優(yōu)解。 計(jì)算結(jié)果 工地與料場(chǎng)示意圖 : “*”表示料場(chǎng),“+”表示工地 可以認(rèn)為是模型的最后結(jié)果 附注:如果要把料廠P(5, 1), Q (2, 7)的位置看成是已知并且固定的,這時(shí)是LP模型。只需要把初始段的“X Y =5,1,2,7;”語(yǔ)句移到數(shù)據(jù)段就可以了。此時(shí),運(yùn)行結(jié)果告訴我們得到全局最優(yōu)解(變量C的取值這里略去),最小運(yùn)量136.2275(噸公里)。稠密集合與稀疏集合 包含了兩個(gè)基本集合構(gòu)成的所有二元有序?qū)Φ呐缮戏Q為稠密集合(簡(jiǎn)稱稠集)。有時(shí)候,在實(shí)際問(wèn)題中,一些屬性
27、(數(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 633665874678956STA1 A2 A3 B1 B2 C1 C2 633665874678956分析 假設(shè)從S到T的最優(yōu)行駛路線 P 經(jīng)過(guò)城市C1, 則P中從S到C1的子路也一定是從S到C1的最優(yōu)行駛
28、路線; 假設(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)只有唯一的道路) 分析 STA1 A2 A3 B1
29、B2 C1 C2 633665874678956此例中可把從S到T的行駛過(guò)程分成4個(gè)階段,即 SAi (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): 本例的計(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ī)劃(D
30、ynamic Programming) 本例的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)的屬性變量(給定的距離)本例的LINGO求解從模型中還可以看出:這個(gè)LINGO程序可以沒(méi)有目標(biāo)函數(shù),這在LINGO中,可以用來(lái)找可行解(解方程組和不等式組)。在數(shù)據(jù)段對(duì)L進(jìn)行賦值,只有L(S)=0已知,后面的值為空(
31、但位置必須留出來(lái),即逗號(hào)“,”一個(gè)也不能少,否則會(huì)出錯(cuò))。如果這個(gè)語(yǔ)句直接寫成“L=0;”,語(yǔ)法上看也是對(duì)的,但其含義是L所有元素的取值全部為0,所以也會(huì)與題意不符。本例的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à)地寫成
32、“I#GT#1” 。這里index(S)實(shí)際上還是index(CITIES,S)的簡(jiǎn)寫,即返回S在集合CITIES中的索引值。本例的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)一些真正的元素。例 某班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ì)可以使總效
33、率最高?學(xué)生S1S2S3S4S5S6S7S8S1-9342156S2-173521S3-44292S4-1552S5-876S6-23S7-4分析 這是一個(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ì)稱性,只需考慮ij共28個(gè)0-1變量(而不是全部32個(gè)變量)。 顯然,目標(biāo)函數(shù)正好是BENEFIT(Si,Sj)*MATCH(Si,Sj)對(duì)I,j之和。 約束條件是每個(gè)同學(xué)只能(而且必須在)某一組,
34、即對(duì)于任意i有:只要屬性MATCH的某個(gè)下標(biāo)為i就加起來(lái),此和應(yīng)該等于1。 由上面的分析,因此,完整的數(shù)學(xué)模型如下(顯然,這是一個(gè)0-1線性規(guī)劃):?jiǎn)栴}的LINGO求解“S1.S8”等價(jià)于寫成“S1 S2 S3 S4 S5 S6 S7 S8”, 它沒(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ì)BENE
35、FIT的賦值方式,“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)算次序。 LINGO求解結(jié)果“LINGO|SOLVE”運(yùn)行這個(gè)程序,可以得到全局最優(yōu)值為30 MATCH變量中多數(shù)為0,可以更清晰地瀏覽最優(yōu)解解。選擇菜單命令“LINGO|SOLUTION”,可以看到圖示對(duì)話框。選擇屬性MATCH(變量)選擇Text(文本格式)選擇Nonz
36、eros Only(只顯示非零值)點(diǎn)擊“OK”按鈕,得到關(guān)于最優(yōu)解的非零分量的報(bào)告學(xué)生最佳的組隊(duì)方式是(1,8),(2,4),(3,7),(5,6).集合的使用小結(jié) 集合的不同類型及其關(guān)系 集合派生集合稀疏集合稠密集合基本集合元素列表法 元素過(guò)濾法 直接列舉法 隱式列舉法 基本集合的定義語(yǔ)法 基本集合的定義格式為(方括號(hào)“ ”中的內(nèi)容是可選項(xiàng), 可以沒(méi)有):setname /member_list/ : attribute_list;其中setname為定義的集合名,member_list為元素列表,attribute_list為屬性列表。元素列表可以采用顯式列舉法(即直接將所有元素全部列出,
37、元素之間用逗號(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, JAN20
38、02 元素列表和屬性列表都是可選的。 當(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: QUARTERS DEM=1 40 2 60 3 75 4 25; !注意LING
39、O按列賦值的特點(diǎn);ENDDATA基本集合的定義語(yǔ)法 帆船生產(chǎn)量模型的源程序匹配問(wè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ù)段
40、也不以賦值語(yǔ)句的方式給出元素列表,則認(rèn)為定義的是稠密集合,即父集合中所有元素的有序組合(笛卡兒積)都是setname的元素。當(dāng)元素列表在集合定義中出現(xiàn)時(shí),又有“元素列表法”(直接列出元素)和“元素過(guò)濾法”(利用過(guò)濾條件)兩種不同方式。3.運(yùn)算符和函數(shù) LINGO入門2.在LINGO中使用集合3. 運(yùn)算符和函數(shù)4. LINGO的主要菜單命令5. LINGO命令窗口 6.習(xí)題運(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ùn)算符運(yùn)算結(jié)果只有“真”
41、(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é)果是邏輯值。關(guān)系運(yùn)算符表示是“數(shù)與數(shù)之間”的大小關(guān)系
42、,在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#基本的數(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)
43、:取整函數(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.)?;镜臄?shù)學(xué)函數(shù) SIGN(X):符號(hào)函數(shù),返回X的符號(hào)值(X = 0時(shí)返回+1)。SIN(X):正弦函數(shù),返回X的正弦值(X的單位是弧度)。SMAX(list):最大值函數(shù),返回一列數(shù)(list)的最大值。SMIN(list):最小值函數(shù),返回一列數(shù)(list)的最小值。TAN(X):正切函數(shù),返回X的正切值(
44、X的單位是弧度)。集合循環(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á)式。集合循環(huán)函數(shù) 五個(gè)集合函數(shù)名的含義:FOR(
45、集合元素的循環(huán)函數(shù)): 對(duì)集合setname的每個(gè)元素獨(dú)立地生成表達(dá)式,表達(dá)式由expression_list描述(通常是優(yōu)化問(wèn)題的約束)。MAX(集合屬性的最大值函數(shù)):返回集合setname上的表達(dá)式的最大值。MIN(集合屬性的最小值函數(shù)):返回集合setname上的表達(dá)式的最小值。SUM(集合屬性的求和函數(shù)):返回集合setname上的表達(dá)式的和。集合操作函數(shù) INDEX( set_name, primitive_set_element) 給出元素primitive_set_element在集合set_name中的索引值(即按定義集合時(shí)元素出現(xiàn)順序的位置編號(hào))。省略set_name,LI
46、NGO按模型中定義的集合順序找到第一個(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。集合操作函數(shù) IN( set_
47、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, QI
48、AN, SUN, LI/:; PASSED( STUDENTS) /QIAN,SUN/:; FAILED( STUDENTS) | #NOT# IN( PASSED, &1):; ENDSETS 如果集合C是由集合A,B派生的,例如: SETS: A / 1.3/:; B / X Y Z/:; C( A, B) / 1,X 1,Z 2,Y 3,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á)是允許的
49、,因?yàn)榍罢呤羌系脑兀笳呤亲兞?,邏輯上沒(méi)有關(guān)系(除了同名外),所以不會(huì)出現(xiàn)混淆。集合操作函數(shù) IN( set_name, primitive_index_1 , primitive_index_2 .)WRAP(I,N) 此函數(shù)對(duì)N1無(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ù) S
50、IZE (set_name) 返回?cái)?shù)據(jù)集set_name中包含元素的個(gè)數(shù)。變量定界函數(shù)對(duì)變量的取值范圍附加限制,共有以下四種:BND(L, X, U) :限制L = X 1的正整數(shù)):N點(diǎn)求解 生產(chǎn)與銷售計(jì)劃問(wèn)題問(wèn)題實(shí)例例某公司用兩種原油(A和B)混合加工成兩種汽油(甲和乙)。甲、乙兩種汽油含原油A的最低比例分別為50%和60%,每噸售價(jià)分別為4800元和5600元。該公司現(xiàn)有原油A和B的庫(kù)存量分別為500噸和1000噸,還可以從市場(chǎng)上買到不超過(guò)1500噸的原油A。原油A的市場(chǎng)價(jià)為:購(gòu)買量不超過(guò)500噸時(shí)的單價(jià)為10000元/噸;購(gòu)買量超過(guò)500噸但不超過(guò)1000噸時(shí),超過(guò)500噸的部分800
51、0元/噸;購(gòu)買量超過(guò)1000噸時(shí),超過(guò)1000噸的部分6000元/噸。該公司應(yīng)如何安排原油的采購(gòu)和加工。建立模型問(wèn)題分析 安排原油采購(gòu)、加工的目標(biāo)是利潤(rùn)最大,題目中給出的是兩種汽油的售價(jià)和原油A的采購(gòu)價(jià),利潤(rùn)為銷售汽油的收入與購(gòu)買原油A的支出之差。這里的難點(diǎn)在于原油A的采購(gòu)價(jià)與購(gòu)買量的關(guān)系比較復(fù)雜,是分段函數(shù)關(guān)系,能否及如何用線性規(guī)劃、整數(shù)規(guī)劃模型加以處理是關(guān)鍵所在。模型建立設(shè)原油A的購(gòu)買量為x(噸),根據(jù)題目所給數(shù)據(jù),采購(gòu)的支出c(x)可表為如下的分段線性函數(shù)(以下價(jià)格以千元/噸為單位):(1)設(shè)原油A用于生產(chǎn)甲、乙兩種汽油的數(shù)量分別為x11和x12(噸),原油B用于生產(chǎn)甲、乙兩種汽油的數(shù)量
52、分別為x21和x22(噸),則總的收入為4.8(x11+x21)+5.6(x12+x22)(千元)。于是本例的目標(biāo)函數(shù)(利潤(rùn))為(2)約束條件包括加工兩種汽油用的原油A、原油B庫(kù)存量的限制,和原油A購(gòu)買量的限制,以及兩種汽油含原油A的比例限制,它們表示為(3)(4)(5)(6)(7)(8)由于(1)式中的c(x)不是線性函數(shù),(1)(8)給出的是一個(gè)非線性規(guī)劃。而且,對(duì)于這樣用分段函數(shù)定義的c(x),一般的非線性規(guī)劃軟件也難以輸入和求解。能不能想辦法將該模型化簡(jiǎn),從而用現(xiàn)成的軟件求解呢? 求解模型 3種解法第1種解法 將原油A的采購(gòu)量x分解為三個(gè)量,即用x1,x2,x3分別表示以價(jià)格10、8、
53、6千元/噸采購(gòu)的原油A的噸數(shù),總支出為c(x) = 10 x1+8x2+6x3,且(9)這時(shí)目標(biāo)函數(shù)(2)變?yōu)榫€性函數(shù):(10)應(yīng)該注意到,只有當(dāng)以10千元/噸的價(jià)格購(gòu)買x1=500(噸)時(shí),才能以8千元/噸的價(jià)格購(gòu)買x2(0),這個(gè)條件可以表示為(11)同理,只有當(dāng)以8千元/噸的價(jià)格購(gòu)買x2=500(噸)時(shí),才能以6千元/噸的價(jià)格購(gòu)買x3(0),于是(12)此外,x1,x2,x3的取值范圍是(13)由于有非線性約束(11),(12),(3)(13)構(gòu)成非線性規(guī)劃模型。LINGO程序:Model:Max= 4.8*x11 + 4.8*x21 + 5.6*x12 + 5.6*x22 - 10*x
54、1 - 8*x2 - 6*x3;x11+x12 x + 500;x21+x22 0; 0.4*x12 - 0.6*x22 0;x=x1+x2+x3; (x1 - 500) * x2=0; (x2 - 500) * x3=0; bnd(0,x1, 500);bnd(0,x2, 500);bnd(0,x3,500);end 執(zhí)行菜單命令“LINGO|Solve”,運(yùn)行該程序得到: Local optimal solution found. Objective value: 4800.000 Total solver iterations: 26 Variable Value Reduced Cos
55、t X11 500.0000 0.000000 X21 500.0000 0.000000 X12 0.000000 0.000000 X22 0.000000 0.000000 X1 0.000000 0.000000 X2 0.000000 0.000000 X3 0.000000 0.000000 X 0.000000 0.000000最優(yōu)解: 用庫(kù)存的500噸原油A、500噸原油B生產(chǎn)1000噸汽油甲,不購(gòu)買新的原油A,利潤(rùn)為4800(千元) 但是此時(shí)LINGO得到的結(jié)果只是一個(gè)局部最優(yōu)解可以用菜單命令“LINGO|Options”在“Global Solver”選項(xiàng)卡上啟動(dòng)全局優(yōu)化(
56、Use Global Solver)選項(xiàng),然后重新執(zhí)行菜單命令“LINGO|Solve” , 得到: Global optimal solution found. Objective value: 5000.002 Extended solver steps: 3 Total solver iterations: 187Variable Value Reduced CostX11 0.000000 0.000000X21 0.000000 0.000000X12 1500.000 0.000000X22 1000.000 0.000000X1 500.0000 0.000000X2 499.9
57、990 0.000000X3 0.9536707E-03 0.000000X 1000.000 0.000000此時(shí)LINGO得到的結(jié)果是一個(gè)全局最優(yōu)解(Global optimal solution):購(gòu)買1000噸原油A,與庫(kù)存的500噸原油A和1000噸原油B一起,共生產(chǎn)2500噸汽油乙,利潤(rùn)為5000(千元),高于剛剛得到的局部最優(yōu)解對(duì)應(yīng)的利潤(rùn)4800(千元)。第2種解法: 引入0-1變量將(11)和(12)轉(zhuǎn)化為線性約束令y1=1,y2=1,y3=1分別表示以10千元/噸、8千元/噸、6千元/噸的價(jià)格采購(gòu)原油A,則約束(11)和(12)可以替換為(14)(15)(16) y1,y2,
58、y3 =0或1(17)(3)(10),(13)(17)構(gòu)成混合整數(shù)線性規(guī)劃模型,將它輸入LINDO軟件:Max 4.8x11+4.8x21+5.6x12+5.6x22-10 x1-8x2-6x3stx-x1-x2-x3=0 x11+x12-x500 x21+x220 0.4x12-0.6x220 x1-500y10 x2-500y20 x3-500y30 x2-500y30 endint y1int y2int y3運(yùn)行該程序得到:OBJECTIVE FUNCTION VALUE 1) 5000.000 VARIABLE VALUE REDUCED COST Y1 1.000000 0.000
59、000 Y2 1.000000 2200.000000 Y3 1.000000 1200.000000 X11 0.000000 0.800000 X21 0.000000 0.800000 X12 1500.000000 0.000000 X22 1000.000000 0.000000 X1 500.000000 0.000000 X2 500.000000 0.000000 X3 0.000000 0.400000 X 1000.000000 0.000000這個(gè)結(jié)果與前面非線性規(guī)劃模型用全局優(yōu)化得到的結(jié)果相同。第3種解法 直接處理分段線性函數(shù)c(x)。(1)式表示的函數(shù)c(x)如圖5-
60、1。c(x)x1200090005000050010001500圖5-1 分段線性函數(shù)c(x)圖形記x軸上的分點(diǎn)為b1=0, b2=500, b3=1000, b4=1500。當(dāng)x在第1個(gè)小區(qū)間 b1, b2時(shí),記x= z1b1+z2b2,z1+z2=1,z1, z20, 因?yàn)閏(x)在b1, b2是線性的,所以c(x)= z1c(b1)+z2c(b2)。同樣,當(dāng)x在第2個(gè)小區(qū)間 b2, b3時(shí),x= z2b2+z3b3,z2+z3=1,z2, z30, c(x)= z2c(b2)+z3c(b3)。當(dāng)x在第3個(gè)小區(qū)間 b3, b4時(shí),x= z3b3+z4b4,z3+z4=1,z3, z40,
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年上半年安徽安慶潛山市事業(yè)單位招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年安徽合肥廬江縣部分事業(yè)單位招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025北新集團(tuán)建材股份有限公司應(yīng)屆生招聘筆試參考題庫(kù)附帶答案詳解
- 2025中國(guó)儲(chǔ)備糧管理集團(tuán)有限公司福建分公司招聘26人筆試參考題庫(kù)附帶答案詳解
- 2024重慶渝北區(qū)保安服務(wù)有限責(zé)任公司招聘6人筆試參考題庫(kù)附帶答案詳解
- 2024重慶西永產(chǎn)業(yè)發(fā)展有限公司招聘7人筆試參考題庫(kù)附帶答案詳解
- 2025年心臟除顫監(jiān)護(hù)儀項(xiàng)目可行性研究報(bào)告
- 2025年射頻監(jiān)測(cè)系統(tǒng)項(xiàng)目可行性研究報(bào)告
- 2025年大型空氣源熱泵熱水器項(xiàng)目可行性研究報(bào)告
- 廣東省廉江市實(shí)驗(yàn)學(xué)校高中政治4.2我國(guó)的基本經(jīng)濟(jì)制度練習(xí)2必修1
- 海洋自主無(wú)人系統(tǒng)跨域協(xié)同任務(wù)規(guī)劃模型與技術(shù)發(fā)展研究
- 中國(guó)中材海外科技發(fā)展有限公司招聘筆試沖刺題2025
- 兩層鋼結(jié)構(gòu)廠房施工方案
- 班級(jí)凝聚力主題班會(huì)12
- 初中語(yǔ)文“經(jīng)典誦讀與海量閱讀”校本課程實(shí)施方案
- 2025 春夏·淘寶天貓運(yùn)動(dòng)戶外行業(yè)趨勢(shì)白皮書(shū)
- 西門子S7-1200 PLC應(yīng)用技術(shù)項(xiàng)目教程(第3版) 課件 1.認(rèn)識(shí)S7-1200PLC寬屏-(LAD+SCL)
- 《稅法》(第六版)全書(shū)教案電子講義
- 翻斗車司機(jī)安全培訓(xùn)
- 計(jì)算機(jī)軟件配置管理計(jì)劃規(guī)范
- 《勞動(dòng)保障監(jiān)察條例》課件
評(píng)論
0/150
提交評(píng)論