Lingo超經(jīng)典案例大全_第1頁
Lingo超經(jīng)典案例大全_第2頁
Lingo超經(jīng)典案例大全_第3頁
Lingo超經(jīng)典案例大全_第4頁
Lingo超經(jīng)典案例大全_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Lingo超經(jīng)典案例大全LINGO>LinearInteractiveandGeneralOptimizer的縮寫,即“交互式的線性和通用優(yōu)化求解器"。Lingo超強(qiáng)的優(yōu)化計算能力在很多方面(線性規(guī)劃、非線性規(guī)劃、線性整數(shù)規(guī)劃、非線性整數(shù)規(guī)劃、非線性混合規(guī)劃、二次規(guī)劃等)比matlab、maple等強(qiáng)得多,Lingo編程簡潔明了,數(shù)學(xué)模型不用做大的改動(或者不用改動)便可以直接采用Lingo語言編程,十分直觀。Lingo模型由4個段構(gòu)成:(1)集合段(setsendsets);(2)數(shù)據(jù)段(dataenddata);(3)初始段(initendinit);(4)目標(biāo)與約束段。L

2、ingo的五大優(yōu)點(diǎn):1 .對大規(guī)模數(shù)學(xué)規(guī)劃,LINGO語言所建模型較簡潔,語句不多;2 .模型易于擴(kuò)展,因?yàn)镕ORSU陲語句并沒有指定循環(huán)或求和的上下限,如果在集合定義部分增加集合成員的個數(shù),則循環(huán)或求和自然擴(kuò)展,不需要改動目標(biāo)函數(shù)和約束條件;3 .數(shù)據(jù)初始化部分與其它部分語句分開,對同一模型用不同數(shù)據(jù)來計算時,只需改動數(shù)據(jù)部分即可,其它語句不變;4 .“集合”是LINGO有特色的概念,它把實(shí)際問題中的事物與數(shù)學(xué)變量及常量聯(lián)系起來,是實(shí)際問題到數(shù)學(xué)量的抽象,它比C語言中的數(shù)組用途更為廣泛。5 .使用了集合以及FORSU陲集合操作函數(shù)以后可以用簡潔的語句表達(dá)出常見的規(guī)劃模型中的目標(biāo)函數(shù)和約束條件

3、,即使模型有大量決策變量和大量數(shù)據(jù),組成模型的語句并不隨之增加.一、求解線性整數(shù)規(guī)劃、非線性整數(shù)規(guī)劃問題:1.線性整數(shù)規(guī)劃:model:max=x1+x2;x1+9/14*x2<=51/14;-2*x1+x2<=1/3;gin(x1);gin(x2);end求得x1=3,x2=1,最大值為4.運(yùn)用matlab求時可以發(fā)現(xiàn)有兩組解:x1=3,x2=1和x1=2,x2=2。通過驗(yàn)證也可知這兩組解均滿足。Lingo的一個缺陷是:每次只能輸出最優(yōu)解中的一個(有時不只一個)。那么,怎樣求得其他解呢?一個辦法是將求得的解作為約束條件,約束x1不等于3,x2不等于1,再求解。如下:model:m

4、ax=x1+x2;x1+9/14*x2<=51/14;-2*x1+x2<=1/3;gin(x1);gin(x2);abs(x1-3)>abs(x2-1)>end求得x1=2,x2=2.若再次排除這組解,發(fā)現(xiàn)Lingo解不出第三組解了,這時我們可以斷定:此優(yōu)化模型有兩組解:x1=3,x2=1和x1=2,x2=2.求解模型時需注意:Lingo中,默認(rèn)變量均為非負(fù);輸出的解可能是最優(yōu)解中的一組,要判斷、檢驗(yàn)是否還有其他解(根據(jù)具體問題的解的情況或用排除已知最優(yōu)解的約束條件法)。2、非線性整數(shù)規(guī)劃:model:sets:row/1.4/:b;col/1.5/:c1,c2,x;l

