最優(yōu)化模型計算三_第1頁
最優(yōu)化模型計算三_第2頁
最優(yōu)化模型計算三_第3頁
最優(yōu)化模型計算三_第4頁
最優(yōu)化模型計算三_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

通過Windows剪貼板傳遞數(shù)據(jù)

LINGO與文本文件的數(shù)據(jù)傳遞

LINGO與Excel等數(shù)據(jù)庫文件的數(shù)據(jù)傳遞

LINGO建模舉例第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞為了便于處理同一類型的實際問題,在編寫LINGO程序時應(yīng)該盡量做到程序與數(shù)據(jù)分離,這樣可以確保程序的通用性、提高可讀性第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞通過Windows剪貼板傳遞數(shù)據(jù)

有時候?qū)嶋H問題的數(shù)據(jù)在Word或Excel文件中,通常為表格形式,在編寫LINGO程序時可以通過剪貼板,將表格連同數(shù)據(jù)傳遞到LINGO中。例3.1(指派問題AssignmentProblem)設(shè)有n項工作分配給n個人去做,每人做一項。由于每個人完成各項工作所需的時間不同,設(shè)第i個人完成第j項工作需要的時間為cij(稱為效率矩陣)。問如何分配工作,使完成全部工作的總時間最少?決策變量

用0-1變量xij表示分配情況,xij=1表示指派第i個人完成第j項工作,xij=0表示不分配指派問題也稱為最優(yōu)匹配問題,是一類重要的組合優(yōu)化問題則指派問題的數(shù)學(xué)模型可以表示為第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞目標(biāo)函數(shù)

約束條件每人分配一項工作每項工作只分一人變量取整0-1限制n2變量,2n約束的線性整數(shù)規(guī)劃模型現(xiàn)有7項工作分配給7名工人去完成,他們完成各項工作所需要的時間如文件“例31.doc”中的表格所示,試作出工作分配使總時間最少。model:!7個工人,7個工作的分配問題;sets:workers/w1..w7/;jobs/j1..j7/;

links(workers,jobs):cost,x;endsetsmin=@sum(links:cost*x);!目標(biāo)函數(shù);@for(workers(I):

@sum(jobs(J):x(I,J))=1;);!每個工人只能有一份工作;@for(jobs(J):

@sum(workers(I):x(I,J))=1;);!每份工作只能有一個工人;@for(links:@bin(x));data:cost=6 2 6 7 4 2 5 4 9 5 3 8 5 8 5 2 1 9 7 4 3 7 6 7 3 9 2 7 2 3 9 5 7 2 6 5 5 2 2 8 11 4 9 2 3 12 4 5 10 ;enddataend第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞cost數(shù)據(jù)從剪貼板粘貼得到第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞點擊工具條上的按鈕,執(zhí)行程序,得到結(jié)果:

Globaloptimalsolutionfoundatiteration:14Objectivevalue:18.00000

VariableValueReducedCost

x(W1,J5)1.0000000.000000x(W2,J4)1.0000000.000000x(W3,J7)1.0000000.000000x(W4,J6)1.0000000.000000x(W5,J1)1.0000000.000000x(W6,J3)1.0000000.000000x(W7,J2)1.0000000.000000最優(yōu)解:工人1做工作5、工人2做工作4、工人3做工作7、工人4做工作6、工人5做工作1、工人6做工作3、工人7做工作2。最少工作總時間為18小時第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞LINGO與文本文件的數(shù)據(jù)傳遞LINGO與文本文件的數(shù)據(jù)傳遞,是通過LINGO的2個輸入輸出函數(shù)@file()和@text()進(jìn)行的1.函數(shù)@file的使用格式為@file(file_name);該語句可以出現(xiàn)在LINGO程序的集合段、數(shù)據(jù)段和初始段參數(shù)file_name是存放數(shù)據(jù)的文件名,文件名可以包含目錄路徑;如果不包含,則默認(rèn)在當(dāng)前目錄函數(shù)讀取的數(shù)據(jù)文件必須是純文本(ASCII碼)文件數(shù)據(jù)文件中可以包含不同的數(shù)據(jù)段,數(shù)據(jù)段之間用“~”符號分開;數(shù)據(jù)段內(nèi)的多個數(shù)據(jù)間用空格或逗號分開;數(shù)據(jù)結(jié)束時不加“;”號第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞例3.2在第一講例2運輸問題的程序中,可以用函數(shù)@file從數(shù)據(jù)文件中讀入模型的參數(shù)。程序改寫如下model: !6發(fā)點8收點運輸問題;sets:!

