LINGO大規(guī)模規(guī)劃求解_第1頁
LINGO大規(guī)模規(guī)劃求解_第2頁
LINGO大規(guī)模規(guī)劃求解_第3頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、lingo大規(guī)模規(guī)劃求解首先,讓我們先看看一個(gè)非常簡單的規(guī)劃例子在LINGO軟件中實(shí)現(xiàn)過程:目標(biāo)函數(shù):?(?2?+?-3?+5約束條件:?+?-3?<10?-2?>5?,?求解上面目標(biāo)函數(shù)的最小值,我們在ling。中可編寫如下代碼:model:MIN=2*X1+X2-3*X3+5;X1+X2-3*X3<=10;X1-2*X2>=5GIN(X1);!整數(shù)約束;GIN(X2);GIN(X3);END可以看出,LINGO語舌和數(shù)學(xué)專業(yè)語言'很接近,很容易表小約束條件和目標(biāo)函數(shù)可是對于規(guī)模很大的約束條件,難道我們也必須這樣一條一條的輸入嗎,顯然這樣做是一件非常困難和繁瑣

2、的事,lingo語言乂是如何表示約束條件規(guī)模巨大的規(guī)劃問題呢,帶著這樣的疑問,讓我們一步一步得看下面的內(nèi)容:一、集合域在數(shù)學(xué)中集合的定義如下:集合:具有某種相同屆性的對象放在一起,就形成了一個(gè)集合,集合中的每一個(gè)對象稱作該集合的元素。在大規(guī)模的優(yōu)化問題中,集合是必然存在的,比如在平板車建模中,各種規(guī)格集裝箱就可以看成一個(gè)集合,在貨物配送問題中154個(gè)城市可以看成一個(gè)集合。在lingo語言中,將某些對象看成一個(gè)集合便可以很方便地對集合中的每一個(gè)元素進(jìn)行統(tǒng)一處理。集合域必須在模型的約束引用集合之前定義。集合域用關(guān)鍵字“sets”開始,“endsets”結(jié)束。集合分類:元素列表法元素過濾法直接列舉法

3、隱式列舉法基本集合定義統(tǒng)一語法格式:setname/member-list/:attribute-list;集合名/對象名1對象名2對象名n/:對象屆性;集合定義的幾種方法類型隱式列舉格式示例示例集合表示的元素?cái)?shù)字型1n15I.L34,5字符-數(shù)字犁stTiTigM.stringNcart0l.cu20ftcarlO1enrH)2.car2f!J<日期(星期)型dayM.dayXMON.FRIMOJUE,WED,THU.rRl門份型nionthM.mofithNOCT.JANOCLNOV,DECJAN年份月份型OCT200I.OCT200LNOV2D0LiwiilhYciirNJAN20

4、02DEC2001JAN2002setsrow/1.20/:d1,d2,-dn;!集合名/對象名/:對象屆性;endsets派生集合定義方法:setsrow/1.20/;col/1.100/;page/1.50/;link(row.col):k1,k2kn;trd/(row.col.page):t1,t2,tn;endsetsK1可以表示某個(gè)省的某個(gè)城市的人口。t1可以表示某個(gè)省的某個(gè)城市某個(gè)人的收入。二、數(shù)據(jù)域:數(shù)據(jù)域是優(yōu)化問題中已知得對象的屆性值,例如:人的身高,體重;車輛的載重,行駛速度。數(shù)據(jù)域以關(guān)鍵字“data”開頭,enddata”結(jié)束。數(shù)據(jù)域可以出現(xiàn)在模型中的任何地方。data:d

5、1=;k1=;t1=;enddata數(shù)據(jù)域的未知數(shù)值有時(shí)只想為一個(gè)集的部分成員的某個(gè)屆性指定值,而讓其余成員的該屆性保持未知,以便讓LINGO去求出它們的最優(yōu)值。在數(shù)據(jù)聲明中輸入兩個(gè)相連的逗號表示該位置對應(yīng)的集成員的屆性值未知。兩個(gè)逗號問可以有空格。例3.8sets:years/1.5/:capacity;endsetsdata:capacity=,34,20,;enddata屆性capacity的第2個(gè)和第3個(gè)值分別為34和20,其余的未知。實(shí)時(shí)數(shù)據(jù)處理在某些情況,對于模型中的某些數(shù)據(jù)并不是定值。譬如模型中有一個(gè)通貨膨脹率的參數(shù),我們想在2%至6%范圍內(nèi),對不同的值求解模型,來觀察模型的結(jié)果

