第04講 Lingo軟件入門_第1頁
第04講 Lingo軟件入門_第2頁
第04講 Lingo軟件入門_第3頁
第04講 Lingo軟件入門_第4頁
第04講 Lingo軟件入門_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4講Lingo軟件入門司守奎煙臺(tái)市,海軍航空工程學(xué)院數(shù)學(xué)教研室Email:sishoukui@163.com4.1初識(shí)Lingo程序Lingo程序書寫實(shí)際上特別簡捷,數(shù)學(xué)模型怎樣描述,Lingo語言就對(duì)應(yīng)地怎樣表達(dá)。首先介紹兩個(gè)簡單的Lingo程序。例4.1求解如下的線性規(guī)劃問題:maxz-72x+64xx+x<50,s.t.〈12x+8x<480,s.t.〈3x<100,1x,x>0Lingo求解程序如下max=72*x1+64*x2;x1+x2<=50;12*x1+8*x2<=480;3*x1<=100;說明:Lingo中默認(rèn)所有的變量都是非負(fù)的,在Lingo中就不需寫出對(duì)應(yīng)的約束。例4.2拋物面z=x2+j2被平面x+y+z=1截成一橢圓,求原點(diǎn)到這橢圓的最短距離。該問題可以用拉格朗日乘子法求解。下面我們把問題歸結(jié)為數(shù)學(xué)規(guī)劃模型,用Lingo軟件求解。設(shè)原點(diǎn)到橢圓上點(diǎn)(x,y,z)的距離最短,建立如下的數(shù)學(xué)規(guī)劃模型:minx2+y2+z2x+y+z=1,s.t.<z=x2+y2.Lingo求解程序如下:min=(xA2+yA2+zA2)A(1/2);x+y+z=1;z=xA2+yA2;@free(x);@free(y);說明:Lingo中默認(rèn)所有變量都是非負(fù)的,這里x,y的取值是可正可負(fù)的,所以使用Lingo函數(shù)free。例4.3求解如下的數(shù)學(xué)規(guī)劃模型:

minminx=力爐100 ii=1用Lingo求解上述數(shù)學(xué)規(guī)劃問題,使用集合和函數(shù)比較方便,使用集合的目的是為了定義向量,集合使用前,必須先定義;Lingo程序中的標(biāo)量不需要定義,直接使用即可。sets:var/1..100/:x;endsetsmin=@sqrt(@sum(var(i):x(i)A2));@sum(var(i):x(i))=1;x(100)=@sum(var(i)li#le#99:x(i)A2);@for(var(i)li#le#99:@free(x(i)));說明:如果不使用集合和函數(shù),全部使用標(biāo)量x1,x2,...,x100,最后一個(gè)約束就要寫99遍,@free(x1);...;@free(x99)。4.2Lingo軟件的界面介紹4.2.1Lingo的模型窗口囹 LirAleEditLINGOWindowHelp_d|凈I日僵l] ■型子朝昏|o|四I回國園啟囹田鑰瞄 E? 求解按鈕 Ling。Model-Lingmodel!6產(chǎn)地8銷地運(yùn)輸問題;sets:warehouses1..6/:e;vendorsi..8/:d;links(warehouses,vendors):c,x;endsets!目標(biāo)函數(shù);min?.@sum(lmks:c*x);!需求約束;@for(vendors(J):@sum(warehouses(I)-x(I,J))=d(J));!產(chǎn)量約束;@for(warehouses(I):@sum(vendors(J):!下面是數(shù)據(jù);data:—605551434152;d=3537223241324338;c=626742954953858252197433767392712395726555228143;enddataend圖4-1Lingo的模型窗口模型窗口輸入格式要求:(1) Lingo的數(shù)學(xué)規(guī)劃模型包含目標(biāo)函數(shù)、決策變量、約束條件三個(gè)要素。(2) 在Lingo程序中,每一個(gè)語句都必須要用一個(gè)英文狀態(tài)下的分號(hào)結(jié)束,一個(gè)語句可以分幾行輸入。(3) Lingo的注釋以英文狀態(tài)的!開始,必須以英文狀態(tài)下的分號(hào)結(jié)束;(4) Lingo的變量不區(qū)分字母的大小寫,必須以字母開頭,可以包含數(shù)字和下劃線,不超過32個(gè)字符,。

(5) Lingo程序中,只要定義好集合后,其他語句的順序是任意的。(6) Lingo中的函數(shù)以“@”開頭。(7) Lingo程序默認(rèn)所有的變量都是非負(fù)的。(8) Lingo程序中">或<”號(hào)與“>或<”號(hào)功能相同。2.Lingo建模時(shí)需要注意的幾個(gè)基本問題(1) 盡量使用實(shí)數(shù)變量,減少整數(shù)約束和整數(shù)變量。(2) 模型中使用的參數(shù)數(shù)量級(jí)要適當(dāng),否則會(huì)給出警告信息,可以選擇適當(dāng)?shù)膯挝桓淖兿鄬?duì)尺度。(3) 盡量使用線性模型,減少非線性約束和非線性變量的個(gè)數(shù),同時(shí)盡量少使用絕對(duì)值、符號(hào)函數(shù)、多變量求最大最小值、取整函數(shù)等非線性函數(shù)。(4) 合理設(shè)定變量上下界,盡可能給出初始值。4.2.2Lingo的求解器運(yùn)行狀態(tài)窗口Lingo12.0SolverStatus[Lingol]當(dāng)前模型類型當(dāng)前解的狀態(tài)當(dāng)前目標(biāo)函數(shù)值SolverStatus求解器狀態(tài)ModelClass: LPState: GlobalOpt變量數(shù)量VariablesTotal: 48Nonlinear: 0"?喲束數(shù)量口變量總數(shù)非線性變量數(shù)整數(shù)變量數(shù)當(dāng)前約束不滿足的總量

目前為止迭代次數(shù)Lingo12.0SolverStatus[Lingol]當(dāng)前模型類型當(dāng)前解的狀態(tài)當(dāng)前目標(biāo)函數(shù)值SolverStatus求解器狀態(tài)ModelClass: LPState: GlobalOpt變量數(shù)量VariablesTotal: 48Nonlinear: 0"?喲束數(shù)量口變量總數(shù)非線性變量數(shù)整數(shù)變量數(shù)當(dāng)前約束不滿足的總量

目前為止迭代次數(shù)使用的特殊求解程序Objective:Infeasibility:Iterations:6640擴(kuò)展求解器狀態(tài)Constraints5非零系數(shù)數(shù)聾目前可行解的最佳目標(biāo)函數(shù)值「r.目標(biāo)函數(shù)值的界沁5『特殊求解程序當(dāng)前運(yùn)行步數(shù).有效步數(shù)0b|Sound:Steps:Active:NonserasTotal:Nonlinear.內(nèi)I]約束總數(shù)非線性約束個(gè)數(shù)總數(shù)非線性系數(shù)個(gè)數(shù)的使用量……,求解花費(fèi)的時(shí)間29ElapsedRuntimeIhhcrnntss)000000圖4-2Lingo的求解器狀態(tài)窗口求解器狀態(tài)框,.- -“當(dāng)前解的狀態(tài)”有如下幾種: GlobalOptimum全局最優(yōu)解LocalOptimum 局部最優(yōu)解Feasible可行解Infeasible不可行解Unbounded無界解Interrupted中斷Undetermined未確定擴(kuò)展求解器狀態(tài)“使用的特殊求解程序”有如下幾種:B-and-B分支定界算法Global全局最優(yōu)求解程序Multistart用多個(gè)初始點(diǎn)求解的程序Lingo求解的參數(shù)設(shè)置Lingo10軟件管理的內(nèi)存最大為2G,如果你的計(jì)算機(jī)內(nèi)存是4G的話,Lingo的內(nèi)存就