集合段;

wh/@file(data_file.txt)/:ai;

vd/@file(data_file.txt)/:dj;

links(wh,vd):C,X;endsetsmin=@sum(links:C*X); !目標(biāo)函數(shù);@for(vd(J):

@sum(wh(I):X(I,J))=dj(J));!需求約束;@for(wh(I):

@sum(vd(J):X(I,J))<=ai(I));!產(chǎn)量約束;data: !

數(shù)據(jù)段;

ai=@file(data_file.txt);

dj=@file(data_file.txt);C=@file(data_file.txt);enddataend第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞在當(dāng)前目錄下,有文件data_file.txt,其中內(nèi)容格式為w1,w2,w3,w4,w5,w6~v1,v2,v3,v4,v5,v6,v7,v8~605551434152~3537223241324338~626742954953858252197433767392712395726555228143第一行中的6個字符串將成為集合wh的6個成員第二行中的8個字符串將成為集合vd的8個成員第三行中的數(shù)據(jù)將成為屬性ai的初始值,第四行中的數(shù)據(jù)將成為屬性dj的初始值第五~十行的數(shù)據(jù)是屬性c的值@file函數(shù)的工作方式:模型中第一次調(diào)用@file函數(shù)時,LINGO打開數(shù)據(jù)文件,然后讀取第一個記錄;第二次調(diào)用@file函數(shù)時,LINGO讀取第二個記錄等。文件最后一條沒有記錄結(jié)束標(biāo)記,LINGO會讀取最后一條記錄,然后關(guān)閉文件。

第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞2.函數(shù)@text的使用格式為@text(file_name)=變量名;該語句一般出現(xiàn)在LINGO程序的數(shù)據(jù)段,其中file_name是純文本文件名,由用戶按自己意愿起個名字如果文件file_name不存在,則在當(dāng)前目錄下生成該文件;若存在,則其中的數(shù)據(jù)將會被覆蓋例3.3某餐廳在一周7天中需要的服務(wù)員數(shù)如下:20、16、13、16、19、14和12。假設(shè)每個服務(wù)員連續(xù)工作5天,休息2天,他們的薪水是相同的。問該餐廳至少需要雇傭多少名服務(wù)員?設(shè)周一至周日分別安排x(i)(i=1,2,…,7)個服務(wù)員開始上班,其中周一開始上班的人在周六、周日休息,以此類推。點擊工具條上的按鈕,執(zhí)行程序,得到結(jié)果:

第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞model:sets:days/mon..sun/:r,x;endsetsdata:r=20161316191412;!每天所需的最少人數(shù);@text(ex33_out.txt)=x;enddatamin=z;!最小化每周所需職員數(shù);z=@sum(days:x); n=@size(days);@for(days(I):z-x(@wrap(I+1,n))-x(@wrap(I+2,n))>=r(I));end設(shè)總?cè)藬?shù)為z,則在周一上班的人數(shù)為z-x(2)-x(3)約束條件可以表示為滿足不等式z-x(2)-x(3)r(1)建立LINGO模型如下安排方案輸出到文件Ex33_out.txt最優(yōu)安排方案:周一至周日開始上班人數(shù)分別為

