(完整版)lingo初級入門手冊_第1頁
(完整版)lingo初級入門手冊_第2頁
(完整版)lingo初級入門手冊_第3頁
(完整版)lingo初級入門手冊_第4頁
(完整版)lingo初級入門手冊_第5頁
已閱讀5頁,還剩122頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

LINGO軟件使用

LINGO是美國LINDO系統(tǒng)公司開發(fā)的一套專門用于求解最優(yōu)化問題的軟件.它為求解最優(yōu)化問題提供了一個平臺,主要用于求解線性規(guī)劃、非線性規(guī)劃、整數(shù)規(guī)劃、二次規(guī)劃、線性及非線性方程組等問題.它是最優(yōu)化問題的一種建模語言,包含有許多常用的函數(shù)供使用者編寫程序時調(diào)用,并提供了與其他數(shù)據(jù)文件的接口,易于方便地輸入,求解和分析大規(guī)模最優(yōu)化問題,且執(zhí)行速度快.由于它的功能較強(qiáng),所以在教學(xué)、科研、工業(yè)、商業(yè)、服務(wù)等許多領(lǐng)域得到了廣泛的應(yīng)用.目錄3.1LINGO操作界面簡介3.2LINGO模型的基本特征3.3LINGO的運算符和函數(shù)3.4LINGO軟件求解案例LINGO操作界面簡介圖1.1中最外層的窗口是LINGO軟件的主窗口(LINGO軟件的用戶界面),所有其他窗口都在這個窗口之內(nèi).主窗口有:標(biāo)題欄、菜單欄、工具欄和狀態(tài)欄.目前,狀態(tài)欄最左邊顯示的是“Ready”,表示準(zhǔn)備就緒,右下角顯示的是當(dāng)前時間,時間前面是當(dāng)前光標(biāo)的位置“Ln1,Col1”(即1行1列).將來用戶可以用選項命令(LINGO|Options|Interface菜單命令)決定是否需要顯示工具欄和狀態(tài)欄.

在Windows操作系統(tǒng)下啟動LINGO軟件,屏幕上首先顯示如圖1.1所示的窗口.圖1.1LINGO有5個主菜單:

File(文件)Edit(編輯)LINGO(LINGO系統(tǒng))Windows(窗口)Help(幫助)這些菜單的用法與Windows下其他應(yīng)用程序的標(biāo)準(zhǔn)用法類似,下面只對主菜單中LINGO系統(tǒng)的主要命令進(jìn)行簡要介紹.

LINGO系統(tǒng)(LINGO)的主菜單LINGO|Solve(Ctrl-S)

LINGO|Solve(Ctrl-S)(求解)命令對當(dāng)前模型進(jìn)行編譯并求解.如果當(dāng)前模型輸入有錯誤,編譯時將報告錯誤.求解時會顯示一個求解器運行狀態(tài)窗口

LINGO|Solution(Ctrl-O)

LINGO|Solution(Ctrl-O)(解答)命令顯示當(dāng)前解

LINGO|Range(Ctrl-R)

LINGO|Range(Ctrl-R)(靈敏度分析)命令顯示當(dāng)前解的靈敏度分析結(jié)果.(你必須在此之前求解過當(dāng)前模型)LINGO|Options(Ctrl-I)

LINGO|Options(Ctrl-I)(選項)命令將打開一個含有7個選項卡的對話框窗口,你可以通過它修改LINGO系統(tǒng)的各種控制參數(shù)和選項.修改完以后,你如果單擊“應(yīng)用”按鈕,則新的設(shè)置馬上生效;如果單擊“OK”按鈕,則新的設(shè)置馬上生效,并且同時關(guān)閉該窗口;如果單擊“Save”按鈕,則將當(dāng)前設(shè)置變?yōu)槟J(rèn)設(shè)置,下次啟動LINGO時這些設(shè)置仍然有效;如果單擊“Default”按鈕,則恢復(fù)LINGO系統(tǒng)定義的原始默認(rèn)設(shè)置;如果單擊“Cancel”按鈕將廢棄本次操作,退出對話框;單擊“Help”按鈕將顯示本對話框的幫助信息.LINGO|Generate和LINGO|Picture