6、對通貨膨脹的依賴有多么敏感。我們把這種情況稱為實(shí)時(shí)數(shù)據(jù)處理(whatifanalysis)0LINGO有一個(gè)特征可方便地做到這件事。在本該放數(shù)的地方輸入一個(gè)問號(?)。data:interest_rate,inflation_rate=.085?;enddata每一次求解模型時(shí),LINGO都會提示為參數(shù)inflation_rate輸入一個(gè)值。在WINDOWS操作系統(tǒng)下,將會接收到一個(gè)類似下面的對話框:LLKGORuntimeInputX|PleaseinputavalueforIIHFLATIOI_KATE匚皿mok直接輸入一個(gè)值再點(diǎn)擊OK按鈕,LING。就會把輸入的值指定給inflation

7、_rate,然后繼續(xù)求解模型。除了參數(shù)之外,也可以實(shí)時(shí)輸入集的屆性值,但不允許實(shí)時(shí)輸入集成員名。三、初始域初始域是專門為初始化決策變量而定義的一塊區(qū)域。初始部分是LINGO提供的另一個(gè)可選部分。在初始部分中,可以輸入初始聲明(initializationstatement),和數(shù)據(jù)部分中的數(shù)據(jù)聲明相同。對實(shí)際問題的建模時(shí),初始部分并不起到描述模型的作用,在初始部分輸入的值僅被LINGO求解器當(dāng)作初始點(diǎn)來用,并且僅僅對非線性模型有用。和數(shù)據(jù)部分指定變量的值不同,LINGO求解器可以自由改變初始部分初始化的變量的值。一個(gè)初始部分以“init:”開始,以“endinit”結(jié)束。初始部分的初始聲明規(guī)則

8、和數(shù)據(jù)部分的數(shù)據(jù)聲明規(guī)則相同。也就是說,我們可以在聲明的左邊同時(shí)初始化多個(gè)集屆性,可以把集屆性初始化為一個(gè)值,可以用問號實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)處理,還可以用逗號指定未知數(shù)值。init:X,Y=0,.1;endinitY=log(X);XA2+YA2<=1;好的初始點(diǎn)會減少模型的求解時(shí)間。四、集合循環(huán)函數(shù)統(tǒng)一語法格式:function(setname(set_index_list)|condition:expression_list);其中:function是集合函數(shù)名,是FOR,MAX,MIN,PROD,SUME種之一;setname是集合名;set_index_list是集合索引列表(不需使用索

9、引時(shí)可以省略);condition是邏輯表達(dá)式描述的過慮條件(通常含有索引,無條件時(shí)可省略)expression_list是一個(gè)表達(dá)式(對FOR函數(shù),可以是一組表達(dá)式)。五個(gè)集合函數(shù)名的含義如下:FOR(集合元素循環(huán)函數(shù)):對集合setname的每個(gè)元素獨(dú)立地生成表達(dá)式,表達(dá)式由expression_list描述(通常是優(yōu)化問題的約束)。MAX(集合屆性的最大值函數(shù)):返回集合setname上的表達(dá)式的最大值。MIN(集合屆性的最小值函數(shù)):返回集合setname上的表達(dá)式的最小值。PROD集合屆性的乘積函數(shù)):返回集合setname±的表達(dá)式的積。SUM(集合屆性的求和函數(shù)):返回

