版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
HanguangXiaoChongqingUniversityofTechnology2023年1月10日主要內(nèi)容LINGO軟件LINGO中建模語(yǔ)言(集合、運(yùn)算符和函數(shù)等)LINGO編程實(shí)例露天礦生產(chǎn)的車(chē)輛安排LINGO軟件(1)美國(guó)芝加哥(Chicago)大學(xué)的LinusSchrage(萊納斯.施拉蓋)教授于1980年前后開(kāi)發(fā)。(2)LINGO:LinearInteractiveGeneralOptimizer(線性交互式通用優(yōu)化器)。(3)用來(lái)求解的優(yōu)化模型(連續(xù)優(yōu)化和整數(shù)規(guī)劃(IP))。類(lèi)型:線性規(guī)劃(LP)、二次規(guī)劃(QP)、非線性規(guī)劃(NLP)。LINDO/LINGO軟件能求解的模型優(yōu)化線性規(guī)劃非線性規(guī)劃二次規(guī)劃連續(xù)優(yōu)化整數(shù)規(guī)劃LINDOLINGO學(xué)習(xí)LINGO需掌握的方面LINGO:LinearInteractiveGeneralOptimizer(V12.0)求解數(shù)學(xué)規(guī)劃問(wèn)題MinZ=f(x)s.txD(Rn)需要掌握:軟件操作基本語(yǔ)法結(jié)構(gòu)掌握集合(SETS)的應(yīng)用正確閱讀求解報(bào)告正確理解求解狀態(tài)窗口學(xué)會(huì)設(shè)置基本的求解選項(xiàng)(OPTIONS)LINGO軟件的主窗口(用戶(hù)界面),所有其他窗口都在這個(gè)窗口之內(nèi)。模型窗口(ModelWindow),用于輸入LINGO優(yōu)化模型(即LINGO程序)。狀態(tài)行(最左邊顯示“Ready”,表示“準(zhǔn)備就緒”)當(dāng)前時(shí)間
當(dāng)前光標(biāo)的位置LINGO軟件界面LINGO軟件菜單——FILE1.新建(New)單擊“新建”按鈕或直接按F2鍵可以創(chuàng)建一個(gè)新的“Model”窗口。在這個(gè)新的“Model”窗口中能夠輸入所要求解的模型。2.
打開(kāi)(Open)單擊“打開(kāi)”按鈕或直接按F3鍵可以打開(kāi)一個(gè)已經(jīng)存在的文本文件。這個(gè)文件可能是一個(gè)Model文件。3.
保存(Save)單擊“保存”按鈕或直接按F4鍵用來(lái)保存當(dāng)前活動(dòng)窗口(最前臺(tái)的窗口)中的模型結(jié)果、命令序列等保存為文件。4.
另存為...(SaveAs...)“另存為...”命令或按F5鍵可以將當(dāng)前活動(dòng)窗口中的內(nèi)容保存為文本文件,其文件名為你在“另存為...”對(duì)話框中輸入的文件名。利用這種方法你可以將任何窗口的內(nèi)容如模型、求解結(jié)果或命令保存為文件。5.
關(guān)閉(Close)在文件菜單中選用“關(guān)閉”(Close)命令或按F6鍵將關(guān)閉當(dāng)前活動(dòng)窗口。如果這個(gè)窗口是新建窗口或已經(jīng)改變了當(dāng)前文件的內(nèi)容,LINGO系統(tǒng)將會(huì)提示是否想要保存改變后的內(nèi)容6.
打印(Print)“打印”
(Print)命令、單擊“打印”按鈕或直接按F7鍵可以將當(dāng)前活動(dòng)窗口中的內(nèi)容發(fā)送到打印機(jī)7.
打印設(shè)置(PrintSetup...)“打印設(shè)置...”命令或直接按F8鍵可以將文件輸出到指定的打印機(jī)。8.
打印預(yù)覽(PrintPreview)“打印預(yù)覽...”命令或直接按Shift+F8鍵可以進(jìn)行打印預(yù)覽。9.
輸出到日志文件(LogOutput...)
從文件菜單中選用“LogOutput...”命令或按F9鍵打開(kāi)一個(gè)對(duì)話框,用于生成一個(gè)日志文件,它存儲(chǔ)接下來(lái)在“命令窗口”中輸入的所有命令。10.提交LINGO命令腳本文件(TakeCommands...)“TakeCommands...”命令或直接按F11鍵就可以將LINGO命令腳本(commandscript)文件提交給系統(tǒng)進(jìn)程來(lái)運(yùn)行。11.引入LINGO文件(ImportLingoFile...)從文件菜單中選用“ImportLingoFile...”命令或直接按F12鍵可以打開(kāi)一個(gè)LINGO格式模型的文件,然后LINGO系統(tǒng)會(huì)盡可能把模型轉(zhuǎn)化為L(zhǎng)INGO語(yǔ)法允許的程序。12.退出(Exit)從文件菜單中選用“Exit”命令或直接按F10鍵可以退出LINGO系統(tǒng)。
LINGO軟件菜單——EIDT1.恢復(fù)(Undo)從編輯菜單中選用“恢復(fù)”(Undo)命令或按Ctrl+Z組合鍵,將撤銷(xiāo)上次操作、恢復(fù)至其前的狀態(tài)。2.剪切(Cut)從編輯菜單中選用“剪切”(Cut)命令或按Ctrl+X組合鍵可以將當(dāng)前選中的內(nèi)容剪切至剪貼板中。3.復(fù)制(Copy)從編輯菜單中選用“復(fù)制”(Copy)命令、單擊“復(fù)制”按鈕或按Ctrl+C組合鍵可以將當(dāng)前選中的內(nèi)容復(fù)制到剪貼板中。4.粘貼(Paste)從編輯菜單中選用“粘貼”(Paste)命令、單擊“粘貼”按鈕或按Ctrl+V組合鍵可以將粘貼板中的當(dāng)前內(nèi)容復(fù)制到當(dāng)前插入點(diǎn)的位置。5.粘貼特定..(PasteSpecial。。)與上面的命令不同,它可以用于剪貼板中的內(nèi)容不是文本的情形.6.全選(SelectAll)
從編輯菜單中選用“SelectAll”命令或按Ctrl+A組合鍵可選定當(dāng)前窗口中的所有內(nèi)容。7.匹配小括號(hào)(MatchParenthesis)
從編輯菜單中選用“MatchParenthesis”命令、單擊“MatchParenthesis”按鈕或按Ctrl+P組合鍵可以為當(dāng)前選中的開(kāi)括號(hào)查找匹配的閉括號(hào)。8.粘貼函數(shù)(PasteFunction)從編輯菜單中選用“PasteFunction”命令可以將LINGO的內(nèi)部函數(shù)粘貼到當(dāng)前插入點(diǎn)。LINGO軟件菜單——LINGO1.求解模型(Slove)
從LINGO菜單中選用“求解”命令、單擊“Slove”按鈕或按Ctrl+S組合鍵可以將當(dāng)前模型送入內(nèi)存求解。2.求解結(jié)果...(Solution...)
從LINGO菜單中選用“Solution...”命令、單擊“Solution...”按鈕或直接按Ctrl+O組合鍵可以打開(kāi)求解結(jié)果的對(duì)話框。這里可以指定查看當(dāng)前內(nèi)存中求解結(jié)果的那些內(nèi)容。3.靈敏性分析(Range,Ctrl+R)用該命令產(chǎn)生當(dāng)前模型的靈敏性分析報(bào)告:研究當(dāng)目標(biāo)函數(shù)的費(fèi)用系數(shù)和約束右端項(xiàng)在什么范圍(此時(shí)假定其它系數(shù)不變)時(shí),最優(yōu)基保持不變。靈敏性分析是在求解模型時(shí)作出的,因此在求解模型時(shí)靈敏性分析是激活狀態(tài),但是默認(rèn)是不激活的。為了激活靈敏性分析,運(yùn)行LINGO|Options…,選擇GeneralSolverTab,在DualComputations列表框中,選擇PricesandRanges選項(xiàng)。靈敏性分析耗費(fèi)相當(dāng)多的求解時(shí)間,因此當(dāng)速度很關(guān)鍵時(shí),就沒(méi)有必要激活它。4.選項(xiàng)...(Options...)從LINGO菜單中選用“Options...”命令、單擊“Options...”按鈕或直接按Ctrl+I組合鍵可以改變一些影響LINGO模型求解時(shí)的參數(shù)。該命令將打開(kāi)一個(gè)含有7個(gè)選項(xiàng)卡的窗口,你可以通過(guò)它修改LINGO系統(tǒng)的各種參數(shù)和選項(xiàng)。
5.模型通常形式...(Generate...)從LINGO菜單中選用“Generate...”命令或直接按Ctrl+G組合鍵可以創(chuàng)建當(dāng)前模型的代數(shù)形式、LINGO模型或MPS格式文本。6.圖片(Picture)7.調(diào)試(Debug)8.模型統(tǒng)計(jì)(ModelStatistics)6.查看...(Look...)從LINGO菜單中選用“Look...”命令或直接按Ctrl+L組合鍵可以查看全部的或選中的模型文本內(nèi)容。LINGO軟件菜單——WINDOW1.命令行窗口(OpenCommandWindow)
從窗口菜單中選用“OpenCommandWindow”命令或直接按Ctrl+1可以打開(kāi)LINGO的命令行窗口。在命令行窗口中可以獲得命令行界面,在“:”提示符后可以輸入LINGO的命令行命令。2.狀態(tài)窗口(StatusWindow)
從窗口菜單中選用“StatusWindow”命令或直接按Ctrl+2可以打開(kāi)LINGO的求解狀態(tài)窗口?;氐侥P痛翱冢⊿entToBack)Ctrl+B關(guān)閉所有窗口(CloseAll)Ctrl+3并行放置窗口(Tile)Ctrl+4層疊放置窗口(Cascade)Ctrl+5放置圖標(biāo)(ArrangeIcons)Ctrl+6LINGO軟件菜單——HELP1.幫助主題(HelpMenu)
從幫助菜單中選用“HelpMenu”可以打開(kāi)LINGO的幫助文件。注冊(cè)信息(Register)
填寫(xiě)注冊(cè)信息。自動(dòng)更新(AutoUptate)
自動(dòng)升級(jí)。2.關(guān)于LINGO(AboutLingo)
關(guān)于當(dāng)前LINGO的版本信息等。打開(kāi)文件:F3打印文件:F7復(fù)制:Ctrl+C取消操作:Ctrl+Z查找:Ctrl+F顯示解答:Alt+O匹配括號(hào):Ctrl+P選項(xiàng)設(shè)置:Ctrl+I關(guān)閉所有窗口:Alt+X在線幫助:F1新建文件:F2保存文件:F4剪切:Ctrl+X粘貼:Ctrl+V恢復(fù)操作:Ctrl+Y定位某行:ctrl+T求解模型:Ctrl+S模型圖示:Ctrl+K窗口后置:Ctrl+B
平鋪窗口:Alt+T上下文相關(guān)的幫助LINGO軟件工具欄“LG4”表示LINGO格式的模型文件,是一種特殊的二進(jìn)制格式文件,保存了我們?cè)谀P痛翱谥兴軌蚩吹降乃形谋竞推渌麑?duì)象及其格式信息,只有LINGO能讀出它,用其他系統(tǒng)打開(kāi)這種文件時(shí)會(huì)出現(xiàn)亂碼
“LNG”表示LINGO文本文件,以這個(gè)格式保存模型時(shí)系統(tǒng)
將給出警告,因?yàn)槟P椭械母袷叫畔ⅲㄈ缱煮w、顏色等)將會(huì)丟失
“LDT”表示數(shù)據(jù)文件“LTF”表示
命令腳本文件“LGR”表示
報(bào)告文件
除“LG4”文件外,這里的另外幾種格式的文件其實(shí)都是普通的文本文件,可以用任何文本編輯器打開(kāi)和編輯
LINGO軟件文件保存類(lè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í)間)LINGO軟件運(yùn)行狀態(tài)窗口的參數(shù)解釋LINGO軟件運(yùn)行狀態(tài)窗口的參數(shù)解釋求解器(求解程序)狀態(tài)框當(dāng)前模型的類(lèi)型: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)前約束不滿(mǎn)足的總量(不是不滿(mǎn)足的約束的個(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ì)Global程序);初始點(diǎn)數(shù)(對(duì)Multistart程序)有效步數(shù)
主要內(nèi)容LINGO軟件簡(jiǎn)介L(zhǎng)INGO建模語(yǔ)言(集合、運(yùn)算符和函數(shù)等)LINGO編程實(shí)例露天礦生產(chǎn)的車(chē)輛安排一個(gè)簡(jiǎn)單的LINGO程序例直接用LINGO來(lái)解如下二次規(guī)劃問(wèn)題:輸入窗口如下:目標(biāo)函數(shù)約束條件變量取整每個(gè)語(yǔ)句以“;”結(jié)束順序無(wú)關(guān)程序:eg1.lg4
輸出結(jié)果:運(yùn)行菜單命令“LINGO|Solve”最優(yōu)整數(shù)解X=(35,65)最大利潤(rùn)=11077.5一個(gè)簡(jiǎn)單的LINGO程序例1SAILCO公司需要決定下四個(gè)季度的帆船生產(chǎn)量。下四個(gè)季度的帆船需求量分別是40條,60條,75條,25條,這些需求必須按時(shí)滿(mǎn)足。每個(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)用最小?集合及其屬性QUARTERS集合的屬性DEMRPOPINVQUARTERS集合2341quarters/1,2,3,4/:dem,rp,op,inv;LINGO中定義集合及其屬性以“MODEL:”開(kāi)始以“END”結(jié)束集合定義部分從(“SETS:”到“ENDSETS”):定義集合及其屬性數(shù)據(jù)輸入部分從(“DATA:”到“ENDDATA”)給出優(yōu)化目標(biāo)和約束程序:eg2.lg4
目標(biāo)函數(shù)的定義方式對(duì)語(yǔ)句中冒號(hào)“:”后面的表達(dá)式,按照“:”前面的集合指定的下標(biāo)(元素)進(jìn)行求和。本例中目標(biāo)函數(shù)也可以等價(jià)地寫(xiě)成@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省去。@SUM(集合(下標(biāo)):關(guān)于集合的屬性的表達(dá)式)約束條件的定義方式循環(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);”的含義。這個(gè)語(yǔ)句可以簡(jiǎn)化成“@FOR(QUARTERS:RP<40);”。問(wèn)題求解:運(yùn)行菜單命令“LINGO|SOLVE”
全局最優(yōu)解RP=(40,40,40,25),OP=(0,10,35,0)最小成本=78450LINGO模型最基本的組成要素(1)集合段(SETS):以“SETS:”開(kāi)始,“ENDSETS”結(jié)束,定義必要的集合變量(SET)及其元素(MEMBER,含義類(lèi)似于數(shù)組的下標(biāo))和屬性(ATTRIBUTE,含義類(lèi)似于數(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等。LINGO模型最基本的組成要素(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)(回車(chē)等價(jià)于一個(gè)空格),如上面對(duì)DEM的賦值也可以寫(xiě)成“DEM=40607525;”。LINGO模型最基本的組成要素(4)初始段(INIT):以“INIT:”開(kāi)始,“ENDINIT”結(jié)束,對(duì)集合的屬性(數(shù)組)定義初值(因?yàn)榍蠼馑惴ㄒ话闶堑惴?,所以,如果能給出一個(gè)比較好的迭代初值,對(duì)提高算法的計(jì)算效果是有益的)。如果有一個(gè)接近最優(yōu)解的初值,對(duì)LINGO求解模型是有幫助的。定義初值的格式為:“attribute(屬性)=value_list(常數(shù)列表);”(5)計(jì)算段(CALC):以“CALC:”開(kāi)始,“ENDCALC”結(jié)束,對(duì)一些原始數(shù)據(jù)進(jìn)行計(jì)算處理?;炯吓c派生集合例2建筑工地的位置(用平面坐標(biāo)a,b表示,距離單位:公里)及水泥日用量d(噸)下表給出。有兩個(gè)臨時(shí)料場(chǎng)位于P(5,1),Q(2,7),日儲(chǔ)量各有20噸。從A,B兩料場(chǎng)分別向各工地運(yùn)送多少?lài)嵥啵箍偟膰嵐飻?shù)最小。兩個(gè)新的料場(chǎng)應(yīng)建在何處,節(jié)省的噸公里數(shù)有多大?123456a1.258.750.55.7537.25b1.250.754.7556.57.75d3547611基本集合與派生集合建立模型記工地的位置為,水泥日用量為;料場(chǎng)位置為,日儲(chǔ)量為;從料場(chǎng)向工地的運(yùn)送量為?;炯吓c派生集合本例中集合的概念利用集合的概念,可以定義需求點(diǎn)DEMAND和供應(yīng)點(diǎn)SUPPLY兩個(gè)集合,分別有6個(gè)和2個(gè)元素(下標(biāo))。集合的屬性相當(dāng)于以集合的元素為下標(biāo)的數(shù)組。這里的相當(dāng)于二維數(shù)組。它的兩個(gè)下標(biāo)分別來(lái)自集合DEMAND和SUPPLY,因此可以定義一個(gè)由二元對(duì)組成的新的集合,然后將定義成這個(gè)新集合的屬性。link(demand,supply):c;基本集合與派生集合定義了三個(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ǔ)言也稱(chēng)為矩陣生成器(MATRIXGENERATOR)。類(lèi)似DEMAND和SUPPLY直接把元素列舉出來(lái)的集合,稱(chēng)為基本集合(primaryset),而把LINK這種基于其它集合而派生出來(lái)的二維或多維集合稱(chēng)為派生集合(derivedset)。由于是DEMAND和SUPPLY生成了派生集合LINK,所以DEMAND和SUPPLY稱(chēng)為L(zhǎng)INK的父集合。程序:eg3.lg4
基本集合與派生集合初始段LINGO對(duì)數(shù)據(jù)是按列賦值的語(yǔ)句的實(shí)際賦值順序是X=(5,2),Y=(1,7),而不是X=(5,1),Y=(2,7)等價(jià)寫(xiě)法:“X=5,2;Y=1,7;”同理,數(shù)據(jù)段中對(duì)常數(shù)數(shù)組A,B的賦值語(yǔ)句也可以寫(xiě)成A,B=1.251.258.750.750.54.755.75536.57.257.75;基本集合與派生集合定義目標(biāo)和約束,與前例的方法是類(lèi)似(這里包含了派生集合),請(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])和兩類(lèi)約束(DEMAND_CON、SUPPLY_CON)分別進(jìn)行了命名(請(qǐng)?zhí)貏e注意這里約束命名的特點(diǎn))?;炯吓c派生集合解答:運(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)求解程序?;炯吓c派生集合問(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.
此時(shí)目標(biāo)函數(shù)值的下界(ObjBound=85.2638)與目前得到的最好的可行解的目標(biāo)函數(shù)值(BestObj=85.2661)相差已經(jīng)非常小,可以認(rèn)為已經(jīng)得到了全局最優(yōu)解?;炯吓c派生集合計(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(噸公里)。稠密集合與稀疏集合包含了兩個(gè)基本集合構(gòu)成的所有二元有序?qū)Φ呐缮戏Q(chēng)為稠密集合(簡(jiǎn)稱(chēng)稠集)。有時(shí)候,在實(shí)際問(wèn)題中,一些屬性(數(shù)組)只在笛卡兒積的一個(gè)真子集合上定義,這種派生集合稱(chēng)為稀疏集合(簡(jiǎn)稱(chēng)疏集)。例3(最短路問(wèn)題)在縱橫交錯(cuò)的公路網(wǎng)中,貨車(chē)司機(jī)希望找到一條從一個(gè)城市到另一個(gè)城市的最短路.下圖表示的是公路網(wǎng),節(jié)點(diǎn)表示貨車(chē)可以??康某鞘?弧上的權(quán)表示兩個(gè)城市之間的距離(百公里).那么,貨車(chē)從城市S出發(fā)到達(dá)城市T,如何選擇行駛路線,使所經(jīng)過(guò)的路程最短?STA1
A2
A3
B1
B2
C1
C2
633665874678956稠密集合與稀疏集合STA1
A2
A3
B1
B2
C1
C2
633665874678956分析
為得到從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)只有唯一的道路)稠密集合與稀疏集合分析可把從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):STA1
A2
A3
B1
B2
C1
C2
633665874678956稠密集合與稀疏集合計(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é)上稱(chēng)為動(dòng)態(tài)規(guī)劃(DynamicProgramming)本例的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)的屬性變量(給定的距離)程序:eg4.lg4
稠密集合與稀疏集合從模型中還可以看出:這個(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ǔ)句直接寫(xiě)成“L=0;”,語(yǔ)法上看也是對(duì)的,但其含義是L所有元素的取值全部為0,所以也會(huì)與題意不符。稠密集合與稀疏集合雖然集合CITIES中的元素不是數(shù)字,但當(dāng)它以CITIES(I)的形式出現(xiàn)在循環(huán)中時(shí),引用下標(biāo)I卻實(shí)際上仍是正整數(shù),也就是說(shuō)I指的正是元素在集合中的位置(順序),一般稱(chēng)為元素的索引(INDEX)。在@for循環(huán)中的過(guò)濾條件里用了一個(gè)函數(shù)“@index”,其作用是返回一個(gè)元素在集合中的索引值,這里@index(S)=1(即元素S在集合中的索引值為1),所以邏輯關(guān)系式“I#GT#@index(S)”可以可以直接等價(jià)地寫(xiě)成“I#GT#1”。這里@index(S)實(shí)際上還是@index(CITIES,S)的簡(jiǎn)寫(xiě),即返回S在集合CITIES中的索引值。稠密集合與稀疏集合本例的LINGO求解結(jié)果從S到T的最優(yōu)行駛路線的路長(zhǎng)為20(進(jìn)一步分析,可以得到最優(yōu)行駛路線為S→A3→B2→C1→T)。集合的類(lèi)型集合派生集合基本集合稀疏集合稠密集合元素列表法元素過(guò)濾法直接列舉法隱式列舉法setname[/member_list/][:attribute_list];setname(parent_set_list)[/member_list/][:attribute_list];SETS:CITIES/A1,A2,A3,B1,B2/;ROADS(CITIES,CITIES)/ A1,B1A1,B2A2,B1A3,B2/:D;ENDSETSSETS:STUDENTS/S1..S8/;PAIRS(STUDENTS,STUDENTS)|&2#GT#&1:BENEFIT,MATCH;ENDSETS集合使用小結(jié)基本集合的定義語(yǔ)法setname[/member_list/][:attribute_list];其中setname為定義的集合名,member_list為元素列表,attribute_list為屬性列表。類(lè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ǔ)法setname(parent_set_list)[/member_list/][:attribute_list];與基本集合的定義相比較多了一個(gè)parent_set_list(父集合列表)。父集合列表中的集合(如set1,set2,…,等)稱(chēng)為派生集合setname的父集合,它們本身也可以是派生集合。算術(shù)運(yùn)算符LINGO中的算術(shù)運(yùn)算符有以下5種:+(加法),-(減法或負(fù)號(hào)),*(乘法),/(除法),^(求冪)。邏輯運(yùn)算符在LINGO中,邏輯運(yùn)算(表達(dá)式)通常作為過(guò)濾條件使用,邏輯運(yùn)算符有9種,可以分成兩類(lèi):#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)算符在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ù)@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...)。@MOD(X,Y):模函數(shù),返回X對(duì)Y取模的結(jié)果,即X除以Y的余數(shù),
這里X和Y應(yīng)該是整數(shù)。
@POW(X,Y):指數(shù)函數(shù),返回XY的值?;镜臄?shù)學(xué)函數(shù)@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的單位是弧度)。集合循環(huán)函數(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á)式的和。集合操作函數(shù)@INDEX([set_name,]primitive_set_element)
給出元素primitive_set_element在集合set_name中的索引值(即按定義集合時(shí)元素出現(xiàn)順序的位置編號(hào))。省略set_name,LINGO按模型中定義的集合順序找到第一個(gè)含有該元素的集合,并返回索引值。如果沒(méi)有找到該元素,則出錯(cuò)。@IN(set_name,primitive_index_1[,primitive_index_2...])
判斷一個(gè)集合中是否含有某個(gè)索引值。如果集合set_name中包含由索引primitive_index_1[,primitive_index_2...]所對(duì)應(yīng)元素,則返回1(邏輯值“真”),否則返回0(邏輯值“假”)。@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ù)。@SIZE(set_name)返回?cái)?shù)據(jù)集set_name中包含元素的個(gè)數(shù)。變量定界函數(shù)@BND(L,X,U)
:限制L<=X<=U。注意LINGO中沒(méi)有與LINDO命令SLB、SUB類(lèi)似的函數(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ù)文件輸入輸出函數(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ì)被覆蓋。其他函數(shù)@IF(logical_condition,true_result,false_result)
當(dāng)邏輯表達(dá)式logical_condition的結(jié)果為真時(shí),返回true_result,否則返回false_result。@WARN('text',logical_condition)如果邏輯表達(dá)式“l(fā)ogical_condition”的結(jié)果為真,顯示‘text’信息。@USER(user_determined_arguments)
允許用戶(hù)自己編寫(xiě)的函數(shù)(DLL或OBJ文件),可能應(yīng)當(dāng)用C或FORTRAN等其他語(yǔ)言編寫(xiě)并編譯。主要內(nèi)容LINGO軟件簡(jiǎn)介L(zhǎng)INGO建模語(yǔ)言(集合、運(yùn)算符和函數(shù)等)LINGO編程實(shí)例露天礦生產(chǎn)的車(chē)輛安排例1.某晝夜服務(wù)的公交路線每天各時(shí)間區(qū)段內(nèi)需司機(jī)和乘務(wù)人員如下:班次時(shí)間最少需要人數(shù)16:00—10:0060210:00—14:0070314:00—18:0060418:00—22:0050522:00—2:002062:00—6:0030目錄下頁(yè)返回上頁(yè)結(jié)束設(shè)司機(jī)和乘務(wù)人員分別在各時(shí)間區(qū)段一開(kāi)始上班,并連續(xù)工作八小時(shí),問(wèn)該公交線路至少配備多少名司機(jī)和乘務(wù)人員?從第一班開(kāi)始排,試建立線性模型.解=1,2,…,6),則人總數(shù)為:設(shè)為第班應(yīng)報(bào)到的人員(按所需人數(shù)最少的要求,可得到線性模型如下:目錄下頁(yè)返回上頁(yè)結(jié)束LINGO程序如下:MODEL:min=x1+x2+x3+x4+x5+x6;x1+x6>=60;x1+x2>=70;x2+x3>=60;x3+x4>=50;x4+x5>=20;x5+x6>=30;END得到的解為:配備的司機(jī)和乘務(wù)人員最少為150人.x1=60,x2=10,x3=50,x4=0,x5=30,x6=0;例2.某地區(qū)有三個(gè)農(nóng)場(chǎng)共用一條灌渠,每個(gè)農(nóng)場(chǎng)的可灌溉地及分配到的最大用水量如下表:農(nóng)場(chǎng)可灌溉地(畝)最大用水量(百立方)140060026008003300375各農(nóng)場(chǎng)均可種植甜菜、棉花和高粱三種作物,各種作物的用水量、凈收益及國(guó)家規(guī)定的該地區(qū)各種作物種植總面積最高限額如下表:作物種類(lèi)種植限額(畝)耗水量(百立方/畝)凈收益(元/畝)甜菜6003400棉花5002300高粱3251100三個(gè)農(nóng)場(chǎng)達(dá)成協(xié)議,他們的播種面積與其可灌溉面積相等,而各農(nóng)場(chǎng)種何種作物并無(wú)限制.問(wèn)如何制定各農(nóng)場(chǎng)種植計(jì)劃才能在上述限制條件下,使本地區(qū)的三個(gè)農(nóng)場(chǎng)的總凈收益最大.解
設(shè)農(nóng)場(chǎng)1種植的甜菜、棉花和高粱分別為畝,農(nóng)場(chǎng)2種植的甜菜、棉花和高粱分別為畝,農(nóng)場(chǎng)3種植的甜菜、棉花和高粱分別為畝.設(shè)三個(gè)農(nóng)場(chǎng)可耕地分別為其最大用水量分別為其甜菜、棉花和高粱的種植限額分別為目錄下頁(yè)返回上頁(yè)結(jié)束根據(jù)題目條件,可建立如下線性模型:目錄下頁(yè)返回上頁(yè)結(jié)束其凈收益分別為其耗水量分別為L(zhǎng)INGO編程如下:MODEL:SETS:place/1..3/:a,b;kind/1..3/:c,d,e;plan(place,kind):x;ENDSETSDATA:a=400,600,300;b=600,800,375;c=600,500,325;d=3,2,1;e=400,300,100;ENDDATAmax=@sum(kind(j):e(j)*@sum(place(i):x(i,j)));@for(kind(j):@sum(place(i):x(i,j))<=c(j));@for(place(i):@sum(kind(j):x(i,j))<=a(i));@for(place(i):@sum(kind(j):d(j)*x(i,j))<=b(i));END目錄下頁(yè)返回上頁(yè)結(jié)束得到結(jié)果如下:X(1,1)=0,X(1,2)=300,X(1,3)=0X(2,1)=258.3333,X(2,2)=12.5,X(2,3)=0X(3,1)=0,X(3,2)=187.5,X(3,3)=0最大總凈收益為253333.3元.對(duì)本題來(lái)說(shuō),由于數(shù)據(jù)少,可以不采用數(shù)組形式,而直接采用變量表示,建立模型如下:畝.設(shè)農(nóng)場(chǎng)1種植的甜菜、棉花和高粱分別為畝,農(nóng)場(chǎng)2種植的甜菜、棉花和高粱分別為畝,農(nóng)場(chǎng)3種植的甜菜、棉花和高粱分別為根據(jù)題目條件,可建立如下線性模型:目錄下頁(yè)返回上頁(yè)結(jié)束LINGO程序如下:MODEL:max=400*(x1+x2+x3)+300*(y1+y2+y3)+100*(z1+z2+z3);x1+x2+x3<=600;y1+y2+y3<=500;z1+z2+z3<=325;x1+y1+z1<=400;x2+y2+z2<=600;x3+y3+z3<=300;3*x1+2*y1+z1<=600;3*x2+2*y2+z2<=800;3*x3+2*y3+z3<=375;END得到的解如下:X1=200,Y1=0,Z1=0;X2=58.33333,Y2=312.5,Z2=0;X3=0,Y3=187.5,Z3=0;最大總凈收益為253333.3元.目錄下頁(yè)返回上頁(yè)結(jié)束例3.公司在各地有4項(xiàng)業(yè)務(wù),選定了4位業(yè)務(wù)員去處理.由于業(yè)務(wù)能力、經(jīng)驗(yàn)和其它情況不同,4業(yè)務(wù)員去處理4項(xiàng)業(yè)務(wù)的費(fèi)用(單位:元)各不相同,見(jiàn)下表:應(yīng)當(dāng)怎樣分派任務(wù),才能使總的費(fèi)用最???
業(yè)務(wù)業(yè)務(wù)員7005001000110049001000800400380030060027001000800110014321500目錄下頁(yè)返回上頁(yè)結(jié)束解這是一個(gè)最優(yōu)指派問(wèn)題.引入如下變量:設(shè)矩陣為指派矩陣,其中為第個(gè)業(yè)務(wù)員做第項(xiàng)業(yè)務(wù)的業(yè)務(wù)費(fèi).則可以建立如下模型:目錄下頁(yè)返回上頁(yè)結(jié)束LINGO程序如下:MODEL:SETS:person/1..4/;task/1..4/;assign(person,task):a,x;ENDSETSDATA:a=1100,800,1000,700,600,500,300,800,400,800,1000,900,1100,1000,500,700;ENDDATAmin=@sum(assign:a*x);@for(person(i):@sum(task(j):x(i,j))=1);@for(task(j):@sum(person(i):x(i,j))=1);@for(assign(i,j):@bin(x(i,j)));END目錄下頁(yè)返回上頁(yè)結(jié)束得到的結(jié)果如下:最小費(fèi)用為2100元.即第1個(gè)業(yè)余員做第4項(xiàng)業(yè)務(wù),第2個(gè)業(yè)余員做第2項(xiàng)業(yè)務(wù),即第3個(gè)業(yè)余員做第1項(xiàng)業(yè)務(wù),第4業(yè)余員做第3項(xiàng)業(yè)務(wù).總費(fèi)用達(dá)到最小,為2100元.目錄下頁(yè)返回上頁(yè)結(jié)束x(1,1)=0,x(1,2)=0,x(1,3)=0,x(1,4)=1;x(2,1)=0,x(2,2)=1,x(2,3)=0,x(2,4)=0;x(3,1)=1,x(3,2)=0,x(3,3)=0,x(3,4)=0;x(4,1)=0,x(4,2)=0,x(4,3)=1,x(4,4)=0;MODEL:…DATA:a=@file(data.txt);ENDDATA…END同時(shí)在LINGO目錄下建立文本文件data.txt,數(shù)據(jù)如下:目錄下頁(yè)返回上頁(yè)結(jié)束LINGO程序中輸入的數(shù)據(jù)也可以從文本文件中讀入,特別是數(shù)據(jù)比較多時(shí),將程序與數(shù)據(jù)分開(kāi),顯得更方便.如上面程序也可以這樣寫(xiě):1100,800,1000,700600,500,300,800400,800,1000,9001100,1000,500,700例4.籃球隊(duì)選隊(duì)員問(wèn)題籃球隊(duì)要選擇5名隊(duì)員上場(chǎng)組成出場(chǎng)陣容參加比賽.8名籃球隊(duì)員的身高及擅長(zhǎng)位置如下表:隊(duì)員12345678身高1.921.901.881.861.851.831.801.78位置中鋒中鋒前鋒前鋒前鋒后衛(wèi)后衛(wèi)后衛(wèi)目錄下頁(yè)返回上頁(yè)結(jié)束出場(chǎng)陣容滿(mǎn)足如下條件:(1)只能有一名中鋒上場(chǎng);(2)至少有一名后衛(wèi)上場(chǎng);(4)2號(hào)和8號(hào)至少有1個(gè)不出場(chǎng);(3)如1號(hào)和4號(hào)均上場(chǎng),則6號(hào)不出場(chǎng);問(wèn)應(yīng)當(dāng)選擇哪5名隊(duì)員上場(chǎng),才能使出場(chǎng)隊(duì)員平均身高最高?解
這是一個(gè)0-1整數(shù)規(guī)劃問(wèn)題.設(shè)0-1變量,則:則目標(biāo)函數(shù)很容易給出:約束條件:設(shè)各隊(duì)員的身高分別為常數(shù)
來(lái)表示,所選隊(duì)員為5人,則只能有一名中鋒上場(chǎng),則至少有一名后衛(wèi),則如1號(hào)和4號(hào)均上場(chǎng),則6號(hào)不出場(chǎng).則可用如下一個(gè)約束來(lái)表達(dá):2號(hào)和8號(hào)至少有1個(gè)不出場(chǎng),即2號(hào)和8號(hào)至多出場(chǎng)1個(gè).約束表達(dá):數(shù)學(xué)模型:LINGO編程如下:MODEL:SETS:team/1..8/:a,x;ENDSETSDATA:a=1.92,1.90,1.88,1.86,1.85,1.83,1.80,1.78;!給出身高數(shù)據(jù);ENDDATAmax=@sum(team(i):a(i)*x(i))/5.0;@SUM(team(i):x(i))=5;!所選隊(duì)員為5人;x(1)+x(2)=1;!只能有一名中鋒上場(chǎng);x(6)+x(7)+x(8)>=1;!至少有一名后衛(wèi)上場(chǎng);x(1)+x(4)+x(6)<=2;!如果1號(hào)和4號(hào)上場(chǎng),則6號(hào)不上場(chǎng);x(2)+x(8)<=1;!2號(hào)和8號(hào)至少有一個(gè)不出場(chǎng).即出場(chǎng)人數(shù)至多為1個(gè);@FOR(team(i):@bin(x(i)));!所有變量為0-1變量;END解為:x(1)=0,x(2)=1,x(3)=1,x(4)=1,x(5)=1,x(6)=1,x(7)=0,x(8)=0即第2,3,4,5,6名隊(duì)員被選上,最大平均身高為Z=1.864米。例5.有五項(xiàng)設(shè)計(jì)任務(wù)可供選擇.各項(xiàng)設(shè)計(jì)任務(wù)的預(yù)期完成時(shí)間分別為3,8,5,4,10(周),設(shè)計(jì)報(bào)酬分別為7,17,11,9,21(萬(wàn)元).設(shè)計(jì)任務(wù)只能一項(xiàng)一項(xiàng)地進(jìn)行,總的期限為20周.選擇任務(wù)時(shí)必須滿(mǎn)足下面要求:(1)至少完成3項(xiàng)設(shè)計(jì)任務(wù).(2)若選擇任務(wù)1,必須同時(shí)選擇任務(wù)2.(3)任務(wù)3和任務(wù)4不能同時(shí)選擇.
應(yīng)當(dāng)選擇哪些任務(wù),才能使總的設(shè)計(jì)報(bào)酬最大?解
這是一個(gè)0-1整數(shù)規(guī)劃問(wèn)題.則容易得到目標(biāo)函數(shù):目錄下頁(yè)返回上頁(yè)結(jié)束設(shè)0-1變量如下:設(shè)各項(xiàng)設(shè)計(jì)任務(wù)的完成時(shí)間為表示,設(shè)計(jì)報(bào)酬為表示.根據(jù)題目要求分別列出約束條件如下:
數(shù)學(xué)模型:目錄下頁(yè)返回上頁(yè)結(jié)束總期限為20周,則約束條件為至少完成3項(xiàng)設(shè)計(jì)任務(wù),則若選擇任務(wù)1,必須同時(shí)選擇任務(wù)2,則任務(wù)3和任務(wù)4不能同時(shí)選擇,則目錄下頁(yè)返回上頁(yè)結(jié)束MODEL:SETS:mat/1..5/:m,t,x;ENDSETSDATA:m=7,17,11,9,21;!定義報(bào)酬數(shù)組;t=3,8,5,4,10;!定義完成時(shí)間;ENDDATAmax=@SUM(mat(i):m(i)*x(i));!定義目標(biāo)函數(shù);@SUM(mat(i):t(i)*x(i))<=20;!期限約束
;@SUM(mat(i):x(i))>=3;!至少完成3項(xiàng)任務(wù);x(2)>=x(1);!若選擇任務(wù)1,必須同時(shí)選擇任務(wù)2;x(3)+x(4)<=1;!任務(wù)3和任務(wù)4不能同時(shí)選擇;@FOR(mat(i):@BIN(x(i)));!使各變量為0-1變量;END解為:x(1)=1,x(2)=1,x(3)=1,x(4)=0,x(5)=0.選擇設(shè)計(jì)任務(wù)1,2,3,最大報(bào)酬為35萬(wàn)元.
LINGO程序如下:例6.固定費(fèi)用有四種資源A,B,C,D被用于生產(chǎn)三種產(chǎn)品I,II,III,資源量、產(chǎn)品單件可變費(fèi)用、單件售價(jià)、資源單耗量及組織三種商品生產(chǎn)的固定費(fèi)用見(jiàn)下表.現(xiàn)要求制定一個(gè)生產(chǎn)計(jì)劃,使總收益最大.目錄下頁(yè)返回上頁(yè)結(jié)束20107單件售價(jià)200150100固定費(fèi)用1264單件可變費(fèi)用700753D100321C300432B500842A資源量IIIIII
產(chǎn)品單耗量資源解
可引入用0-1變量來(lái)解決是否需要固定費(fèi)用問(wèn)題.目錄下頁(yè)返回上頁(yè)結(jié)束第I種產(chǎn)品銷(xiāo)售一件可收入7-4=3元,第II種產(chǎn)品銷(xiāo)售一件可收入10-6=4元,第III種產(chǎn)品銷(xiāo)售一件可收入20-12=8元.則問(wèn)題的整數(shù)規(guī)劃模型為:目錄下頁(yè)返回上頁(yè)結(jié)束設(shè)是第種產(chǎn)品的產(chǎn)量,;再設(shè).
目錄下頁(yè)返回上頁(yè)結(jié)束其中為的某個(gè)上界.如根據(jù)第2個(gè)約束條件,可取.也可統(tǒng)一取其最大值LINGO程序.MODEL:DATA:M=150;ENDDATAmax=3*x1+4*x2+8*x3-100*y1-150*y2-200*y3;!目標(biāo)函數(shù);2*x1+4*x2+8*x3<=500;2*x1+3*x2+4*x3<=300;x1+2*x2+3*x3<=100;3*x1+5*x2+7*x3<=700;x1<=M*y1;x2<=M*y2;x3<=M*y3;@GIN(x1);@GIN(x2);@GIN(x3);!指定產(chǎn)品件數(shù)為整數(shù);@BIN(y1);@BIN(y2);@BIN(y3);!指定0-1變量;end得到的解為x1=100,x2=0,x3=0,y1=1,y2=0,y3=0.最大值為Z=200元.目錄下頁(yè)返回上頁(yè)結(jié)束例7.某企業(yè)和用戶(hù)簽定了設(shè)備交貨合同,已知該企業(yè)各季度的生產(chǎn)能力、每臺(tái)設(shè)備的生產(chǎn)成本和每季度末的交貨量見(jiàn)下表,若生產(chǎn)出的設(shè)備當(dāng)季度不交貨,每臺(tái)設(shè)備每季度需要支付保管費(fèi)0.1萬(wàn)元,試問(wèn)在遵守合同的條件下,企業(yè)應(yīng)如何安排生產(chǎn)計(jì)劃,才能使年消耗費(fèi)用最低?季度工廠生產(chǎn)能力(臺(tái))交貨量(臺(tái))每臺(tái)設(shè)備生產(chǎn)成本(萬(wàn)元)1251512.02352011.03302511.54202012.5目錄下頁(yè)返回上頁(yè)結(jié)束解法1目錄下頁(yè)返回上頁(yè)結(jié)束設(shè)第
季度生產(chǎn)臺(tái),庫(kù)存臺(tái),第季度生產(chǎn)能力用表示,交貨量用表示,每臺(tái)設(shè)備生產(chǎn)成本用表示.則建立目標(biāo)函數(shù)為:LINGO程序如下:MODEL:SETS:QUART/1..4/:x,y,p,d,c;ENDSETSDATA:!指定數(shù)據(jù);p=25,35,30,20;d=15,20,25,20;c=12.0,11.0,11.5,12.5;ENDDATAmin=@sum(QUART(i):c(i)*x(i)+0.1*y(i));!目標(biāo)函數(shù);@FOR(QUART(i):x(i)<=p(i));!生產(chǎn)能力限制;@FOR(QUART(i)|i#GT#1:y(i)=y(i-1)+x(i)-d(i));y(1)=x(1)-d(1);end得到的結(jié)果如下:x1=15,x2=35,x3=30,x4=0;y1=0,y2=15,y3=20,y4=0.年消耗最小費(fèi)用為913.5萬(wàn)元.目錄下頁(yè)返回上頁(yè)結(jié)束解法2下面條件:根據(jù)交貨量的規(guī)定,應(yīng)滿(mǎn)足如下條件:
第季度生產(chǎn)第季度交貨的每臺(tái)設(shè)備所消耗的其值如下表:目錄下頁(yè)返回上頁(yè)結(jié)束設(shè)
第
季度生產(chǎn)第
季度交貨的臺(tái)數(shù),第季度生產(chǎn)能力用表示,交貨量用表示,每臺(tái)設(shè)備生產(chǎn)成本用表示.由于生產(chǎn)能力的限制,需要滿(mǎn)足費(fèi)用,應(yīng)等于生產(chǎn)成本加上保管維護(hù)費(fèi)用之和,12.311.211.612.512.211.111.512.111.012.012344321
生產(chǎn)量交貨量則該模型表示如下:目錄下頁(yè)返回上頁(yè)結(jié)束LINGO程序如下:MODEL:SETS:QUART/1..4/:p,d;LINK(QUART,QUART)|&1#LE#&2:x,c;!只取上三角陣;ENDSETSDATA:!指定數(shù)據(jù);p=25,35,30,20;d=15,20,25,20;c=12.012.112.212.311.011.111.211.511.612.5;ENDDATAMIN=@SUM(LINK:c*x);!目標(biāo)函數(shù);@FOR(QUART(i):@SUM(QUART(j)|j#GE#i:x(i,j))<=p(i));!生產(chǎn)能力限制;@FOR(QUART(j):@SUM(QUART(i)|i#LE#j:x(i,j))=d(j));!交貨合同限制;End目錄下頁(yè)返回上頁(yè)結(jié)束得到的結(jié)果如下:年消耗最小費(fèi)用為913.5萬(wàn)元.為0臺(tái),與前面方法得到的結(jié)果一樣.其最小費(fèi)用也可以看出,第1季度生產(chǎn)量為15臺(tái),第2季度生產(chǎn)量為35臺(tái),第3季度生產(chǎn)量為30臺(tái),第4季度生產(chǎn)量一樣.目錄下頁(yè)返回上頁(yè)結(jié)束X(1,1)=15,X(1,2)=0,X(1,3)=0,X(1,4)=0;
X(2,2)=20,X(2,3)=0,X(2,4)=15,X(3,3)=25,X(3,4)=5;X(4,4)=0.例8.
旅行售貨商問(wèn)題(TSP問(wèn)題)設(shè)有一個(gè)售貨員從10個(gè)城市中的某一個(gè)城市出發(fā),去其它9個(gè)城市推銷(xiāo)產(chǎn)品.10個(gè)城市相互距離如下表.要求每個(gè)城市到達(dá)一次僅一次后,回到原出發(fā)城市.回到原出發(fā)城市.問(wèn)他應(yīng)如何選擇旅行路線,使總路程最短.目錄下頁(yè)返回上頁(yè)結(jié)束城市1234567891010745861213111827031091451417173430591021827124510501491092316589914078720196614109701352513712521108130232118813148975230181291117272320252118016101817121619131812160解法1設(shè)城市之間距離用矩陣來(lái)表示,其中為下三目錄下頁(yè)返回上頁(yè)結(jié)束角矩陣,表示城市與城市之間的距離.設(shè)0--1矩陣用來(lái)表示經(jīng)過(guò)的各城市之間的路線.設(shè)則該TSP問(wèn)題轉(zhuǎn)化為如下線性模型:目錄下頁(yè)返回上頁(yè)結(jié)束LINGO程序如下:!TSPquesion;MODEL:SETS:city/1..10/;link(city,city)|&1#GT#&2:d,s;ENDSETSDATA:d=7435105899146141097125211081313148975231117272320252118181712161913181216;ENDDATA目錄下頁(yè)返回上頁(yè)結(jié)束MIN=@SUM(link:d*s);@SUM(city(j)|j#GT#1:S(j,1))=2;!與第1個(gè)城市相連的有兩個(gè)城市;!與第i個(gè)城市相連有兩個(gè)城市;@FOR(city(i)|i#GT#1:@SUM(city(j)|j#GT#i:s(j,i))+@SUM(city(k)|k#LT#i:s(i,k))=2);@FOR(link:@BIN(s));
其最短路線為1—4—3—2—7—5—6—8—10—9—1,最短距離為77公里.得到的結(jié)果如下:S(3,2)=1,S(4,1)=1,S(4,3)=1,S(6,5)=1,S(7,2)=1,S(7,5)=1,S(8,6)=1,S(9,1)=1,S(10,8)=1,S(10,9)=1.其它全為0目錄下頁(yè)返回上頁(yè)結(jié)束優(yōu)缺點(diǎn)分析:該方法將TSP問(wèn)題求解化為線性規(guī)劃,采用LINGO軟件求解.優(yōu)點(diǎn)是求解速度極快;缺點(diǎn)是可能會(huì)形成一些子圈。無(wú)法真正得到最優(yōu)解.解法二各城市之間的路線.設(shè)與城市之間的距離.設(shè)0--1矩陣用來(lái)表示經(jīng)過(guò)的目錄下頁(yè)返回上頁(yè)結(jié)束設(shè)城市之間距離用矩陣來(lái)表示,表示城市考慮每個(gè)城市后只有一個(gè)城市,則:考慮每個(gè)城市前只有一個(gè)城市,則:但僅以上約束條件不能避免在一次遍歷中產(chǎn)生多于一個(gè)互不連通回路.充分約束條件:目錄下頁(yè)返回上頁(yè)結(jié)束為此我們引入額外變量,附加以下于是我們可以得到如下的模型:目錄下頁(yè)返回上頁(yè)結(jié)束LINGO程序!TSPquesion;MODEL:SETS:city/1..10/:u;link(city,city):d,s;ENDSETSDATA:d=074 58 61213 1118703 109 14 514 1717430 59 10218 27125105 014 9 109 231689 9 140 7 87 201961410 97 0 135 2513125 21 108 13 023 211813148 97 5 230 1812111727 2320 25 2118 016181712 1619 13 1812 160;ENDDATA目錄下頁(yè)返回上頁(yè)結(jié)束
MIN=@SUM(link:d*s);@for(city(j):@sum(city(i)|j#ne#i:s(i,j))=1);!城市j前有一個(gè)城市相連;@for(city(i):@sum(city(j)|j#ne#i:s(i,j))=1);!城市i后前有一個(gè)城市相連;@for(link(i,j)|i#NE#j#and#i#gt#1:u(i)-u(j)+10*s(i,j)<=9);@for(city(i)|i#gt#1:u(i)<=8);@FOR(link:@BIN(s));end主要內(nèi)容優(yōu)化模型與LINGO軟件簡(jiǎn)介L(zhǎng)INGO建模語(yǔ)言(集合、運(yùn)算符和函數(shù)等)LINGO編程實(shí)例露天礦生產(chǎn)的車(chē)輛安排問(wèn)題描述露天礦里鏟位已分成礦石和巖石:平均鐵含量不低于25%的為礦石,否則為巖石。每個(gè)鏟位的礦石、巖石數(shù)量,以及礦石的平均鐵含量(稱(chēng)為品位)都是已知的。每個(gè)鏟位至多安置一臺(tái)電鏟,電鏟平均裝車(chē)時(shí)間5分鐘卡車(chē)在等待時(shí)所耗費(fèi)的能量也是相當(dāng)可觀的,原則上在安排時(shí)不應(yīng)發(fā)生卡車(chē)等待的情況。礦石卸點(diǎn)需要的鐵含量要求都為29.5%1%(品位限制),搭配量在一個(gè)班
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 財(cái)務(wù)預(yù)算管理工作流程及制度
- 拆除項(xiàng)目應(yīng)急預(yù)案(3篇)
- 油桶浮橋施工方案(3篇)
- 服裝季末活動(dòng)策劃方案(3篇)
- 廣場(chǎng)電纜施工方案(3篇)
- 刨除路面施工方案(3篇)
- 養(yǎng)殖魚(yú)塘施工方案(3篇)
- 城市公共自行車(chē)智能調(diào)度中心建設(shè)2025年技術(shù)創(chuàng)新應(yīng)用前景分析報(bào)告
- 大型停電應(yīng)急預(yù)案(3篇)
- 庭院桌椅施工方案(3篇)
- 研學(xué)旅行指導(dǎo)手冊(cè)
- 大學(xué)生社會(huì)支持評(píng)定量表附有答案
- 植入式靜脈給藥裝置(輸液港)-中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)2023
- GB/T 2988-2023高鋁磚
- 東風(fēng)7電路圖解析
- 數(shù)字填圖系統(tǒng)新版(RgMap2.0)操作手冊(cè)
- FZ/T 73009-2021山羊絨針織品
- JJF 1069-2012 法定計(jì)量檢定機(jī)構(gòu)考核規(guī)范(培訓(xùn)講稿)
- DFMEA編制作業(yè)指導(dǎo)書(shū)新版
- DB35∕T 1844-2019 高速公路邊坡工程監(jiān)測(cè)技術(shù)規(guī)程
- 城市管理綜合執(zhí)法局城管執(zhí)法與執(zhí)法程序PPT模板
評(píng)論
0/150
提交評(píng)論