LINGO|Generate和LINGO|Picture命令都是在模型窗口下才能使用,他們的功能是按照LINGO模型的完整形式分別以代數(shù)表達(dá)式形式和矩陣圖形形式顯示目標(biāo)函數(shù)和約束.LINGO|Debug(Ctrl+D)

LINGO|Debug(Ctrl+D)命令分析線性規(guī)劃無解或無界的原因,建議如何修改.LINGO|ModelStatistics(Ctrl+E)

LINGO|ModelStatistics(Ctrl+E)命令顯示當(dāng)前模型的統(tǒng)計信息.LINGO|Look(Ctrl+L)

LINGO|Look(Ctrl+L)命令顯示當(dāng)前模型的文本形式,顯示時對所有行按順序編號.圖1.2給出了工具欄的簡要功能說明.當(dāng)前光標(biāo)所在的窗口(窗口標(biāo)題欄上標(biāo)有“LINGOModel-LINGO1”),就是模型窗口(modelwindows),也就是用于輸入LINGO優(yōu)化模型(即LINGO程序)的窗口.LINGO模型的基本特征

LINGO模型(程序)從LINGO模型窗口輸入,它以語句“MODEL:”開始,以語句“END”結(jié)束.它是由一系列語句組成,每個語句都是以分號“;”結(jié)束,語句是組成LINGO模型的基本單位.每行可以寫多個語句,為了保持模型的可讀性,最好一行只寫一個語句,并且按照語句之間的嵌套關(guān)系對語句安排適當(dāng)?shù)目s進(jìn),增強(qiáng)層次感.以感嘆號“!”開始的語句是注釋語句(注釋語句也需要以分號“;”結(jié)束).LINGO模型(程序)一般由5個部分(或稱5段)組成:(1)集合段(SETS)

(2)數(shù)據(jù)段(DATA)(3)初始化段(INIT)

(4)計算段(CALC)

(5)目標(biāo)與約束段

(1)集合段(SETS)

這部分要以“SETS:”開始,以“ENDSETS”結(jié)束,作用在于定義必要的集合變量(SET)及其元素(member,含義類似于數(shù)組的下標(biāo))和屬性(attribute,含義類似于數(shù)組).格式有基本集和派生集兩種.

基本集:

Setname(集合變量名)[/member_list(元素列表)/][:attribute_list(屬性列表)];

元素列表可以全部一一列出,也可以用格式“/元素1..元素N/”列出,例如

SETS:

STUDENTS/1,2,3,4,5/:NAME,AGE;

ENDSETS

SETS:

STUDENTS/1..5/:NAME,AGE;

ENDSETS派生集:

Setname(parent_set_list(源集列表))[/member_list/][:attribute_list];

例如

SETS:

PRODUCT/AB/;

MACHINE/MN/;

WEEK/1..2/;

ALLOWED(PRODUCT,MACHINE,WEEK);

ENDSETS

列表可以用逗號“,”分開,也可以用空格分開.(

2)數(shù)據(jù)段(DATA)這部分要以“DATA:”開始,以“ENDDATA”結(jié)束,作用在于對集合的屬性(數(shù)組)輸入必要的常數(shù)數(shù)據(jù).格式為:

attribute_list(屬性列表)=value_list(常數(shù)列表);例如SETS:SET1/A,B,C/:X,Y;ENDSETSDATA:X=123;

Y=456;ENDDATA(

2)數(shù)據(jù)段(DATA)這部分要以“DATA:”開始,以“ENDDATA”結(jié)束,作用在于對集合的屬性(數(shù)組)輸入必要的常數(shù)數(shù)據(jù).格式為:

attribute_list(屬性列表)=value_list(常數(shù)列表);例如SETS:SET1/A,B,C/:X,Y;ENDSETSDATA:X=123;

Y=456;ENDDATA(3)初始化段(INIT)這部分要以“INIT:”開始,以“ENDINIT”結(jié)束,作用在于對集合的屬性(數(shù)組)給出初值.格式為:

attribute_list(屬性列表)=value_list(常數(shù)列表);