設(shè)置為2G,你的計(jì)算機(jī)內(nèi)存是8G的話,也要設(shè)置成2G。Lingo內(nèi)存的設(shè)置是依次選擇菜單Lingo(第3個(gè)主菜單)一Options...一ModelGeneratoro如圖4-3所示紅色標(biāo)注的部分。-Mod旦1Kegeneration:When1tctuaiigeeorwithezcterrualref▼|AllowurirestricteduseofprimitivesetmerAsEumemodeli-Mod旦1Kegeneration:When1tctuaiigeeorwithezcterrualref▼|AllowurirestricteduseofprimitivesetmerAsEumemodelielii廠CheckforduplicatenamesindataMinimizememoryHelpCancelDefaultSaveI應(yīng)用儉)||OK圖4-3求解器Options的一些設(shè)置如果模型是非線性模型,且欲求全局最優(yōu)解,要把求解器設(shè)置成’Global”。進(jìn)入圖4-3中藍(lán)色“GlobalSolver”后,在“UseGlobalSolver”前面打上“””,設(shè)置完成后,要關(guān)閉Lingo軟件,再重新啟動(dòng)Lingo軟件。4.2.3一般線性規(guī)劃問題的影子價(jià)格與靈敏度分析如果沒有學(xué)過運(yùn)籌學(xué),本部分就不要看了。以例4-1的線性規(guī)劃模型為例。maxz-72x+64xx+x<50,s.t.〈12x+8x<s.t.〈1 23x<100,1x,x>0影子價(jià)格要進(jìn)行靈敏度分析,必須選擇如圖4-4所示的畫圈的選項(xiàng),依次選擇下列菜單Lingo—Options.??GeneralSolver下DualComputations選擇Priceso