10、集合setname±的表達(dá)式的和。對應(yīng)數(shù)學(xué)表達(dá)式與LINGO命令:數(shù)學(xué)表達(dá)式lingo命令君?=?(一維數(shù)組和)sum(row(i):x(i);舄?=?淳?=?務(wù)?(二維維數(shù)組和)sum(links(i,j):x(i,j);Z?=?淳?=?務(wù)?泓?矩陣點(diǎn)乘和)sum(links(i,j):x(i,j)*Y(i,j);口?=?務(wù)(岸組的積)prod(row(i):x(i);君?或務(wù)奔君?=?務(wù)?住?;,?)(比較m個(gè)一維數(shù)組的和)for(col(j):sum(row(i):x(i)<=sum(row(i):y(i);五、變量定界函數(shù)變量定界函數(shù)對變量的取值范圍附加限制,共有以下四

11、種函數(shù):BND(L,X,U):限制L=X<=Uo注意LINGO中命令SLBSUB類似函數(shù)SLBffiSUM.BIN(X):即限制X為0或1。注意LING。中這個(gè)函數(shù)的名字卻不是INT(X).FREEX):取消對X的符號限制(即可取負(fù)數(shù)、0后正數(shù))。GIN(X):限制X為整數(shù)。數(shù)學(xué)表達(dá)式LINGO命令?=?,?)for(row(i):bnd(0,x(i),20);?泌?e?=?,?)for(row(i):BIN(x(i);?靠?捱?=?.?.?.,.,for(row(i):FREEx(i);?£?=?;,?for(row(i):gin(x(i);六、條件控制器用丁集合循環(huán)函數(shù)中,

12、循環(huán)變量的范圍控制。有兩類控制方法:1是直接控制集合中對象的范圍,2是通過控制對象屆性值的范圍來間接控制對象的范圍。#NOT#否定#EQ#相等#NE#不等#AND#并且#0R#或者1#GT#大于#GE#大于等于#LT#小于#LE#小于等于數(shù)學(xué)表達(dá)式lingo命令Z?=?(B,2,,,n-3)sum(row(i)|i#LE#n-3:x(i);E?=?ij?=?(j>=5)sum(links(i,j)|j#GE#5:x(i,j);寫?=?客?=?>0)sum(links(i,j)|x(i,j)#NE#0:x(i,j)*Y(i,j);口?=?(?補(bǔ)>0)prod(row(i)|x(

13、i)#NE#0:x(i);七、基本的數(shù)學(xué)函數(shù)在LING。中建立優(yōu)化模型時(shí)引用大量的內(nèi)部函數(shù)這些函數(shù)以""、。號打頭.LINGO中包括相當(dāng)豐富的數(shù)學(xué)函數(shù),這些函數(shù)的用法非常簡單,我們直接在下一歹0出ABS(X)絕對值函數(shù),返回X的絕對值COS(X涂弦函數(shù),返回X的余弦值(X的單位是弧度)EXP(冷旨數(shù)函數(shù),返回xe的值(其中e為自然對數(shù)值的底,即2.718281,)FLOOR(X取整函數(shù),返回X的整數(shù)部分(向最靠近0的方向取整).LGM(X)返回X的伽馬(Gamma)函數(shù)的自然對數(shù)值(當(dāng)X為整數(shù)時(shí)LGM(X)=LOG(X-1)!SX不為整數(shù)時(shí),采用線性插值得到結(jié)果)LOG(X

14、)自然對數(shù)函數(shù),返回自然對數(shù)值MOD(X,Y):模函數(shù),返回X對Y的取模的結(jié)果,即X除以Y的余數(shù),這里X余Y應(yīng)是整數(shù)POW(X,Y浙數(shù)函數(shù),返回yX的值.SIGN(X)符號函數(shù),返回X的符號值(X<0是返回-1,X>=0時(shí)返回+1)SIN(X)正弦函數(shù),返回X的正弦值(X的單位是弧度)95SMAX(list):最大值函數(shù),返回一列數(shù)(list)的:最大值SMIN.(list):最小值函數(shù),返回一列數(shù)(list)的:最小值SQR(X)乎方函數(shù),返回X的平方即(X*X)的值SQRT(X)T方根函數(shù),返回X的平方根的值TAN(X);正切函數(shù),返回X的正切值(X的單位是弧度)。八、ling

15、o中其他常用命令WRAP(I,N)當(dāng)I為于區(qū)間I,N內(nèi)時(shí)直接返回I;一般地,返回J=I-K*N,其中J位于區(qū)間1,N,K為函數(shù)??梢娺@個(gè)函數(shù)相當(dāng)于數(shù)學(xué)上用I對N取模函數(shù)的值+1,即WRAP(I,N)=MOD(I,N)+1此函數(shù)對N1無定義。SIZE(set_name)返回?cái)?shù)據(jù)集set_name中包含元素的個(gè)數(shù)。IF(logical_condition,true_result,false_result)當(dāng)邏輯表達(dá)式logical.condition的結(jié)果為真時(shí),返回true_result,否則返回false_result。兩如if(x#LT#100,20,1啪句,當(dāng)X100時(shí),返回20,否則返回

16、15。WARN(,text?,logical_condition)如果邏輯表達(dá)式logical_condition”的結(jié)果為真,顯示'text'信息.USER(user_determined_arguments)該函數(shù)是允許R自己編寫而函數(shù)(dl或0bj文件),該用戶函數(shù)可能當(dāng)用C或FORTRAN其他語言編寫并編譯,返回值為用戶函數(shù)計(jì)算的結(jié)果.從編程角度來看,USER函數(shù)包含兩個(gè)參數(shù):第一個(gè)用于指定參數(shù)個(gè)數(shù),第二個(gè)用于指定參數(shù)向量:而在LINGO中調(diào)用USER寸則直接指定對應(yīng)的參數(shù)“user_determined_”(類似于C語言中的main(argc,argv)的編程和運(yùn)行方式).更多細(xì)節(jié)請參考LINGO使用手冊.1. 九、文件讀寫復(fù)制和粘貼功能對于數(shù)據(jù)量不是很大的集合而言,復(fù)制粘貼是最快捷最簡單的方法,和其他軟件操作一樣,LINGO軟件,支持從網(wǎng)頁,文本文檔,電子表格中復(fù)制數(shù)據(jù)。同樣對其LINGO運(yùn)行的結(jié)果,我們可以將求解報(bào)告窗口中的結(jié)果復(fù)制到其他地方。OLE函數(shù),它可以從Excel中讀取數(shù)據(jù)或?qū)⒔Y(jié)果寫入到Excel中輸入數(shù)據(jù):統(tǒng)一語法格式:variable_list=OLE('spreadsheet-);其

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論