與數(shù)據(jù)段的用法類似.(4)計算段(CALC)

這部分要以“CALC:”開始,以“ENDCALC”結(jié)束,作用在于對一些原始數(shù)據(jù)進(jìn)行計算處理.因為在實際問題中,輸入的數(shù)據(jù)往往是原始數(shù)據(jù),不一定能在模型中直接使用,可以在這個段對這些原始數(shù)據(jù)進(jìn)行一定的“預(yù)處理”,得到模型中真正需要的數(shù)據(jù).在計算段中語句是順序執(zhí)行的.

(5)目標(biāo)與約束段

這部分沒有段的開始和結(jié)束標(biāo)記,作用在于給定目標(biāo)函數(shù)與約束條件.可見除這一段外,其他4個段都有明確的段標(biāo)記.這一段是模型的主要部分,其他段是為這一段服務(wù)的.其他四段可以沒有,這一段必須要有.否則不稱其為模型.這一段一般要用到LINGO的運算符和各種函數(shù).

LINGO的運算符和函數(shù)LINGO包含有大量的運算符和函數(shù),供程序(建立優(yōu)化模型)調(diào)用,其功能很強(qiáng).充分利用這些函數(shù),對解決問題將是非常方便的.下面給出部分函數(shù)及簡要功能介紹,全部函數(shù)及詳細(xì)功能說明可進(jìn)一步參考LINGO的使用手冊.一、運算符及其優(yōu)先級

二、基本的數(shù)學(xué)函數(shù)

三、集合循環(huán)函數(shù)

四、集合操作函數(shù)

五、變量定界函數(shù)六、財務(wù)會計函數(shù)七、概率中的相關(guān)函數(shù)八、文件輸入輸出函數(shù)運算符及其優(yōu)先級

LINGO的運算符有三類:算數(shù)運算符、邏輯運算符和關(guān)系運算符.1.算術(shù)運算符:

LINGO中提供了二元運算符的算術(shù)運算符有以下5種:

+(加法),-(減法或負(fù)號),*(乘法),/(除法),∧(求冪).算術(shù)運算是數(shù)與數(shù)之間的運算,運算結(jié)果仍是數(shù).2.邏輯運算符:

LINGO中的邏輯運算符有以下9種,可以分成兩類:(1)#AND#(與),#OR#(或),#NOT#(非):這三個運算是邏輯值之間的運算,也就是它們操作的對象本身必須已經(jīng)是邏輯值或邏輯表達(dá)式,計算結(jié)果也是邏輯值.(2)#EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于):這6個操作實際上是“數(shù)與數(shù)之間”的比較,也就是它們操作的對象本身必須是兩個數(shù),而邏輯表達(dá)式計算的結(jié)果是邏輯值.3.關(guān)系運算符:

LINGO中的關(guān)系運算符有以下3種:<(即<=,小于等于),=(等于),>(即>=,大于等于)這三個運算符雖然也是“數(shù)與數(shù)之間”的比較,但在LINGO中只用來表示優(yōu)化模型的約束條件,所以不是真正意義上的運算.這些運算符的優(yōu)先級如表3.1所示(同一優(yōu)先級按左到右的順序執(zhí)行;如果有括號“()”,則括號內(nèi)的表達(dá)式優(yōu)先進(jìn)行計算)

表3.1優(yōu)先級運算符最高最低#NOT#-(負(fù)號)∧*/+-(減法)#EQ##NE##GT##GE##LT##LE##AND##OR#<=>基本的數(shù)學(xué)函數(shù)

在LINGO中寫程序時可以調(diào)用大量的內(nèi)部函數(shù),這些函數(shù)以“@”符號打頭(類似調(diào)用命令).LINGO中數(shù)學(xué)函數(shù)的用法與其它語言中的數(shù)學(xué)函數(shù)的用法類似,主要有以下函數(shù):@ABS(X):絕對值函數(shù),返回X的絕對值.@COS(X):余弦函數(shù),返回X的余弦值(X的單位是弧度).@EXP(X):指數(shù)函數(shù),返回ex的值.@FLOOR(X):取整函數(shù),返回X的整數(shù)部分(向最靠近0的方向取整).@LGM(X):返回X的伽馬(Gamma)函數(shù)的自然對數(shù)值.@LOG(X):自然對數(shù)函數(shù),返回X的自然對數(shù)值.