SolutionReport-Lingo! |□l[aGlobaloptimalsolutionfound.Objectivevalue:1—1最優(yōu)目標(biāo)函數(shù)值Totalsolveriterations:3360.0000.0000002ModelClass:Totalvariables: 2Nonlinearvariables: 0Integervariables: 0Totalconstraints: 4Nonlinearconstraints: 0Totalnonzeros: 7Nonlinearnonzeros: 0VariableLPValueReducedCostXI20.000000.000000X230.000000.000000RowSlackorSurplusDualPrice目標(biāo)函數(shù)第一個(gè)約束條件l__3360.000L000000120.00000048.00000第三個(gè)約束條件L__0.0000002.0000001圖4-5靈敏度分析"0.000000/示oLingoOptions析,如圖/示oLingoOptions析,如圖4-5所從結(jié)果可知,目標(biāo)函數(shù)的最優(yōu)值為3360,決策變量七=20,%=30oreducedcost值對(duì)應(yīng)于單純形法計(jì)算過程中各變量的檢驗(yàn)數(shù)。圖3中紅色方框表示第二個(gè)約束條件,SlackorSurplus值為0表示該約束松弛變量為0,約束等號(hào)成立,為緊約束或有效約束。藍(lán)色方框表示第三個(gè)約束松弛變量為40,不等號(hào)成立,有剩余。DualPrice對(duì)應(yīng)影子價(jià)格,紅色方框表示當(dāng)?shù)谝粋€(gè)約束條件右端常數(shù)項(xiàng)增加1個(gè)單位,即由50變?yōu)?1時(shí),目標(biāo)函數(shù)值增加48,即約束條件1所代表的資源的影子價(jià)格。藍(lán)色方框表示,第三個(gè)約束條件右端常數(shù)項(xiàng)增加1個(gè)單位時(shí),目標(biāo)函數(shù)值不變。確保最優(yōu)基不變的系數(shù)變化范圍如果想要研究目標(biāo)函數(shù)的系數(shù)和約束右端常數(shù)項(xiàng)系數(shù)在什么范圍變化(假定其他系數(shù)保持不變)時(shí),最優(yōu)基保持不變。此時(shí)需要首先勾選圖4-6所示的選項(xiàng)。

NonlinearSolverGlobalSolverInterfaceGeneralSolverIntegerSolverNonlinearSolverGlobalSolverInterfaceGeneralSolverIntegerSolverSPSolverLinearSolverModelGenerator此時(shí)不需要重新運(yùn)行程序,關(guān)閉輸出窗口,從菜單命令Lingo中選中“Range”,即可得到如下輸出窗口,如圖4-7。? RangeReport-Lingo! I—H回IE|Rangesinwhichthebasisisunchanged:ObjectiveCoefficientRanges:Current AllowableAllowableVariableCoefficientIncreaseDecreaseXI72.0000024.000008.000Q00X26C000008.00000016.00000RighthandCuirrentSideRanges:AllowableAllowableRowRHSIncreaseDecrease250>0000010.000006.6666673480.000053.3333380.0000041001.0000INFINITY40.00000圖4-7靈敏度分析范圍變化輸出窗口ObjectiveCoefficientRanges一欄反映了目標(biāo)函數(shù)中決策變量的價(jià)值系數(shù),可以看到x1的系數(shù)是72,x的系數(shù)是64,說明氣要想確保當(dāng)前最優(yōu)基不變,在其他系數(shù)不變的情況下,x系數(shù)的變化范圍為(64,96),當(dāng)x的系數(shù)在這個(gè)范圍內(nèi)變化時(shí),最優(yōu)解不變,但是最優(yōu)目標(biāo)函數(shù)值發(fā)生變化,同樣,x2系數(shù)的變化范圍為(48,72)。RighthandSideRanges一欄反映了約束條件右端代表資源系數(shù)的常數(shù)項(xiàng),可見第一個(gè)約束右端常數(shù)項(xiàng)在(43.333333,60)變化時(shí),最優(yōu)基不變,但是最優(yōu)解發(fā)生變化,目標(biāo)函數(shù)值也相應(yīng)地發(fā)生變化。由于第三個(gè)約束松弛變量為40,有剩余,可見無論再如何增加該資源,只會(huì)使剩得更多,對(duì)解沒有影響,但是如果減少量超過40,就會(huì)產(chǎn)生影響。4.3Lingo軟件的基本語法4.3.1集合集合部分的語法為sets:集合名稱1/成員列表1/:屬性1_1,屬性1_2,…,屬性1_n1;集合名稱2/成員列表2/:屬性2_1,屬性2_2,…,屬性2_n2;派生集合名稱(集合名稱1,集合名稱2):屬性3_1,…,屬性3_n3;endsets例4.3sets:product/AB/;machine/MN/;week/1..2/;allowed(product,machine,week):x;endsets4.3.2數(shù)據(jù)數(shù)據(jù)部分的語法為data:屬性『數(shù)據(jù)列表;屬性2=數(shù)據(jù)列表;enddata在數(shù)據(jù)段中,=右側(cè)不能出現(xiàn)運(yùn)算,故不能出現(xiàn)分?jǐn)?shù),如3/8,這里的/表示除法運(yùn)算。4.3.3計(jì)算段計(jì)算段部分不能含有變量,必須是已知數(shù)據(jù)的運(yùn)算。calc:b=0;a=a+1;endcalc4.3.4目標(biāo)函數(shù)、約束條件和子模型目標(biāo)函數(shù)和約束條件這里就不具體給出了,下面通過具體例子給出。在LINGO9.0及更早的版本中,在每個(gè)LINGO模型窗口中只允許有一個(gè)優(yōu)化模型,可以稱為主模型(MAINMODEL)o在LINGO10.0中,每個(gè)LINGO模型窗口中除了主模型外,用戶還可以定義子模型(SUBMODEL)。子模型可以在主模型的計(jì)算段中被調(diào)用,這就進(jìn)一步增強(qiáng)了LINGO的編程能力。子模型必須包含在主模型之內(nèi),即必須位于以“MODEL:”開頭、以“END”結(jié)束的模塊內(nèi)。同一個(gè)主模型中,允許定義多個(gè)子模型,所以每個(gè)子模型本身必須命名,其基本語法是:SUBMODELmymodel:可執(zhí)行語句(約束+目標(biāo)函數(shù));ENDSUBMODEL其中mymodel是該子模型的名字,可執(zhí)行語句一般是一些約束語句,也可能包含目標(biāo)函數(shù),但不可以有自身單獨(dú)的集合段、數(shù)據(jù)段、初始段和計(jì)算段。也就是說,同一個(gè)主模型內(nèi)的變量都是全局變量,這些變量對(duì)主模型和所有子模型同樣有效。如果已經(jīng)定義了子模型mymodel,則在計(jì)算段中可以用語句“@SOLVE(mymodel);”求解這個(gè)子模型。4.4Lingo函數(shù)4.4.1算術(shù)運(yùn)算符八乘方*乘/除+加-減4.4.2邏輯運(yùn)算符在Lingo中,邏輯運(yùn)算符主要用于集循環(huán)函數(shù)的條件表達(dá)式中,來控制在函數(shù)中哪些集成員被包含,哪些被排斥。在創(chuàng)建稀疏集時(shí)用在成員資格過濾器中。Lingo具有9種邏輯運(yùn)算符#not# 否定該操作數(shù)的邏輯值,#not#是一個(gè)一元運(yùn)算符。#eq# 若兩個(gè)運(yùn)算數(shù)相等,則為true;否則為false。#ne# 若兩個(gè)運(yùn)算符不相等,則為true;否則為false。#gt# 若左邊的運(yùn)算符嚴(yán)格大于右邊的運(yùn)算符,則為true;否則為falseo#ge# 若左邊的運(yùn)算符大于或等于右邊的運(yùn)算符,則為true;否則為falseo#lt# 若左邊的運(yùn)算符嚴(yán)格小于右邊的運(yùn)算符,則為true;否則為falseo#le# 若左邊的運(yùn)算符小于或等于右邊的運(yùn)算符,則為true;否則為falseo#and# 僅當(dāng)兩個(gè)參數(shù)都為true時(shí),結(jié)果為true;否則為false。#or#僅當(dāng)兩個(gè)參數(shù)都為false時(shí),結(jié)果為false;否則為true。4.4.3關(guān)系運(yùn)算符在Lingo中,關(guān)系運(yùn)算符主要是被用在模型中來指定一個(gè)表達(dá)式的左邊是否等于、小于等于、或者大于等于右邊,形成模型的一個(gè)約束條件。關(guān)系運(yùn)算符與邏輯運(yùn)算符#eq#.#le#.#ge#截然不同,邏輯運(yùn)算符僅僅判斷一個(gè)關(guān)系是否被滿足,滿足為真,不滿足為假。Lingo有三種關(guān)系運(yùn)算符:“=”、“<=”和">=”。Lingo中還能用“<”表示小于等于關(guān)系,“>”表示大于等于關(guān)系。Lingo并不支持嚴(yán)格小于和嚴(yán)格大于關(guān)系運(yùn)算符。4.4.4數(shù)學(xué)函數(shù)Lingo提供了大量的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)@abs(x)返回x的絕對(duì)值。@sin(x)返回x的正弦值,x采用弧度制。@cos(x)返回x的余弦值。@tan(x)返回x的正切值。@exp(x)返回常數(shù)e的x次方。@log(x)返回x的自然對(duì)數(shù)。@lgm(x)返回x的gamma函數(shù)的自然對(duì)數(shù)。@mod(x,y)返回x除以y的余數(shù)。@sign(x)如果x<0返回-1;否則,返回1。@floor(x)返回x的整數(shù)部分。當(dāng)x>=0時(shí),返回不超過x的最大整數(shù);當(dāng)x<0時(shí),返回不低于x的最大整數(shù)。@smax(x1,x2,...,xn)返回x1,x2,...,xn中的最大值。@smin(x1,x2,...,xn)返回x1,x2,…,xn中的最小值。4.4.5變量界定函數(shù)變量界定函數(shù)實(shí)現(xiàn)對(duì)變量取值范圍的附加限制,共4種@bin(x)限制x為0或1;@bnd(L,x,U)限制LMxMU;@free(x)取消對(duì)變量x的默認(rèn)下界為0的限制,即x可以取任意實(shí)數(shù);@gin(x)限制x為整數(shù)。在默認(rèn)情況下,Lingo規(guī)定變量是非負(fù)的,也就是說下界為0,上界為+8。@free取消了默認(rèn)的下界為0的限制,使變量也可以取負(fù)值。@bnd用于設(shè)定一個(gè)變量的上下界,它也可以取消默認(rèn)下界為0的約束。4.4.6集循環(huán)函數(shù)@for:該函數(shù)用來產(chǎn)生對(duì)集成員的約束。@sum:該函數(shù)返回遍歷指定的集成員的一個(gè)表達(dá)式的和。@min和@max:返回指定的集成員的一個(gè)表達(dá)式的最小值或最大值。4.4.7其他函數(shù)函數(shù)@TABLE該函數(shù)以表格形式輸出與集合和集合的屬性相關(guān)的數(shù)據(jù),并且只能在數(shù)據(jù)段(DATA)中使用。目前該函數(shù)僅用于將數(shù)據(jù)輸出到結(jié)果報(bào)告窗口或文本文件中,而不能輸出到數(shù)據(jù)庫或電子表格(EXCEL)文件中。也就是說,只能輸出至@TEXT函數(shù),而不能輸出U@OLE和@ODBC函數(shù)。函數(shù)@WRITE和@WRITEFOR在LINGO10.0中,函數(shù)@WRITE和@WRITEFOR這兩個(gè)函數(shù)是為了方便用戶控制輸出格式,但它們還可以出現(xiàn)在計(jì)算段(CALC)隨時(shí)輸出中間結(jié)果,并且不需要使用@TEXT函數(shù),輸出的結(jié)果也是被定向到缺省的輸出設(shè)備(通常就是標(biāo)準(zhǔn)的報(bào)告窗口)。如果希望改變?nèi)笔〉妮敵鲈O(shè)備,可以采用@DIVERT函數(shù)。注:Lingo中矩陣數(shù)據(jù)是逐行存儲(chǔ)的,Matlab中數(shù)據(jù)是逐列存儲(chǔ)的。4.5Lingo的數(shù)據(jù)傳遞下面我們以Lingo幫助中運(yùn)輸問題的3個(gè)例程來說明Lingo軟件的數(shù)據(jù)傳遞。例4.4使用LINGO軟件計(jì)算6個(gè)產(chǎn)地8個(gè)銷地的最小費(fèi)用運(yùn)輸問題。單位商品運(yùn)價(jià)如表4-1所示。表4-1單位商品運(yùn)價(jià)表一_單位運(yùn)價(jià) 銷地^地B1B2B3B4B5B6B7B8產(chǎn)量A6267425960A24953858255A5219743351 4 7673927143 5 23957265415522814352銷量35372232413243381.數(shù)學(xué)模型設(shè)x(i=1,2,…6;j=1,2,…,8)表示產(chǎn)地A.運(yùn)到銷地B的量,C表示產(chǎn)地A.到銷地ij 1 J ij 1B的單位運(yùn)價(jià),d.表示銷地B的需求量,e.表示產(chǎn)地A的產(chǎn)量,建立如下線性規(guī)劃模型J j J i 1-8mindcx,ijiji=1j=1W一.一一£x=d,j=1,2,...,8,i=1s.t.<£x<e.,i=1,2,.,6,j=1x>0,i=1,2,...,6;j=1,2,...,8.ij2.Lingo程序(1)程序和數(shù)據(jù)放在同一個(gè)文件model:!6產(chǎn)地8銷地運(yùn)輸問題;sets:warehouses/1..6/:e;vendors/1..8/:d;links(warehouses,vendors):c,x;endsets!目標(biāo)函數(shù);min=@sum(links:c*x);!需求約束;@for(vendors(J):@sum(warehouses(I):x(I,J))=d(J));!產(chǎn)量約束;@for(warehouses(I):@sum(vendors(J):x(I,J))<=e(I));!下面是數(shù)據(jù);data:e=605551434152;d=3537223241324338;c=6267429595385822197433767392712395726555228143;enddataend(2)通過純文本文件傳遞數(shù)據(jù)使用Lingo函數(shù)@file從外部純文本文件讀入數(shù)據(jù),執(zhí)行一次@句。,輸入1個(gè)記錄,記錄之間的分隔符為?。使用Lingo函數(shù)@text把計(jì)算結(jié)果輸出到外部純文本文件中。計(jì)算的Lingo程序如下:model:sets:warehouses/1..6/:e;vendors/1..8/:d;links(warehouses,vendors):c,x;endsetsmin=@sum(links:c*x);@for(vendors(J):@sum(warehouses(I):x(I,J))=d(J));@for(warehouses(I):@sum(vendors(J):x(I,J))<=e(I));data:e=@file(sdata.txt);d=@file(sdata.txt);c=@file(sdata.txt);@text(sdata2.txt)=@table(x);!把計(jì)算結(jié)果以表格形式輸出到外部純文本文件;enddataend其中純文本數(shù)據(jù)文件sdata.txt中的數(shù)據(jù)格式如下605551434152-!~是記錄分割符,該第一個(gè)記錄是產(chǎn)量;3537223241324338-!該第二個(gè)記錄是需求量;626742954953858252197433767392712395726555228143 !最后一個(gè)記錄是單位運(yùn)價(jià);(3)通過Excel文件傳遞數(shù)據(jù)Lingo通過@OLE函數(shù)實(shí)現(xiàn)與Excel文件傳遞數(shù)據(jù),使用@OLE函數(shù)既可以從Excel文件中導(dǎo)入數(shù)據(jù),也能把計(jì)算結(jié)果寫入Excel文件。從Excel文件中導(dǎo)入數(shù)據(jù)的調(diào)用格式如下:屬性名1=@OLE(?Excel文件名,,,數(shù)據(jù)塊名稱1,);使用@OLE函數(shù)也能把計(jì)算結(jié)果寫入Excel文件,使用格式如下@OLE(?Excel文件名,,,數(shù)據(jù)塊名稱2,)=屬性名2;如數(shù)據(jù)塊名稱與屬性名相同時(shí),可以省略數(shù)據(jù)塊名稱。計(jì)算的Lingo程序如下:model:sets:warehouses/1..6/:e;vendors/1..8/:d;links(warehouses,vendors):c,x;endsetsmin=@sum(links:c*x);@for(vendors(J):@sum(warehouses(I):x(I,J))=d(J));