8、2、0、6、3、3、0總共至少需要22名服務(wù)員第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞Globaloptimalsolutionfoundatiteration:15Objectivevalue:22.00000VariableValueReducedCostx(MON)8.0000000.000000x(TUE)2.0000000.000000x(WED)0.0000000.3333333x(THU)6.0000000.000000x(FRI)3.0000000.000000x(SAT)3.0000000.000000x(SUN)0.0000000.0000008.00000002.00000000.00000006.00000003.00000003.00000000.0000000在LINGO的當(dāng)前目錄下生成文本文件ex33_out.txt其中的數(shù)據(jù)如上所示第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞LINGO與Excel等數(shù)據(jù)庫文件的數(shù)據(jù)傳遞LINGO通過函數(shù)@OLE()實現(xiàn)與Excel文件傳遞數(shù)據(jù),函數(shù)@OLE既可以從Excel文件中導(dǎo)入數(shù)據(jù),也能將計算結(jié)果寫入Excel文件1.從Excel文件中導(dǎo)入數(shù)據(jù)@OLE函數(shù)可以出現(xiàn)在LINGO程序的集合段、數(shù)據(jù)段和初始段,從指定的Excel文件中讀取數(shù)據(jù)使用@OLE從Excel文件中導(dǎo)出數(shù)據(jù)有三種形式(1)變量名1,變量名2=@OLE(‘文件名’,‘?dāng)?shù)據(jù)塊名1’,‘?dāng)?shù)據(jù)塊名2’);文件名可以包括擴(kuò)展名(.xls),也可以包括完整的路徑目錄名稱,默認(rèn)路徑是LINGO當(dāng)前的工作目錄第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞打開的Excel文件中定義了2個數(shù)據(jù)塊,其中的數(shù)據(jù)分別用來對變量1和變量2進(jìn)行初始化如果變量名是集合,則對應(yīng)的數(shù)據(jù)塊應(yīng)該是文本格式表示的集合成員名;如果變量名是屬性,則對應(yīng)的數(shù)據(jù)塊應(yīng)當(dāng)是一系列數(shù)據(jù);進(jìn)一步,原始集合的屬性對應(yīng)的數(shù)據(jù)塊是一列數(shù)據(jù);派生集合的屬性對應(yīng)的數(shù)據(jù)塊是二維矩形數(shù)據(jù)區(qū)域(2)變量名1,變量名2=@OLE(‘文件名’,‘?dāng)?shù)據(jù)塊名’);左邊的兩個變量必須定義在同一個集合中,@OLE的參數(shù)僅指定一個數(shù)據(jù)塊名,該數(shù)據(jù)快應(yīng)包含兩列類型相同的數(shù)據(jù),第一列賦值給變量1,第二列賦值給變量2(3)變量名1,變量名2=@OLE(‘文件名’);右邊的數(shù)據(jù)文件中,沒有指定數(shù)據(jù)塊的名稱,表示默認(rèn)使用Excel文件中與變量名同名的數(shù)據(jù)塊第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞2.將計算結(jié)果導(dǎo)出到Excel文件與前面類似,將計算結(jié)果導(dǎo)出到Excel文件也有三種形式(1)@OLE(‘文件名’,‘?dāng)?shù)據(jù)塊名1’,‘?dāng)?shù)據(jù)塊名2’)=變量名1,變量名2;將兩個變量的內(nèi)容分別寫入指定Excel文件中預(yù)先定義的2個數(shù)據(jù)塊,每個數(shù)據(jù)塊的長度不能小于變量所包含的數(shù)據(jù)長度如果數(shù)據(jù)塊原來有數(shù)據(jù),則@OLE寫入語句運行后原來的數(shù)據(jù)將被新的數(shù)據(jù)覆蓋(2)@OLE(‘文件名’,‘?dāng)?shù)據(jù)塊名’)=變量名1,變量名2;將兩個變量的內(nèi)容寫入指定Excel文件中預(yù)先定義的同一數(shù)據(jù)塊(有2列)(3)@OLE(‘文件名’)=變量名1,變量名2;不指定數(shù)據(jù)塊名稱,默認(rèn)使用指定Excel文件中、與變量名同名的數(shù)據(jù)塊第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞例3.4(投資組合問題)設(shè)研究美國某三種股票A、B、C,在從1943年~1954年的12年的投資收益率如下表所示,表中還附有各年度500種股票的指數(shù)供參考。如果你在1955年有一筆資金計劃投資這三種股票,希望年收益率達(dá)到1.15。試給出風(fēng)險最小的投資組合。收益率=(本金+收益)/本金第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞設(shè)投資三種股票的資金比例分別為xi