@MOD(X,Y):模函數(shù),返回X對Y取模的結(jié)果.

@POW(X,Y):指數(shù)函數(shù),返回XY的值.

@SIGN(X):符號函數(shù),返回X的符號值(X<0時返回-1,X>=0返回1).

@SIN(X):正弦函數(shù),返回X的正弦值.

@SMAX(list):最大值函數(shù),返回列表(list)中的最大值.

@SMIN(list):最小值函數(shù),返回列表(list)中的最小值.

@SQR(X):平方函數(shù),返回X的平方值.

@SQRT(X):平方根函數(shù),返回X的正的平方根的值.

@TAN(X):正切函數(shù),返回X的正切值.集合循環(huán)函數(shù)

集合循環(huán)函數(shù)是指對集合上的元素(下標(biāo))進(jìn)行循環(huán)操作的函數(shù),主要有@FOR,@MAX,@MIN,@SUM,@PROD五種,其用法如下:@function(setname[(set_index_list)[|conditional_qualifier]]:expression_list);其中:Function是集合函數(shù)名;Setname是集合名;set_index_list是集合索引列表(不需要使用索引時可以省略);|conditional_qualifier是用邏輯表達(dá)式給出的過濾條件(無條件時可以省略);:expression_list是一個表達(dá)式(對@FOR函數(shù),可以是一組表達(dá)式).集合循環(huán)函數(shù)四個集合循環(huán)函數(shù):FOR、SUM、

