Lingo軟件編程求解規(guī)劃問題-數(shù)學建模課件_第1頁
Lingo軟件編程求解規(guī)劃問題-數(shù)學建模課件_第2頁
Lingo軟件編程求解規(guī)劃問題-數(shù)學建模課件_第3頁
Lingo軟件編程求解規(guī)劃問題-數(shù)學建模課件_第4頁
Lingo軟件編程求解規(guī)劃問題-數(shù)學建模課件_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

用Lingo軟件編程求解規(guī)劃問題什么是規(guī)劃問題?求目標函數(shù)在約束條件下的最大值或最小值的問題,統(tǒng)稱為規(guī)劃問題。決策變量、約束條件、目標函數(shù)是線性規(guī)劃的三要素.主要解決最優(yōu)生產計劃、最優(yōu)分配、最優(yōu)設計、最優(yōu)決策、最佳管理等最優(yōu)化問題。線性規(guī)劃非線性規(guī)劃實數(shù)規(guī)劃整數(shù)規(guī)劃0-1規(guī)劃例1——加工奶制品的生產計劃獲利24元/公斤獲利16元/公斤1桶牛奶3公斤A1

12小時8小時4公斤A2

或50桶牛奶時間480小時至多加工100公斤A1

每天:一奶制品加工廠用牛奶生產A1,A2兩種奶制品,1桶牛奶可以在甲車間用12小時加工成3公斤A1,或者在乙車間用8小時加工成4公斤A2。根據市場需求,生產的A1,A2全部能售出,且每公斤A1獲利24元,每公斤A2獲利16元?,F(xiàn)在加工廠每天能得到50桶牛奶的供應,每天正式工人總的勞動時間480小時,并且甲車間每天至多能加工100公斤A1,乙車間的加工能力沒有限制。試為該廠制訂一個生產計劃,使每天獲利最大.并進一步討論以下3個附加問題:1)若用35元可以買到1桶牛奶,應否作這項投資?若投資,每天最多購買多少桶牛奶?2)若可以聘用臨時工人以增加勞動時間,付給臨時工人的工資最多是每小時幾元?3)由于市場需求變化,每公斤A1的獲利增加到30元,應否改變生產計劃?例1——加工奶制品的生產計劃求的最大值?求的最大值?用Lingo軟件求解Lingo結果中其它項的意思!更多信息例1——加工奶制品的生產計劃max=@sin(x)*2*@exp(-x);x<8;x>0;Lingo軟件LINGOHelp:

LINGOisasimpletoolforutilizingthepoweroflinearandnonlinearoptimizationtoformulatelargeproblemsconcisely,solvethem,andanalyzethesolution.Optimizationhelpsyoufindtheanswerthatyieldsthebestresult;attainsthehighestprofit,output,orhappiness;ortheonethatachievesthelowestcost,waste,ordiscomfort.Oftentheseproblemsinvolvemakingthemostefficientuseofyourresources——includingmoney,time,machinery,staff,inventory,andmore.Lingo是一個可以簡潔地闡述、解決和分析復雜問題的簡便工具。其特點是程序執(zhí)行速度很快,易于輸入、修改、求解和分析一個數(shù)學規(guī)劃問題。原則上還是lingo要快,特別是變量較多的時候,但是這里面不能比較非線性規(guī)劃,因為非線性規(guī)劃的求解速度不僅取決于問題的規(guī)模,還要看非線性程度以及初始...■簡單的模型表示LINGO可以將線性、非線性和整數(shù)問題迅速得予以公式表示,并且容易閱讀、了解和修改?!龇奖愕臄?shù)據輸入和輸出選擇LINGO建立的模型可以直接從數(shù)據庫或工作表獲取資料。同樣地,LINGO可以將求解結果直接輸出到數(shù)據庫或工作表?!鰪姶蟮那蠼庖鍸INGO內建的求解引擎有線性、非線性(convexandnonconvex)、二次、二次限制和整數(shù)最佳化?!鯩odelInteractivelyorCreateTurn-keyApplicationsLINGO提供完全互動的環(huán)境供您建立、求解和分析模型。LINGO也提供DLL和OLE界面可供使用者由撰寫的程序中呼叫。0GlobalOptimum(全局最優(yōu))1Infeasible(不可行)2Unbounded(無界)3Undetermined(不確定)4Feasible(可行)5InfeasibleorUnbounded(通常需要關閉“預處理”選項后重新求解模型,以確定模型究竟是不可行還是無界)6LocalOptimum(局部最優(yōu))7LocallyInfeasible(局部不可行,盡管可行解可能存在,但是LINGO并沒有找到一個)8Cutoff(目標函數(shù)的截斷值被達到)9NumericError(求解器因在某約束中遇到無定義的算術運算而停止)LP:線性規(guī)劃linearprogrammingQP二次規(guī)劃NLP—NON—LINEARPROGRAMMINGILP線性整數(shù)IQP二次整數(shù)PILP線性純整數(shù)PIQP二次純整數(shù)NLP非線性NLP—NON—LINEARPROGRAMMINGINLP整數(shù)非線性PINLP純整數(shù)非線性例2——軍隊供給問題corps