(i=1,2,3)滿足約束條件分析投資的年收益率其中Ri是第i種股票的年收益率,它是隨機變量.用每種股票12年的平均收益率代表該股票年收益率的數(shù)學(xué)期望E(Ri).則Y的數(shù)學(xué)期望為投資者希望年收益率達(dá)1.15,則構(gòu)造約束Markowitz用收益率的方差來衡量投資的風(fēng)險,即方差越大風(fēng)險越大,越小風(fēng)險越小第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞投資者年收益率Y的方差建立投資組合的Markowitz模型目標(biāo)函數(shù)約束條件Markowitz模型是一個二次規(guī)劃模型均值和協(xié)方差矩陣的計算可以在Excel中完成,然后通過@OEL函數(shù)傳遞給LINGO程序第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞利用股票A、B、C的數(shù)據(jù)建立Excel文件“投資組合.xls”,通過計算構(gòu)造COV數(shù)據(jù)塊,存放協(xié)方差矩陣;MEAN數(shù)據(jù)塊,存放三種股票的平均收益率;暫時空的“投資份額”數(shù)據(jù)塊左圖中,從A2-C13的矩形區(qū)域中的數(shù)據(jù)為股票A、B、C的收益率數(shù)據(jù);A16-C16區(qū)域(MEAN數(shù)據(jù)塊)為平均收益率;E4-E6(“投資份額”數(shù)據(jù)塊)為空上圖中,從B2-D4的矩形區(qū)域構(gòu)成COV數(shù)據(jù)塊第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞建立LINGO模型如下model:sets:stocks/A,B,C/:Mean,X;

stst(stocks,stocks):Cov;endsetsdata:Mean=@OLE(‘投資組合’,’MEAN’);!平均收益率;

Cov=@OLE(‘投資組合’,’COV’);!協(xié)方差矩陣;@OLE(‘投資組合’,‘投資份額’)=X;enddatamin=@sum(stst(i,j):Cov(i,j)*X(i)*X(j));@sum(stocks:X)=1;@sum(stocks:X*Mean)>=1.15;end第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞Localoptimalsolutionfoundatiteration:14Objectivevalue:0.2054596E-01VariableValueReducedCostMEAN(A)1.0890830.000000MEAN(B)1.2136670.000000MEAN(C)1.2345830.000000X(A)0.53009160.000000X(B)0.35641490.000000X(C)0.11349350.000000三種股票的投資份額分別為0.5300916,0.3564149,0.1134935在Excel文件“投資組合.xls”中,“投資份額”數(shù)據(jù)塊已經(jīng)不再是空白了,而是寫入了數(shù)據(jù)Localoptimalsolutionfoundatiteration:14Objectivevalue:0.2054596E-01ExportSummaryReportTransferMethod:OLEBASEDSpreadsheet:投資組合

RangesSpecified:1

投資份額

RangesFound:1RangeSizeMismatches:0ValuesTransferred:3VariableValueReducedCostX(A)0.53009160.000000X(B)0.35641490.000000X(C)0.11349350.000000第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞第三講LINGO軟件與外部文件的數(shù)據(jù)傳遞@ODBC

:與數(shù)據(jù)庫連接輸入基本集合元素:集合名/@ODBC(‘?dāng)?shù)據(jù)源名’,‘?dāng)?shù)據(jù)表名’,‘列名’)/:屬性名;輸入派生集合元素:集合名/@ODBC(‘?dāng)?shù)據(jù)源名’,‘?dāng)?shù)據(jù)表名’,‘列名1’,‘列名2’,…)/:屬性名;目前支持下列DBMS:(如為其他數(shù)據(jù)庫,則需自行安裝驅(qū)動)ACCESS,DBASE,EXCEL,F(xiàn)

溫馨提示

  • 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

提交評論