MAX、MIN@function(setname[(set_index_list)[|condition]]:expression_list);[objective]MAX=@SUM(PAIRS(I,J):BENEFIT(I,J)*MATCH(I,J));@FOR(STUDENTS(I):[constraints]@SUM(PAIRS(J,K)|J#EQ#I#OR#K#EQ#I:MATCH(J,K))=1);@FOR(PAIRS(I,J):@BIN(MATCH(I,J)));MAXB=@MAX(PAIRS(I,J):BENEFIT(I,J));MINB=@MIN(PAIRS(I,J):BENEFIT(I,J));Example:

程序與數(shù)據(jù)分離文本文件使用外部數(shù)據(jù)文件Cut(orCopy)–Paste方法@FILE

輸入數(shù)據(jù)、@TEXT輸出數(shù)據(jù)(文本文件)@OLE函數(shù)與電子表格軟件(如EXCEL)連接@ODBC函數(shù)與數(shù)據(jù)庫連接LINGO命令腳本文件LG4(LONGO模型文件)LNG(LONGO模型文件)LTF(LONGO腳本文件)LDT(LONGO數(shù)據(jù)文件)LRP(LONGO報告文件)常用文件后綴@FILE和@TEXT:文本文件輸入輸出MODEL:SETS:MYSET/@FILE(‘myfile.txt’)/:@FILE(‘myfile.txt’);ENDSETSMIN=@SUM(MYSET(I):SHIP(I)*COST(I));@FOR(MYSET(I):[CON1]SHIP(I)>NEED(I);[CON2]SHIP(I)<SUPPLY(I));DATA:COST=@FILE(‘myfile.txt’);NEED=@FILE(‘myfile.txt’);SUPPLY=@FILE(‘myfile.txt’);@TEXT(‘result.txt’)=SHIP,@DUAL(SHIP),@DUAL(CON1);ENDDATAENDmyfile.txt文件的內(nèi)容、格式:Seattle,Detroit,Chicago,Denver~COST,NEED,SUPPLY,SHIP~12,28,15,20~1600,1800,1200,1000~1700,1900,1300,1100演示MyfileExample.lg4@OLE:與EXCEL連接MODEL:SETS:MYSET:COST,SHIP,NEED,SUPPLY;ENDSETSMIN=@SUM(MYSET(I):SHIP(I)*COST(I));@FOR(MYSET(I):[CON1]SHIP(I)>NEED(I);[CON2]SHIP(I)<SUPPLY(I));DATA:MYSET=@OLE('D:\JXIE\BJ2004MCM\mydata.xls','CITIES');COST,NEED,SUPPLY=@OLE(mydata.xls);@OLE(mydata.xls,'SOLUTION')=SHIP;ENDDATAEND

mydata.xls文件中必須有下列名稱(及數(shù)據(jù)):

CITIES,COST,NEED,SUPPLY,SOLUTION在EXCEL中還可以通過“宏”自動調(diào)用LINGO(略)也可以將EXCEL表格嵌入到LINGO模型中(略)演示MydataExample.lg4@ODBC:與數(shù)據(jù)庫連接輸入基本集合元素:setname/@ODBC([‘datasource’[,‘tablename’[,‘columnname’]]])/輸入派生集合元素:setname/@ODBC([‘source’[,‘table’[,‘column1’[,‘column2’…]]]])/目前支持下列DBMS:(如為其他數(shù)據(jù)庫,則需自行安裝驅(qū)動)ACCESS,DBASE,EXCEL,F(xiàn)OXPRO,ORACLE,PARADOX,SQLSERVER,TEXEFILES使用數(shù)據(jù)庫之前,數(shù)據(jù)源需要在ODBC管理器注冊輸入數(shù)據(jù):Attr_list=@ODBC([‘source’[,‘table’[,‘column1’[,‘column2’…]]]])輸出數(shù)據(jù):@ODBC([‘source’[,‘table’[,‘column1’[,‘column2’…]]]])=Attr_list具體例子略LINGO軟件求解案例MODEL:MIN=66.8*x11+75.6*x12+87*x13+58.6*x14+…+67.4*x51+71*x52+83.8*x53+62.4*x54;x11+x12+x13+x14<=1;……x41+x42+x43+x44<=1;x11+x21+x31+x41+x51=1;……x14+x24+x34+x44+x54=1;@BIN(x11);……;@BIN(x54);ENDMODEL:SETS:xb1/1..4/:;xb2/1..5/:;bl(xb1,xb2):c,x;ENDSETSMIN=@SUM(bl(i,j):c(i,j)*x(i,j));@FOR(xb1(i):@SUM(xb2(j):x(i,j))<=1);@FOR(xb2(j):@SUM(xb1(i):x(i,j))=1);@FOR(bl(I,j):@BIN(x(i,j));ENDMODEL:SETS:xb1/1..4/:;xb2/1..5/:;bl(xb1,xb2):c,x;ENDSETSMIN=@SUM(bl(i,j):c(i,j)*x(i,j));@FOR(xb1(i):@SUM(xb2(j):x(i,j))<=1);@FOR(xb2(j):@SUM(xb1(i):x(i,j))=1);@FOR(bl(I,j):@BIN(x(i,j));END一、生產(chǎn)管理問題1.問題實例某廠有5種設(shè)備A1,A2,…,A5,用來加工7種零部件B1,B2,…,B7,每種設(shè)備的數(shù)量、每種零部件的單位成本及所需各設(shè)備的加工工時(以小時計)見表1產(chǎn)品B1B2B3B4B5B6B7設(shè)備的數(shù)量成本

1006080401109030A1A2A3A4A5

0.50.7000.30.20.50.10.200.300.600.200.80000.60.050.0300.070.100.08000.0100.0500.0542311表1在其后的半年中,工廠有設(shè)備檢修計劃(停工檢修時間一個月)見表2一月二月三月四月五月六月A11臺A32臺A21臺A21臺A11臺A31臺工廠在半年中有訂單(必須按時交貨)見表3產(chǎn)品B1B2B3B4B5B6B7一月二月三月四月五月六月

2505001501504001001003002501000200150100150300002502001001001502002501000100

01002501005001500250250100300550250100表3表2每種零部件庫存最多可到100件,現(xiàn)每種零部件有庫存80件,庫存費用每件每月為0.5元,,要求到六月底每種零部件有存貨50件,每種零部件生產(chǎn)至少50件.

工廠每周工作5天,每天2班,每班8小時.

試回答如下問題:

(1)工廠如何安排各月份各種零部件的加工數(shù)量?

(2)單位成本有10%的變化,對計劃有什么影響?

(3)設(shè)備各增加1臺對計劃有什么的影響.2.模型建立設(shè):為第種零部件在第種設(shè)備上的單位加工工時;為第種設(shè)備在第月的數(shù)量;為第月第種零部件的定單數(shù)量;為第種零部件的單位成本;為第月第種零部件的生產(chǎn)數(shù)量;為第月末第種零部件的庫存數(shù)量;為初始庫存假設(shè)每月以20天計,有以下模型

3.模型求解(1)計算結(jié)果有:

目標(biāo)函數(shù):產(chǎn)品生產(chǎn)B1B2B3B4B5B6B7一月二月三月四月五月六月

1704207070320505030025010050200120701503005050250200100100150150

150100501005010025010050010050250300150350600300100產(chǎn)品庫存B1B2B3B4B5B6B7一月二月三月四月五月六月

000003030000500000050100000000005005000000505050

50

50

50

50

50(2)目標(biāo)的靈敏度分析:

ObjectiveCoefficientRanges(目標(biāo)系數(shù)的靈敏度分析)

(3)約束條件的靈敏度分析:

從以上靈敏度分析可見,提高1臺,沒有超出允許范圍的,所以對計劃沒有影響.

也可以將數(shù)據(jù)與模型分離,先準(zhǔn)備數(shù)據(jù)文件exam01.ldt:

!單耗;

0.50.70.00.00.30.20.5

0.10.20.00.30.00.60.0

0.20.00.80.00.0

0.00.6

0.050.0300.070.100.08

000.0100.0500.05~

!設(shè)備數(shù)量;

344434

221112

313332

111111

111111~

!需求;

250500150150400100100

3002501000200150100

15030000250200100

1001502002501000100

01002501005001500

250250100300550250100~

!單位成本;

1006080401109030~再寫程序如下:model:sets:cp/1..7/:c;yf/1..6/:;sb/1..5/:;sl1(yf,cp):x,d,s;sl2(sb,cp):a;sl3(sb,yf):b;

endsetsdata:a=@file('exam01.ldt');b=@file('exam01.ldt');d=@file('exam01.ldt');c=@file('exam01.ldt');

enddata

min=@sum(sl1(k,j):c(j)*x(k,j)+0.5*s(k,j));@for(yf(k):@for(sb(i):@sum(cp(j):a(i,j)*x(k,j))<=320*b(i,k)));@for(yf(k)|k#gt#1:@for(cp(j):s(k,j)=s(k-1,j)+x(k,j)-d(k,j)));@for(cp(j):s(1,j)=80+x(1,j)-d(1,j));@for(cp(j):s(6,j)=50);@for(sl1(k,j):s(k,j)<=100);@for(sl1(k,j):x(k,j)>=50);end二、下料問題1.問題實例有某種材料一根長19米.現(xiàn)需用其切割4米長毛坯50根、5米長毛坯10根、6米長毛坯20根、8米長毛坯15根.如何切割使其用料最?。恳笄懈钅J讲荒艹^3種.2.模型建立設(shè):分別表示4米長,5米長,6米長,8米長的毛坯;為第種毛坯的長度;為第種毛坯的需要量;為第種切割模式所用的材料數(shù)量;為第種切割模式切割第種毛坯的數(shù)量一種合理的切割模式應(yīng)滿足:其余料長度不應(yīng)該大于或等于需要切割毛坯的最小長度.于是有模型如下3.模型求解為了便于運算,我們先來縮小可行域.由于3種切割模式的排列順序是無關(guān)緊要的,所以不妨增加以下約束:又注意到用料的總量有明顯的上界和下界.首先,無論如何,用料總量不可能少于其次,考慮一種特殊的下料計劃:模式1:切割成4根4米鋼管,需13根;模式2:切割成1根5米和2根6米鋼管,需10根;模式3:切割成2根8米鋼管,需8根.這樣需要

13+10+8=31于是可得到解的一個上界.所以又可增加約束:利用LINGO軟件計算,輸入model:sets:needs/1..4/:a,b;cuts/1..3/:x;

patterns(needs,cuts):r;

endsetsdata:a=4568;b=50102015;

enddatamin=@sum(cuts(j):x(j));!用料目標(biāo);@for(needs(i):@sum(cuts(j):x(j)*r(i,j))>b(i));!需要量要求;@for(cuts(j):@sum(needs(i):a(i)*r(i,j))<19);!材料總長;@for(cuts(j):@sum(needs(i):a(i)*r(i,j))>16);!合理模式;@sum(cuts(j):x(j))>26;!用料下限;@sum(cuts(j):x(j))<31;!用料上限;@for(cuts(j)|j#lt#@size(cuts):x(j)>x(j+1));!人為約束;@for(cuts(j):@gin(x(j)));!整數(shù)約束;@for(patterns(i,j):@gin(r(i,j)));!整數(shù)約束;end經(jīng)過LINGO求解,得到輸出如下:Objectivevalue:28.00000VariableValueReducedCostX(1)10.000000.000000X(2)10.000002.000000X(3)8.0000001.000000R(1,1)3.0000000.000000R(1,2)2.0000000.000000R(1,3)0.0000000.000000R(2,1)0.0000000.000000R(2,2)1.0000000.000000R(2,3)0.0000000.000000R(3,1)1.0000000.000000R(3,2)1.0000000.000000R(3,3)0.0000000.000000R(4,1)0.0000000.000000R(4,2)0.0000000.000000R(4,3)2.0000000.000000即按照模式1、2、3分別切割10、10、8根材料,使用材料總根數(shù)為28根.第一種切割模式下1根材料切割3根4米的和1根6米的;第二種切割模式下1根材料切割2根4米的、1根5米的和1根6米的;第三種切割模式下1根材料切割2根8米的.三、投資組合問題1.問題實例有三種股票A,B,C,其前12年的價值每年的增長情況如表所示年份股票A股票B股票C股票指數(shù)1234567891011121.3001.1031.2160.9540.9291.0561.0381.0891.0901.0831.0351.1761.2251.2901.2160.7281.1441.1071.3211.3051.1951.3900.9281.7151.1491.2601.4190.9221.1690.9651.1331.7321.0211.1311.0061.9081.2589971.1975261.3643610.9192871.0570801.0550121.1879251.3171301.2401641.1836750.9901081.526236表中還給出了相應(yīng)年份的500種股票的價格指數(shù)的增長情況.假設(shè)目前你有一筆資金準(zhǔn)備投資這三種股票,并期望年收益率達(dá)到15%,那么你應(yīng)如何投資?2.模型建立設(shè):分別表示表示A,B,C三種股票;為第種股票的價值;為第種股票第年的價值;為指數(shù);為第年的指數(shù);為投資第種股票比例.股票指數(shù)反映的是股票市場的大勢信息,對每只股票的漲跌是有影響的.假設(shè)每只股票的收益與股票指數(shù)成線性關(guān)系.即

其中是待定系數(shù),是一個隨機(jī)誤差,其均值為方差為,此外假設(shè)隨機(jī)誤差與其他股票和股票指數(shù)都是獨立的,所以.

先根據(jù)所給數(shù)據(jù)回歸計算,即使誤差的平方和最小:可用Matlab軟件做該回歸計算,也可用LINGO軟件分別來做每只股票的回歸計算,輸入model:sets:year/1..12/:M,R,a,b,e;

endsetsdata:R=1.3001.1031.2160.9540.9291.0561.0381.0891.0901.0831.0351.176;M=1.2589971.1975261.3643610.9192871.0570801.0550121.1879251.3171301.2401641.1836750.9901081.526236;

enddatacalc:mean0=@sum(year(j):M(j))/@size(year);s20=@sum(year(j):@sqr(M(j)-mean0))/(@size(year)-1);s0=@sqrt(s20);

endcalcmin=s2;s2=@sum(year(j):@sqr(e(j)))/(@size(year)-2);s=@sqrt(s2);@for(year(j):e(j)=R(j)-a-b*M(j));@for(year(j):@free(e(j)));@free(a);@free(b);End對上面的程序,注意以下幾點:(1)只給了一種股票的價值R;(2)在CALC段直接計算了M的均值mean0和方差s20以及標(biāo)準(zhǔn)差s0(為了使這個估計是無偏估計,分母是11而不是12);(3)程序中用到平方函數(shù)@sqr和平方根函數(shù)@sqrt;(4)除了計算回歸系數(shù)外,同時估計了回歸誤差s2和標(biāo)準(zhǔn)差s,為了使這個估計是無偏估計,分母是10而不是11和12,這是因為此時已經(jīng)假設(shè)保持誤差的均值為0,所以自由度又少了一個;(5)@free(a),@free(b),@free(e)三個語句不能少,因為它們不一定是非負(fù)的;運行這個LINGO模型,結(jié)果為:

Objectivevalue:0.5748320E-02VariableValueReducedCostMEAN01.1914580.000000S200.2873661E-010.000000S00.16951880.000000S20.5748320E-020.000000S0.7581767E-010.000000A0.56397610.000000B0.44072640.000000也就是說:M的均值,方差,標(biāo)準(zhǔn)差

,對股票A,回歸系數(shù)誤差的方差,誤差的標(biāo)準(zhǔn)差.同理,可以得到:對股票B,回歸系數(shù)誤差的方差,誤差的標(biāo)準(zhǔn)差.

對股票C,回歸系數(shù),誤差的方差,誤差的標(biāo)準(zhǔn)差.于是,年投資收益為

收益的期望為

收益的方差為

進(jìn)一步,令則模型應(yīng)該為

3.模型求解利用LINGO軟件計算,輸入model:sets:stocks/1..3/:u,b,s2,x;

endsetsdata:mean0=1.191458;s20=0.02873661;s2=0.005748320,0.01564263,0.03025165;u=0.5639761,-0.2635059,-0.5809590;b=0.4407264,1.239802,1.523798;

enddatamin=s20*@sqr(y)+@sum(stocks(i):s2(i)*@sqr(x(i)));@sum(stocks(i):b(i)*x(i))=y;@sum(stocks(i):x(i))=1;@sum(stocks(i):(u(i)+b(i)*mean0)*x(i))>1.15;end運算這個LINGO模型,輸出結(jié)果如下

Objectivevalue:0.2465621E-01Y0.84534490.000000X(1)0.52660520.000000X(2)0.38064610.000000X(3)0.9274874E-010.000000根據(jù)運算結(jié)果可知:A大約占初始時刻總資產(chǎn)的53%,B占38%,C占9%.四、最小費用最大流問題1.問題實例需要將某地的天然氣通過管道輸送到另一地,中間有4個中轉(zhuǎn)站.由于輸氣管道的長短粗細(xì)不一或地質(zhì)等原因,使得每條管道上的運輸量及費用不同.下圖給出了這兩地與中轉(zhuǎn)站的連接以及管道的容量、費用:圖中括號里第一個數(shù)字是管道容量,第二個數(shù)字是管道單位運費.考慮地到地如何輸送天然氣,使得費用最小流量最大.2.模型建立設(shè):為網(wǎng)絡(luò)頂點集,為網(wǎng)絡(luò)的弧集;為弧上的流量;為弧上的單位運費;為弧上的容量;為發(fā)點處的凈流量.根據(jù)最大流的定義,我們有模型如下:3.模型求解先考慮最大流模型,LINGO軟件輸入如下model:sets:nodes/s,1,2,3,4,t/;arcs(nodes,nodes)/s,1s,21,21,32,43,23,t4,34,t/:c,f;

endsetsdata:c=8759925610;

enddatamax=flow;@for(nodes(i)|i#ne#1#and#i#ne#@size(nodes):@sum(arcs(i,j):f(i,j))-@sum(arcs(j,i):f(j,i))=0);@sum(arcs(i,j)|i#eq#1:f(i,j))=flow;@for(arcs(i,j):@bnd(0,f(i,j),c(i,j)));end計算結(jié)果如下:

Objectivevalue:

溫馨提示

  • 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

提交評論