需求量3537223241324338擁有量

B1B2B3B4B5B6B7B8depot60A16267425955A24953858251A35219743343A47673927141A52395726552A655228143軍隊有某種先進武器302臺分別放在6個補給站(depot)中,現(xiàn)由于戰(zhàn)爭需要,8個軍團(corps)分別需要此種武器數(shù)目如表中所示,并且給出了從各補給站送一臺武器到任一軍團的費用,問如何運輸可使成本最?。縞apacity(i)V(i)demand(j)d(j)cost(i,j)c(i,j)number(i,j)n(i,j)例2——軍隊供給問題corps

需求量3537223241324338擁有量

B1B2B3B4B5B6B7B8depot60A16267425955A24953858251A35219743343A47673927141A52395726552A655228143capacity(i)V(i)demand(j)d(j)cost(i,j)c(i,j)number(i,j)n(i,j)Lingo軟件集合段(SETSENDSETS)目標與約束段數(shù)據段(DATAENDDATA)初始段(INITENDINIT)LINGO模型的構成:4個段Lingo是一個可以簡潔地闡述、解決和分析復雜問題的簡便工具。其特點是程序執(zhí)行速度很快,易于輸入、修改、求解和分析一個數(shù)學規(guī)劃問題。集部分是LINGO模型的一個可選部分。在LINGO模型中使用集之前,必須在集部分事先定義。集部分以關鍵字“sets:”開始,以“endsets”結束。一個模型可以沒有集部分,或有一個簡單的集部分,或有多個集部分。一個集部分可以放置于模型的任何地方,但是一個集及其屬性在模型約束中被引用之前必須定義了它們。Lingo軟件——基本集合元素的列舉setname[/member_list/][:attribute_list];sets:students/JohnJill,RoseMike/:sex,age;endsets一個原始集是由一些最基本的對象組成的。集、集成員和集屬性定義一個原始集,用下面的語法:setname[/member_list/][:attribute_list];注意:用“[]”表示該部分內容可選。下同,不再贅述。Setname是你選擇的來標記集的名字,最好具有較強的可讀性。集名字必須嚴格符合標準命名規(guī)則:以拉丁字母或下劃線(_)為首字符,其后由拉丁字母(A—Z)、下劃線、阿拉伯數(shù)字(0,1,…,9)組成的總長度不超過32個字符的字符串,且不區(qū)分大小寫。注意:該命名規(guī)則同樣適用于集成員名和屬性名等的命名。Member_list是集成員列表。采取顯式羅列和隱式羅列兩種方式。類型隱式列舉格式示例示例集合的元素數(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,JAN2002Lingo軟件——基本集合元素的隱式列舉集成員不放在集定義中,而在隨后的數(shù)據部分來定義。sets:students:sex,age;endsetsdata:students,sex,age=John116Jill014 Rose017 Mike113;enddataLingo軟件——派生集setname(parent_set_list)[/member_list/][:attribute_list];一個派生集是用一個或多個其它集來定義的。也就是說,它的成員來自于其它已存在的集。稠密集:派生集成員由父集成員所有組合構成;稀疏集:其成員為父集成員所有組合構成的集合的一個子集。顯式:links(depot,corps)/d1c2,d2c3,d3c6,d4c3,d5c1,d6c8/:cost,number;過濾:links(depot,corps)|capacity(&1)#ge#demand(&2):cost;派生集的成員列表有兩種方式生成:①顯式羅列;②設置成員資格過濾器。sets:product/AB/;machine/MN/;week/1..2/;allowed(product,machine,week):x;endsetsLINGO生成了三個父集的所有組合共八組作為allowed集的成員。列表如下:編號成員1(A,M,1)2

(A,M,2)3

(A,N,1)4

(A,N,2)5

(B,M,1)6

(B,M,2)7

(B,N,1)8

(B,N,2)例sets:!學生集:性別屬性sex,1表示男性,0表示女性;年齡屬性age.;students/John,Jill,Rose,Mike/:sex,age;!男學生和女學生的聯(lián)系集:友好程度屬性friend,[0,1]之間的數(shù)。;linkmf(students,students)|sex(&1)#eq#1#and#sex(&2)#eq#0:friend;!男學生和女學生的友好程度大于0.5的集;linkmf2(linkmf)|friend(&1,&2)#ge#0.5:x;endsetsdata:sex,age=116014017013;friend=0.30.50.6;enddata用豎線(|)來標記一個成員資格過濾器的開始。#eq#是邏輯運算符,用來判斷是否“相等”,可參考§4.&1可看作派生集的第1個原始父集的索引,它取遍該原始父集的所有成員;&2可看作派生集的第2個原始父集的索引,它取遍該原始父集的所有成員;&3,&4,……,以此類推。集合派生集合基本集合稀疏集合稠密集合元素列表法元素過濾法直接列舉法隱式列舉法Lingo軟件——集合setname[/member_list/][:attribute_list];setname(parent_set_list)[/member_list/][:attribute_list];Lingo軟件——數(shù)據段與初始段數(shù)據段:輸入集成員和數(shù)據,提供了模型相對靜止部分和數(shù)據分離的可能性。object_list=value_list;對象列=數(shù)值列;初始段:為決策變量設置初始值。在初始部分輸入的值僅被LINGO求解器當作初始點來用,并且僅僅對非線性模型有用。和數(shù)據部分指定變量的值不同,LINGO求解器可以自由改變初始部分初始化的變量的值。以“init:”開始,以“endinit”結束。初始部分的初始聲明規(guī)則和數(shù)據部分的數(shù)據聲明規(guī)則相同。sets:set1/A,B,C/:X,Y;endsetsdata:X,Y=142536;enddatadata:X=1,2,3;Y=4,5,6;enddata和數(shù)據部分指定變量的值不同,LINGO求解器可以自由改變初始部分初始化的變量的值。例init:X,Y=0,.1;endinitY=@log(X);X^2+Y^2<=1;優(yōu)先級運算符最高#NOT#—(負號)^*/+—(減法)#EQ##NE##GT##GE##LT##LE##AND##OR#最低<(=)=>(=)三類運算符:算術運算符邏輯運算符關系運算符Lingo軟件——運算符與優(yōu)先級主要用于集循環(huán)函數(shù)的條件表達式中形成模型的一個約束條件,指定一個表達式的左邊是否等于、小于等于、或者大于等于右邊。針對數(shù)值進行操作#not#否定該操作數(shù)的邏輯值,#not#是一個一元運算符#eq#若兩個運算數(shù)相等,則為true;否則為flase#ne#若兩個運算符不相等,則為true;否則為flase#gt#若左邊的運算符嚴格大于右邊的運算符,則為true;否則為flase#ge#若左邊的運算符大于或等于右邊的運算符,則為true;否則為flase#lt#若左邊的運算符嚴格小于右邊的運算符,則為true;否則為flase#le#若左邊的運算符小于或等于右邊的運算符,則為true;否則為flase#and#僅當兩個參數(shù)都為true時,結果為true;否則為flase#or#僅當兩個參數(shù)都為false時,結果為false;否則為trueLingo軟件——函數(shù)@abs(x)返回x的絕對值@sin(x)返回x的正弦值,x采用弧度制@cos(x)返回x的余弦值@tan(x)返回x的正切值@exp(x)返回常數(shù)e的x次方@log(x)返回x的自然對數(shù)@lgm(x)返回x的gamma函數(shù)的自然對數(shù)@sign(x)如果x<0返回-1;否則,返回1@floor(x)返回x的整數(shù)部分。當x>=0時,返回不超過x的最大整數(shù);當x<0時,返回不低于x的最大整數(shù)。@smax(x1,x2,…,xn)返回x1,x2,…,xn中的最大值@smin(x1,x2,…,xn)返回x1,x2,…,xn中的最小值數(shù)學函數(shù)Lingo軟件——函數(shù)變量定界函數(shù)@bin(x)限制x為0或1@bnd(L,x,U)限制L≤x≤U@free(x)取消對變量x的默認下界為0的限制,即x可以取任意實數(shù)@gin(x)限制x為整數(shù)@min和@max返回指定的集成員的一個表達式的最小值或最大值。@qrand(seed)產生服從(0,1)區(qū)間的擬隨機數(shù)。@qrand只允許在模型的數(shù)據部分使用,它將用擬隨機數(shù)填滿集屬性。通常,聲明一個m×n的二維表,m表示運行實驗的次數(shù),n表示每次實驗所需的隨機數(shù)的個數(shù)。在行內,隨機數(shù)是獨立分布的;在行間,隨機數(shù)是非常均勻的。這些隨機數(shù)是用“分層取樣”的方法產生的。例4.5model:data:M=4;N=2;seed=1234567;enddatasets:rows/1..M/;cols/1..N/;table(rows,cols):x;endsetsdata:X=@qrand(seed);enddataend如果沒有為函數(shù)指定種子,那么LINGO將用系統(tǒng)時間構造種子。data:N=6;enddatasets:number/1..N/:x;endsetsdata:x=5134610;enddataminv=@min(number(I)|I#le#5:x);end

輸入和輸出函數(shù)

1.@file函數(shù)該函數(shù)用從外部文件中輸入數(shù)據,可以放在模型中任何地方。該函數(shù)的語法格式為@file(’’)。這里是文件名,可以采用相對路徑和絕對路徑兩種表示方式。例以例1.2來講解@file函數(shù)的用法。注意到在例1.2的編碼中有兩處涉及到數(shù)據。第一個地方是集部分的6個warehouses集成員和8個vendors集成員;第二個地方是數(shù)據部分的capacity,demand和cost數(shù)據。為了使數(shù)據和我們的模型完全分開,我們把它們移到外部的文本文件中。修改模型代碼以便于用@file函數(shù)把數(shù)據從文本文件中拖到模型中來。修改后(修改處代碼黑體加粗)的模型代碼如下:model:!6發(fā)點8收點運輸問題;sets:warehouses/@file('1_2.txt')/:capacity;vendors/@file('1_2.txt')

/:demand;links(warehouses,vendors):cost,volume;endsets!目標函數(shù);min=@sum(links:cost*volume);!需求約束;@for(vendors(J):@sum(warehouses(I):volume(I,J))=demand(J));!產量約束;@for(warehouses(I):@sum(vendors(J):volume(I,J))<=capacity(I));

!這里是數(shù)據;data:capacity=@file('1_2.txt')

;demand=@file('1_2.txt');cost=@file('1_2.txt');enddataend模型的所有數(shù)據來自于1_2.txt文件。其內容如下:!warehouses成員;WH1WH2WH3WH4WH5WH6~

!vendors成員;V1V2V3V4V5V6V7V8~

!產量;605551434152~

!銷量;3537223241324338~

!單位運輸費用矩陣;626742594953858252197433767392712395726555228143把記錄結束標記(~)之間的數(shù)據文件部分稱為記錄。如果數(shù)據文件中沒有記錄結束標記,那么整個文件被看作單個記錄。2@text函數(shù)該函數(shù)被用在數(shù)據部分用來把解輸出至文本文件中。它可以輸出集成員和集屬性值。其語法為@text([’’])這里是文件名,可以采用相對路徑和絕對路徑兩種表示方式。如果忽略,那么數(shù)據就被輸出到標準輸出設備(大多數(shù)情形都是屏幕)。@text函數(shù)僅能出現(xiàn)在模型數(shù)據部分的一條語句的左邊,右邊是集名(用來輸出該集的所有成員名)或集屬性名(用來輸出該集屬性的值)。我們把用接口函數(shù)產生輸出的數(shù)據聲明稱為輸出操作。輸出操作僅當求解器求解完模型后才執(zhí)行,執(zhí)行次序取決于其在模型中出現(xiàn)的先后。例借用例4.12,說明@text的用法。model:sets:days/mon..sun/:required,start;endsetsdata:!每天所需的最少職員數(shù);required=20161316191412;@text('d:\out.txt')=days'至少需要的職員數(shù)為'start;enddata!最小化每周所需職員數(shù);min=@sum(days:start);@for(days(J):@sum(days(I)|I#le#5:start(@wrap(J+I+2,7)))>=required(J));end例——Lingo與Excel的連接corps

需求量3537223241324338擁有量

B1B2B3B4B5B6B7B8depot60A16267425955A24953858251A35219743343A47673927141A52395726552A655228143capacity(i)V(i)demand(j)d(j)cost(i,j)c(i,j)number(i,j)n(i,j)3、@ole函數(shù)是從EXCEL中引入或輸出數(shù)據的接口函數(shù),它是基于傳輸?shù)腛LE技術。OLE傳輸直接在內存中傳輸數(shù)據,并不借助于中間文件。例3——Lingo與Excel的連接@OLE可以同時讀集成員和集屬性(讀寫)@OLE只能讀一維或二維的Ranges絕對路徑@ole(‘data.xls’);相對路徑@ole(‘D:\data.xls’);例題求的最大值?用Lingo軟件求解Lingo結果中其它項的意思!更多信息例1——加工奶制品的生產計劃Globaloptimalsolutionfoundatiteration:3Objectivevalue:280.0000

VariableValueReducedCostDESKS2.0000000.000000TABLES0.0000005.000000CHAIRS8.0000000.000000

RowSlackorSurplusDualPrice1280.00001.000000224.000000.00000030.00000010.0000040.00000010.0000055.0000000.000000

“ReducedCost”列出最優(yōu)單純形表中判別數(shù)所在行的變量的系數(shù),表示當變量有微小變動時,目標函數(shù)的變化率。其中基變量的reducedcost值應為0,對于非基變量Xj,相應的reducedcost值表示當某個變量Xj增加一個單位時目標函數(shù)減少的量(max型問題)。本例中:變量tables對應的reducedcost值為5,表示當非基變量tables的值從0變?yōu)?時(此時假定其他非基變量保持不變,但為了滿足約束條件,基變量顯然會發(fā)生變化),最優(yōu)的目標函數(shù)值=280-5=275?!癡alue”給出最優(yōu)解中各變量的值:造2個書桌(desks),0個餐桌(tables),8個椅子(chairs)。所以desks、chairs是基變量(非0),tables是非基變量(0)。靈敏度的分析靈敏度分析的結果是Rangesinwhichthebasisisunchanged:ObjectiveCoefficientRangesCurrentAllowableAllowableVariableCoefficientIncreaseDecreaseDESKS60.0000020.000004.000000TABLES30.000005.000000INFINITYCHAIRS20.000002.5000005.000000

溫馨提示

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

評論

0/150

提交評論