@for(warehouses(I):@sum(vendors(J):x(I,J))<=e(I));data:e=@ole(sdata3.xls);d=@ole(sdata3.xls);c=@ole(sdata3.xls,cc);!Excel中不允許使用域名“c”,對(duì)應(yīng)的數(shù)據(jù)塊定義成“cc@ole(sdata.xls)=x;enddataend4.6Lingo各種應(yīng)用問題舉例4.6.1線性規(guī)劃例4.5某部門在今后五年內(nèi)考慮給下列項(xiàng)目投資,已知:項(xiàng)目A,從第一年到第四年每年年初需要投資,并于次年末回收本利115%;項(xiàng)目8,從第三年初需要投資,到第五年末能回收本利125%,但規(guī)定最大投資額不超過4萬元;項(xiàng)目C,第二年初需要投資,到第五年末能回收本利140%,但規(guī)定最大投資額不超過3萬元;項(xiàng)目D,五年內(nèi)每年初可購買公債,于當(dāng)年末歸還,并加利息6%。該部門現(xiàn)有資金10萬元,問它應(yīng)如何確定給這些項(xiàng)目每年的投資額,使到第五年末擁有的資金的本利總額為最大?解用j=1,2,3,4分別表示項(xiàng)目4B,C,D,用七.(i=1,2,3,4,5)分別表示第,年年初給項(xiàng)目A,B,C,D的投資額。根據(jù)給定的條件,對(duì)于項(xiàng)目A存在變量:x,x,x,x;21 31 41對(duì)于項(xiàng)目B存在變量:x32;對(duì)于項(xiàng)目C存在的變量:x23;對(duì)于項(xiàng)目D存在變量:x,x,x,x,x,x14 24 34 44 54該部門每年應(yīng)把資金全部投出去,手中不應(yīng)當(dāng)有剩余的呆滯資金。第一年:x+x=100000.第二年初部門擁有的資金是項(xiàng)目D在第一年末回收的本利,于是第二年的投資分配為x+x+x=1.06x.TOC\o"1-5"\h\z21 23 24 14第三年初部門擁有的資金是項(xiàng)目A第一年投資及項(xiàng)目D第二年投資中回收的本利總和。于是第三年的資金分配為x+x+x=1.15x+1.06x31 32 34 11 24類似地可得第四年:x+x=1.15x+1.06x.第五年:x=1.15x+1.06x54 31 44此外,項(xiàng)目B,C的投資額限制,即x<40000,x<30000.問題是要求在第五年末該部門手中擁有的資金額達(dá)到最大,目標(biāo)函數(shù)可表示為maxz=1.15x+1.40x+1.25x+1.06x.TOC\o"1-5"\h\z綜上所述,建立如下的線性規(guī)劃模型: 54maxz=1.15x+1.40x+1.25x+1.06x,41 23 32 54s.t.x+x=100000,x+x+x=1.06x,21 23 24 14x+x+x=1.15x+1.06x,31 32 34 11 24x+x=1.15x+1.06x,x=1.15x+1.06x,x32<40000,x23<30000,X>0,i=1,2,3,4,5;j=1,2,3,4.計(jì)算的Lingo程序如下。model:sets:row/1..5/;col/1..4/;link(row,col):x;endsetsmax=1.15*x(4,1)+1.4*x(2,3)+1.25*x(3,2)+1.06*x(5,4);x(1,1)+x(1,4)=100000;x(2,1)+x(2,3)+x(2,4)=1.06*x(1,4);x(3,1)+x(3,2)+x(3,4)=1.15*x(1,1)+1.06*x(2,4);x(4,1)+x(4,4)=1.15*x(2,1)+1.06*x(3,4);x(5,4)=1.15*x(3,1)+1.06*x(4,4);x(3,2)<40000;x(2,3)<30000;end例4.6捷運(yùn)公司在下一年度的1~4月的4個(gè)月內(nèi)擬租用倉庫堆放物資。已知各月份所需倉庫面積列于表4-2。倉庫租借費(fèi)用隨合同期而定,期限越長,折扣越大,具體數(shù)字見表4-2。租借倉庫的合同每月初都可辦理,每份合同具體規(guī)定租用面積和期限。因此該公司可根據(jù)需要,在任何一個(gè)月初辦理租借合同。每次辦理時(shí)可簽一份合同,也可簽若干份租用面積和租借期限不同的合同,試確定該公司簽訂租借合同的最優(yōu)決策,目的是使所付租借費(fèi)用最小。表4-2100m2月份1234所需倉庫面積15102012合同租借期限1個(gè)月2個(gè)月3個(gè)月4個(gè)月合同期內(nèi)的租費(fèi)2800450060007300解:設(shè)變量七表示捷運(yùn)公司在第i(i=1,???,4)個(gè)月初簽訂的租借期為j(j=1,…,4)個(gè)月的倉庫面積的合同(單位為 100m2)。因5月份起該公司不需要租借倉庫,故X,X,X,X,X,X均為零。該公司希望總的租借費(fèi)用為最小,故有如下數(shù)學(xué)模型:24 33 34 42 43.44(目標(biāo)函數(shù))minz=2800(x+x+x+x)+4500(x+x+x)11 21 31 41 12 22 32+6000(氣3+如+7300X14x+x+x+x>15,TOC\o"1-5"\h\z12 13 14X +X +X +X +X +X >10,13 14 21 22 23s.t.(約束條件)<X +X +X +X +X +Xs.t.(約束條件)<14 22 23 31 32X+X+X+X>12,23 32 41x>0,i=1,—,4;j=1,—,4.這個(gè)模型中的約束條件分別表示當(dāng)月初簽訂的租借合同的面積加上該月前簽訂的未到期的合同的租借面積總和,應(yīng)不少于該月所需的倉庫面積。,=12,其它變量取值均為零,最優(yōu)值求得的最優(yōu)解為x11,=12,其它變量取值均為零,最優(yōu)值z*=118400。 11計(jì)算的Lingo程序如下:model:sets:num/1..4/:d,t,c;link(num,num):x;endsetsdata:d=15102012;t=1234;c=2800450060007300;enddatamin=@sum(link(i,j)li#le#5-j:c(j)*x(i,j));@for(num(k):@sum(link(i,j)li#le#k#and#j#ge#k+1-i:x(i,j))>d(k));@for(num(i):@for(num(j)lj#ge#6-i:x(i,j)=0));end4.6.2整數(shù)規(guī)劃例4.7求解指派矩陣C的指派問題?!?27979810666C=7171214915146610_410779這里c=(匕)5x5中的%表示第,?個(gè)人干第j項(xiàng)工作花費(fèi)的時(shí)間(單位:小時(shí))。解首先建立指派問題的0-1整數(shù)規(guī)劃模型,引進(jìn)0-1變量_[L第,?個(gè)人干第?項(xiàng)工作,x—〈j〔°,第,?個(gè)人不干第'項(xiàng)工作.建立的0-1整數(shù)規(guī)劃模型如下-5

mindcx,i=1j=1£x=1,i=1,2,—,5,j=1s.t.£x=1,j=1,2,?..,5,s.t.i=1x=。或1,i,j=1,2,—,5.利用Lingo程序求得指派問題的解為「1 2 3 4 5一2 4 5 3 1,即第1個(gè)人干第2項(xiàng)工作,第2個(gè)人干第4項(xiàng)工作,第3個(gè)人干第5項(xiàng)工作,第4個(gè)人干第3項(xiàng)工作,第5個(gè)人干第1項(xiàng)工作。計(jì)算的Lingo程序如下:model:sets:var/1..5/;link(var,var):c,x;

endsetsdata:c=1279798106667171214915146610410779;enddatamin=@sum(link:c*x);@for(var(i):@sum(var(j):x(i,j))=1);@for(var(j):@sum(var(i):x(i,j))=1);@for(link:@bin(x));end例4.8已知10個(gè)商業(yè)網(wǎng)點(diǎn)的坐標(biāo)如表4-3所示,現(xiàn)要在10個(gè)網(wǎng)點(diǎn)中選擇適當(dāng)位置設(shè)置供應(yīng)站,要求供應(yīng)站只能覆蓋10公里之內(nèi)的網(wǎng)點(diǎn),且每個(gè)供應(yīng)站最多供應(yīng)5個(gè)網(wǎng)點(diǎn),如何設(shè)置才能使供應(yīng)站的數(shù)目最小,并求最小供應(yīng)站的個(gè)數(shù)。x9.48888.792811.596011.56435.67569.84979.175613.138515.4663y5.681710.38683.92944.43259.965817.66326.151711.85698.8721表4-3商業(yè)網(wǎng)點(diǎn)的x坐標(biāo)和y坐標(biāo)數(shù)據(jù)15.546415.5868解記d.(i=1,…,10,)表示第i個(gè)營業(yè)網(wǎng)點(diǎn)與第j個(gè)營業(yè)網(wǎng)點(diǎn)之間的距離,引進(jìn)0-1變量_[1,第i個(gè)網(wǎng)點(diǎn)建立供應(yīng)站,x=〈i 〔°,第i個(gè)網(wǎng)點(diǎn)不建立供應(yīng)站._[1,第j?個(gè)網(wǎng)點(diǎn)被第i個(gè)網(wǎng)點(diǎn)的供應(yīng)站覆蓋,y-〈八j 〔0,否則建立如下的0-1整數(shù)規(guī)劃模型-寸minLxi[=1Ey^Z1,j=1,2,—,n,i=1s.t.,dy<10x.,i,j=1,2,…,n,x.>y., i,j=1,2,—,ns.t.,Ly尸5,i=1,2,—,10,j=1x.,y「=0或1,i,j=1,2,—,n.計(jì)算的Lingo程序如下model:sets:num/1..10/:x0,y0,x;link(num,num):y,d;endsetsdata:x0=9.4888 8.792811.596011.56435.67569.84979.175613.138515.466315.5464;y0=5.6817 10.38683.92944.43259.965817.66326.151711.85698.872115.5868;enddatacalc:@for(link(i,j):d(i,j)=@sqrt((x0(i)-x0(j))A2+(y0(i)-y0(j))A2));endcalcmin=@sum(num:x);@for(num(j):@sum(num(i):y(i,j))>1);@for(link(i,j):d(i,j)*y(i,j)<10*x(i));@for(link(i,j):x(i)>y(i,j));@for(num(i):@sum(num(j):y(i,j))<5);@for(num:@bin(x));@for(link:@bin(y));4.6.3非線性規(guī)劃建模時(shí)盡量建立線性規(guī)劃模型,或者把非線性規(guī)劃模型線性化。例4.9某戰(zhàn)略轟炸機(jī)隊(duì)指揮官得到了摧毀敵方坦克生產(chǎn)能力的命令。根據(jù)情報(bào),敵方有四個(gè)生產(chǎn)坦克部件的工廠,位于不同地方。只要破壞其中任一工廠的生產(chǎn)設(shè)施就可以有效地停止敵方坦克的生產(chǎn)。根據(jù)分析,執(zhí)行該任務(wù)的最大因素是汽油短缺,為此項(xiàng)任務(wù)只能提供48000加侖汽油。而對(duì)于任何一種轟炸機(jī)來說,不論去轟炸哪一個(gè)工廠都必須有足夠往返的燃料和100加侖備用燃料。該轟炸機(jī)隊(duì)現(xiàn)有重型和中型兩種轟炸機(jī),其燃油消耗量及數(shù)量見表4-4。根據(jù)情報(bào)分析,各工廠距離空軍基地的距離和摧毀目標(biāo)的概率見表4-5。表4-4燃油消耗量及數(shù)量編號(hào)飛機(jī)類型每千米耗油量飛機(jī)架數(shù)1重型1/2482中型1/332表4-5各工廠距離空軍基地的距離和摧毀目標(biāo)的概率工廠距離/km摧毀目標(biāo)的概率重型中型14500.100.0824800.200.1635400.150.1246000.250.20試問,指揮官應(yīng)向四個(gè)工廠派遣每種類型的飛機(jī)各多少架去執(zhí)行任務(wù)才能使成功的概率最大?解設(shè)x..為派遣第,型飛機(jī)去第j個(gè)工廠執(zhí)行任務(wù)的飛機(jī)數(shù)量,i=1,2,j=1,2,3,4。目標(biāo)函數(shù)我們的目標(biāo)是使至少摧毀一個(gè)工廠的概率最大。這相當(dāng)于不摧毀任何工廠的概率最小,假設(shè)用2代表這個(gè)概率,則Q=(1-0.10)xn(1-0.20)如(1-0.15)氣(1-0.25)X14?(1-0.08)^21(1-0.16)七(1-0.12)%(1-0.20)知,所以目標(biāo)函數(shù)為minQ。

約束條件記重型和中型飛機(jī)每千米的耗油量分別為a,a,重型和中型飛機(jī)的數(shù)量分別為8,b,1 2 1 2空軍基地到第j個(gè)工廠的距離為dj(j=1,2,3,4),則燃料限制為28a切dx+1008工x<48000,i jij iji=1j=1 i=1j=1飛機(jī)數(shù)量限制為8x〃少,i=1,2.j=1綜上所述,建立如下的非線性規(guī)劃模型minQ=(1-0.10)勺(1-0.20)如(1-0.15)氣(1-0.25)氣4?(1-0.08)如(1-0.16)%2(1-0.12)%(1-0.20)%4,2乙切dx+100£尤xV48000,ijij ijs.t.,i=1切x<b,i=1,2,j=1xs.t.,i=1切x<b,i=1,2,j=1x>0,且x為整數(shù).ij ij為了求解方便,可以把上述模型進(jìn)行線性化,化成如下的線性規(guī)劃模型minQ=xln(1-0.10)+xln(1-0.20)+xln(1-0.15)+xln(1-0.25)+;ln(1-0.08)+xln(1-0.16)+《ln(1-0.12)+%ln(1-0.20),21 22 23 242^a切dx.+10?!?x<48000,ijijj=1ijs.t.Si=1切x<b,i=1,2,j=1x>0,且x為整數(shù).ij iji=1j=1利用lingo程序,求得尤兇=48,%4=32。求解的Ling。程序如下model:sets:plane/1..2/:a,b;factory/1..4/:d;link(plane,factory):p,x;endsetsdata:a=0.50.3333;b=4832;p=50.250.0;enddatamin=@sum(link:x*@log(1-p));2*@sum(link(i,j):a(i)*d(j)*x(i,j))+100*@sum(link:x)<48000;@for(plane(i):@sum(factory(j):x(i,j))<b(i));@for(link:@gin(x));end例4.10 求解下列規(guī)劃問題minz=|x|+2|x|+2|x|+4|x|,12 3 4s.t.x—x—x+x=0,12 3 4x—x+x—3x=1,1W1x—x-2x+3x=—2.解一:直接用Lingo軟件求解,Lingo程序如下model:sets:row/1..3/:b;col/1..4/:c,x;link(row,col):a;endsetsdata:c=1224;b=01-0.5;a=1-1-111-11-31-1-23;enddatamin=@sum(col:c*@abs(x));@for(row(i):@sum(col(j):a(i,j)*x(j))=b(i));@for(col:@free(x));endx+|x|一|x|一x解二 先線性化,做變量變換七=i2i-0,七= ―i-0,1=1,2,3,4,記x=[x,x,x,x]t,u=[u,u,u,u]t,v=[v,v,v,v]t,|x|=[|x|,|x|,|x|,|x|]t,1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4則x=u—v,|x|=u+v,則可把模型變換為線性規(guī)劃模型minct(u+v),(A(u—v)=b,s.t.<河.TOC\o"1-5"\h\z1—1—1 11其中c=[1,2,2,4]t,b=[0,1,—-]t,A=1—1 1 —321—1—2 3求解的Lingo程序如下model:sets:row/1..3/:b;col/1..4/:c,u,v,x;link(row,col):a;endsetsdata:c=1224;b=01-0.5;a=1-1-111-11-31-1-23;enddatamin=@sum(col:c*(u+v));@for(row(i):@sum(col(j):a(i,j)*(u(j)-v(j)))=b(i));end注:(1)Lingo軟件可以自動(dòng)對(duì)帶有絕對(duì)值的數(shù)學(xué)規(guī)劃問題進(jìn)行線性化。(2)Lingo線性化時(shí),變量的個(gè)數(shù)至少擴(kuò)大為原來的4倍,約束條件也增加很多;問題規(guī)模大時(shí),可能Lingo軟件就無法求解了;如果能手工進(jìn)行線性化的話,盡量手工線性化。4.6.4非線性擬合 、 ..- 今,、 ?■一設(shè)已知3,y)的觀測值(土,y),i=1,2,…,n,要擬合一個(gè)函數(shù)y=f(x),一般都使用最小二乘準(zhǔn)則擬合,即所擬合的函數(shù)使得U(y-y)2

iiAA 1=1達(dá)到最小值,這里y=f(x),稱為最小二乘擬合。l I使用最小二乘法進(jìn)行非線性擬合時(shí),實(shí)際上是求多元函數(shù)的極值問題。Matlab在很多情形下只能求得一個(gè)局部極小值,Lingo算法比較先進(jìn),可能求得全局最優(yōu)解。a例4.11已知x,y的觀測值見表4-6。用最小二乘法擬合函數(shù)y=——ebx+c表4-6x,y的觀測值x6267425y4953858擬合的Lingo程序如下model:sets:num/1..8/:x0,y0;endsetsdata:x0=62 6 7 4 2 5 9;y0=49 5 3 8 5 8 2;enddatamin=@sum(num:(y0-a/(@exp(b*x0)+c))A2);@free(a);@free(b);@free(c);end4.6.5數(shù)據(jù)傳遞的Lingo編程例4.12用Lingo編程求解如下的線性規(guī)劃問題maxz=ctx,JAx<b"?jx>0,i=1,2,???,1000.i其中A是用Matlab生成的500x1000矩陣,其中的每個(gè)元素是[0,1〕上的均勻分布的隨機(jī)數(shù),C是相應(yīng)維數(shù)的區(qū)間[10,100]上的隨機(jī)整數(shù)列向量,b是相應(yīng)維數(shù)的區(qū)間[100,200]上的隨機(jī)整數(shù)列向量。產(chǎn)生數(shù)據(jù)并寫入純文本文件的Matlab程序:clc,clearc=randi([10,100],1000,1);a=rand(500,1000);b=randi([100,200],500,1);fid=fopen('data1.txt','w');fprintf(fid,'%4d\n',c);fprintf(fid,'%c\n','?');%繼續(xù)寫入字符‘?’fprintf(fid,'%f\n',a');%繼續(xù)寫入矩陣afprintf(fid,'%c\n','?')fprintf(fid,'%4d\n',b);fclose(fid);求解線性規(guī)劃的Lingo程序:model:sets:col/1..1000/:c,x;row/1..500/:b;link(row,col):a;endsetsdata:c=@file(data1.txt);a=@file(data1.txt);b=@file(data1.txt);enddatamax=@sum(col:c*x);@for(row(i):@sum(col(j):a(i,j)*x(j))<b(i));end4.6.6目標(biāo)規(guī)劃例4-13某市政府?dāng)M投入一筆資金和一定數(shù)量的勞動(dòng)力建設(shè)兩類公益項(xiàng)目A和B,目的是方便市民的生活,提高城市的生活質(zhì)量。根據(jù)預(yù)測投入1萬元資金和1百個(gè)勞動(dòng)力叨(即每個(gè)勞動(dòng)力用1h),分別可以建成1個(gè)項(xiàng)目A和兩個(gè)項(xiàng)目B。如果投入1個(gè)勞動(dòng)力-h需要支付10元,市政府為了用有限的資金和勞動(dòng)力,并用最快的時(shí)間建成這批項(xiàng)目,服務(wù)于社會(huì),服務(wù)于人民。市政府依次提出下面的四條要求。至少要建50個(gè)項(xiàng)目A;至多建設(shè)60個(gè)項(xiàng)目B;至少要利用80萬元資金和10000個(gè)勞動(dòng)力-h;總投入資金不超過預(yù)算120萬元。試為該市政府制定一個(gè)滿意的項(xiàng)目建設(shè)方案。解:設(shè)項(xiàng)目A,B的建設(shè)個(gè)數(shù)分別為x1,x2,各層目標(biāo)的權(quán)重分別為P.(,=1,2,3,4),建立如下的目標(biāo)規(guī)劃模型 1 2 'minpd-+pd++p(d-+d-)+pd+11 22 3 3 4 45s.t.x+d--d+=50x+d--d+=6010000x+5000x+10(100x+50x)+d--d+=800000100x+50x+d--d+=100001 2 4 410000x+5000x+10(100x+50x)+d--d+=1200000計(jì)算的Lingo程序如下。model:sets:level/1..4/:p,z,goal;variable/1..2/:x;s_con_num/1..5/:g,dplus,dminus;s_con(s_con_num,variable):a;obj(level,s_con_num)/11,22,33,34,45/:wplus,wminus;endsets

data:ctr=?;goal=???0;g=5060800000100001200000;a=100111000550010050110005500;wplus=01001;wminus=11110;enddatamin=@sum(level:p*z);p(ctr)=1;@for(level(i)|i#ne#ctr:p(i)=0);@for(level(i):z(i)=@sum(obj(i,j):wplus(i,j)*dplus(j)+wminus(i,j)*dminus(j)));@for(s_con_num(i):@sum(variable(j):a(i,j)*x(j))+dminus(i)-dplus(i)=g(i));@for(level(i)|i#lt#@size(level):@bnd(0,z(i),goal(i)));end最后求得的滿意解為氣=79,%=60。4.6.7數(shù)據(jù)包絡(luò)分析下面我們用Lingo子函數(shù)的編程來實(shí)現(xiàn)數(shù)據(jù)包絡(luò)分析的計(jì)算。1978年A.Charnes,W.W.Coo

溫馨提示

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

評(píng)論

0/150

提交評(píng)論