5、ink(row,col):a;endsetsdata:c1=1,1,3,4,2;c2=-8,-2,-3,-1,-2;a=111111221600115;b=400,800,200,200;enddatamax=sum(col:c1*xA2+c2*x);for(row(i):sum(col(j):a(i,j)*x(j)<b(i);for(col:gin(x);for(col:bnd(0,x,99);End求得:x1=50,x2=99,x3=0,x4=99,x5=20.最大值為51568。這里,我們看不出是否還有其他解,需要將已知的最優(yōu)解排除掉。最大值為50330。最大值為49037。最大值

6、為47859。最大值為46636。利用1的方法分別可得到其他解:x1=48,x2=98,x3=1,x4=98,x5=19.x1=45,x2=97,x3=2,x4=97,x5=18.x1=43,x2=96,x3=3,x4=96,x5=17.x1=40,x2=95,x3=4,x4=95,x5=16.發(fā)現(xiàn)x1,x2,x4,x5均單調(diào)減少,x3單調(diào)增加。最大值越來越小??梢院唵闻袛嗟谝唤M為最優(yōu)的。當(dāng)然,能夠一一檢驗(yàn)最好。二、最優(yōu)選擇問題某鉆井隊(duì)要從10個可供選擇的井位中確定5個鉆井探油,使總的鉆探費(fèi)用為最小。若10個井位的代號為s1,s2,s10,相應(yīng)的鉆探費(fèi)用c1,c2,c10為5,8,10,6,9

7、,5,7,6,10,8.并且井位選擇上要滿足下列限制條件:(1) 或選擇s1和s7,或選擇鉆探s9;(2) 選擇了s3或s4就不能選s5,或反過來也一樣;(3) 在s5,s6,s7,s8中最多只能選兩個.試建立這個問題的整數(shù)規(guī)劃模型,確定選擇的井位。取0-1變量s_i,若s_i=1,則表示選取第i個井,若s_i=0,則表示不選取第i個井。建立數(shù)學(xué)模型如下:model:sets:variables/1.10/:s,cost;endsetsdata:cost=581069576108;enddatamin=sum(variables:cost*s);(s(1)+s(7)-2)*(s(9)-1)=0

8、;s(3)*s(5)+s(4)*s(5)=0;sum(variables(i)|i#ge#5#and#i#le#8:s(i)<=2;sum(variables:s)=5;for(variables:bin(s);end求得:Totalsolveriterations:26ValVariableueReducedCostS(1)S(2)S(3)S(4)S(5)S(6)S(7)S(9)S(10)Objectivevalue:即選擇井S1,S2,S4,S6,S7以達(dá)到最小費(fèi)用31.三、路徑和最短問題:設(shè)平面上有N個點(diǎn),求一點(diǎn),使得這個點(diǎn)到所有點(diǎn)距離之和最小。這里,取N=8。數(shù)據(jù)點(diǎn)是15的隨機(jī)數(shù)

9、。Lingo:model:sets:position/1.8/:x,y;ab/1/:a,b;endsetsdata:text('E:work')=x,y;!讀入到matlab的工作空間中;text('E:work')=a,b;enddatax(1)=1+4*rand;y(1)=1+4*rand;for(position(i)|i#ge#2:x(i)=1+4*rand(x(i-1);!隨機(jī)產(chǎn)生15中的8個點(diǎn);for(position(i)|i#ge#2:y(i)=1+4*rand(y(i-1);objmin=sum(position(i):sqrt(x(i)-a(

10、1)A2+(y(i)-b(1)A2);!目標(biāo)函數(shù);bnd(1,a(1),5);bnd(1,b(1),5);endmatlab:clear;clc;closeall;load。');load。');holdon;plot(data1(1),data1(2),'o','MarkerSize',15,'MarkerFaceColor','r');plot(data(:,1),data(:,2),or','MarkerSize',15,'MarkerFaceColor','b

11、');set(gcf,'Color','w');set(gca,'FontSize',16)gridoff;data1=repmat(data1,8,1);P=data1(:,1)'data(:,1)'Q=data1(:,2)'data(:,2)'plot(P,Q,'g','LineWidth',2);xlabel('x');ylabel('y');title('Solvingtheproblemoftheminimundistance

12、oftnesumofallthebluepointstowardsthebeingknownredpoint.');gtext('Theminimundistanceis',num2str,'.','FontSize',16,'Color','r');三、運(yùn)輸+選址問題:某公司有6個建筑工地,位置坐標(biāo)為(ai,bi)(i125abd356單位:公里),水泥日用量di(單位:噸)346354711現(xiàn)有2料場,位于A(5,1),B(2,7),記(xj,yj),j=1,2,日儲量ej各有20噸。假設(shè)料場和工地之間

13、有直線道路,制定每天的供應(yīng)計劃,即從A,B兩料場分別向各工地運(yùn)送多少噸水泥,使總的噸公里數(shù)最小。取決策變量c_ij表示i工地從j料場運(yùn)來的水泥量。模型(線性模型)為:model:sets:demand/1.6/:a,b,d;supply/1.2/:x,y,e;link(demand,supply):c;endsetsdata:a=3;b=5;d=3547611;x=52;y=i7;e=2020;enddataobjmin=sum(link(i,j):c(i,j)*sqrt(a(i)-x(j)A2+(b(i)-yO)A2);!目標(biāo)函數(shù);for(demand(i):sum(supply(j):c(

14、i,j)尸d(i);for(supply(j):sum(demand(i):c(i,j)<=e(j);end求得:C(1,1)C(1,2)C(2,1)C(2,2)C(3,1)C(3,2)C(4,1)C(4,2)C(5,1)C(5,2)C(6,1)C(6,2)Objectivevalue:(2) 改建兩個新料場,需要確定新料場位置(xj,yj)和運(yùn)量cij,在其它條件不變下使總噸公里數(shù)最小。模型一樣,未知量變?yōu)榱蠄鑫恢?xj,yj)和運(yùn)量cij,變?yōu)榉蔷€性優(yōu)化問題。model:sets:demand/1.6/:a,b,d;supply/1.2/:x,y,e;link(demand,supp

15、ly):c;endsetsdata:a=3;b=5;d=3547611;e=2020;enddatainit:x=52;y=17;endinitobjmin=sum(link(i,j):c(i,j)*sqrt(a(i)-x(j)A2+(b(i)-y(j)A2);!目標(biāo)函數(shù);for(demand(i):sum(supply(j):c(i,j)尸d(i);for(supply(j):sum(demand(i):c(i,j)<=e(j);for(supply:free(x);free(y);end求得:C(1,1)C(1,2)C(2,1)C(2,2)C(3,1)C(3,2)C(4,1)C(4,

16、2)C(5,1)C(5,2)C(6,1)C(6,2)(x1,y1)=(,)(x2,y2)=(,)Objectivevalue:四、路徑最短問題:如上圖,求從S到T的最短路徑。設(shè)d(x,y):城市x與城市y之間的直線距離;L(x):城市S到城市x的最優(yōu)行駛路線的路長。模型為:minL(x)+d(x,y)L(S)=0model:sets:city/S,A1,A2,A3,B1,B2,C1,C2,T/:L;road(city,city)/S,A1S,A2S,A3A1,B1A1,B2A2,B1A2,B2A3,B1A3,B2B1,C1B1,C2B2,C1B2,C2C1,TC2,T/:d;endsetsda

17、ta:d=633658674678956;L=0,6,3,3,;enddatafor(cityO)|j#gt#index(city,S):L(j)=min(road(i,j):L(i)+d(i,j);end求得最短路徑為20.五、指派問題(0-1規(guī)劃問題):四個人完成4項(xiàng)任務(wù)所用的時間如下,問如何指派任務(wù)使得完成所有任務(wù)的時間最短?任務(wù)t1t2t3t4人員m1215134m21041415m39141613m478119c_ij:表示第i個人完成第j項(xiàng)任務(wù)所用的時間;決策變量x_ij:若第i個人選擇第j項(xiàng)任務(wù)則x_ij=1;否則,x_ij=0;模型為:model:sets:task/1.4/:

18、t;man/1.4/:m;link(man,task):c,x;endsetsdata:1041415914161378119;enddataobjmin=sum(link:c*x);for(task(j):sum(man(i):x(i,j)=1);for(man(i):sum(task(j):x(i,j)=1);for(link:bin(x);end求得:最優(yōu)指派為:m1-t4,m2-t2,m3-t1,m4-t3最優(yōu)值為:28。六、裝配線平衡模型(0-1規(guī)劃問題)11件任務(wù)(AK)分配到4個工作站(14),任務(wù)的優(yōu)先次序如下圖,每件任務(wù)所花費(fèi)的時間如下表。目標(biāo)是為每個工作站分配加工任務(wù),盡可

19、能使每個工作站執(zhí)行相同的任務(wù)量,其最終裝配線周期最短。任務(wù)ABCDEFGHI時間4511950151212121289T(i):為完成第i項(xiàng)任務(wù)需要的時間。SETS:TASK/ABCDEFGHIJK/:T;!任務(wù)集合,有一個完成時間屬性T;PRED(TASK,TASK)/A,BB,CC,FC,GF,JG,JJ,KD,EE,HE,IH,JI,J/;!任務(wù)之間的優(yōu)先關(guān)系集合(A必須完成才能開始B,等等);STATION/1.4/;!工作站集合;TXS(TASK,STATION):X;!X是派生集合TXS的一個屬性。如果X(I,K=1,則表示第I個任務(wù)指派給第K個工作站完成;ENDSETSDATA:

20、T=4511950151212121289;!任務(wù)ABCDEFGHIJK的完成時間;ENDDATAFOR(TASK(I):SUM(STATION(K):X(I,K)=1);!每一個作業(yè)必須指派到一個工作站;FOR(PRED(I,J):SUM(STATION(K):X(I,K)-SUM(STATION(K):X(J,K)>=0);!對于每一個存在優(yōu)先關(guān)系的作業(yè)對(I,J)來說,I先J后安排;FOR(STATION(K):SUM(TXS(I,K):T(I)*X(I,K)<=CYCTIME);!對于每一個工作站來說,其花費(fèi)時間必須不大于裝配線周期;MIN=CYCTIME;!目標(biāo)函數(shù)是最小

21、化轉(zhuǎn)配線周期;FOR(TXS:BIN(X);!指定X(I,J)為0/1變量;END解得最短周期為50.分配情況為:A-1,B-3,C-4,D-2,E-3,F-4,G-4,H-3,I-3,J-4,K-4.七、選址問題某海島上有12個主要的居民點(diǎn),每個居民點(diǎn)的位置(用平面坐標(biāo)x,y表示,距離單位:km)和居住的人數(shù)(r)如下表所示?,F(xiàn)在準(zhǔn)備在海島上建一個服務(wù)中心為居民提供各種服務(wù),那么服務(wù)中心應(yīng)該建在何處?x0y0r6001000800140012007006008001000120010001100設(shè)建在(a,b)處最合理。建立模型:MODEL:SETS:VAR/1.12/:X,Y,R;ENDS

22、ETSDATA:X=0;Y=0;R=6001000800140012007006008001000120010001100;ENDDATAMIN=SUM(VAR:SQRT(X-A)A2+(Y-BF2)*R;END求得:(a,b尸,,最小值為:。八、婚配問題:10對年齡相當(dāng)?shù)那嗄?,任意一又男女青年配對的概率pij見下表。試給出一個配對方案,使總的配對概率最大。w1w2w3w4w5w6w7w8w9w10mlm2m3m4m5m6m7m8m9m10取xx_ij為0-1型決策變量。模型為:model:sets:man/m1.m10/;woman/w1.w10/;link(man,woman):p,x;e

23、ndsetsdata:P=enddatamax=prod(man(i):sum(woman(j):p(i,j)*x(i,j);for(woman(j):sum(link(i,j):x(i,j)=1);for(man(i):sum(link(i,j):x(i,j)=1);for(link:bin(x);end求解結(jié)果:m1-w5,m2-w8,m3-w2,m4-w4,m5-w7,m6-w3,m7-w6,m8-w1,m9-w9,m10-w10.最大值為.九、護(hù)士值班安排問題某醫(yī)院,從周一到周日都要有人值班,每天至少需要的護(hù)士如表。要求每個護(hù)士每周連續(xù)上班5天,試問該醫(yī)院至少需要多少護(hù)士?并給出上班安

24、排計劃。周1234567人20161316191412取決策變量star(i):周i開始值班的人數(shù);目標(biāo)函數(shù):minsumstar(i)(i=1,2,3,7)約束條件:連續(xù)工作五天,周j值班的人數(shù)=required(j)(j=1,2,3,7)model:sets:days/mon.sun/:required,start;endsetsdata:!每天所需的最少職員數(shù);required=20161316191412;enddatamin=sum(days:start);for(days(J):sum(days(I)|I#le#5:start(wrap(J+2+I,7)>=required(

25、J);end解得:總共需要22人,周一8人開始值班,周二2人,周三0人,周四6人,周五3人,周六3人,周日0人。十、填數(shù)問題分別把1,2,16填到圖示的16個圈內(nèi),使得每個三角形上的所有圈內(nèi)的數(shù)的和為81(共4個三角形)。決策變量:e_ij=1,第i個圈填數(shù)a_j;e_ij=0,第i個圈不填數(shù)a_j。a_j=j,j=1,2,3,,16,模型:model:sets:number/1.16/:a;link(number,number):e;tri1(number)/123456789/;tri2(number)/12341615121110/;tri3(number)/45671413121516

26、/;tri4(number)/78911011121314/;endsetsdata:a=12345678910111213141516;enddataobjmax=sum(link(i,j):e(i,j)*a(j);for(number(i):sum(link(i,j):e(i,j)=1);for(number(j):sum(link(i,j):e(i,j)=1);for(link(i,j):bin(e(i,j);sum(number(j):sum(tri1(i):e(i,j)*a(j)=81;sum(number(j):sum(tri2(i):e(i,j)*a(j)=81;sum(number(j):sum(tri3(i):e(i,j)*a(j)=81;sum(number(j):sum(tri4(i):e(i,j)*a(j)=81;sum(link(i,j):e(i,j)*a(j)=136;end紅色的那句程序可以去掉,也可以為:min=sum(link(i,j):e(i,j)*a(j),但求的結(jié)果不同,結(jié)果都符合要求。編號116的圓圈的填數(shù)結(jié)果至少有3種:(1) 12111107814135941626153(2) 14351587134126111092161(3) 14114159813251631012617為了求

溫馨提示

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

最新文檔

評論

0/150

提交評論