解非線性規(guī)劃軟件lingo的學(xué)習(xí)_第1頁(yè)
解非線性規(guī)劃軟件lingo的學(xué)習(xí)_第2頁(yè)
解非線性規(guī)劃軟件lingo的學(xué)習(xí)_第3頁(yè)
解非線性規(guī)劃軟件lingo的學(xué)習(xí)_第4頁(yè)
解非線性規(guī)劃軟件lingo的學(xué)習(xí)_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、LINGO8.0 for Windows軟件及應(yīng)用前 言運(yùn)籌學(xué),即最優(yōu)化理論,或在有的領(lǐng)域被稱為管理科學(xué),是近幾十年發(fā)展和形成的一門(mén)新興的應(yīng)用性學(xué)科。她主要解決最優(yōu)生產(chǎn)計(jì)劃、最優(yōu)分配、最優(yōu)設(shè)計(jì)、最優(yōu)決策、最佳管理等最優(yōu)化問(wèn)題。主要研究方法是定量化、系統(tǒng)化和模型化方法,特別是運(yùn)用各種數(shù)學(xué)模型和技術(shù)來(lái)解決問(wèn)題。我們遇到的實(shí)際問(wèn)題一般規(guī)模都較大,即使建立了模型,找到了解的方法,對(duì)于龐大的計(jì)算量也是望而卻步?!肮び破涫?,必先利其器”,手中有一個(gè)方便的求解最優(yōu)化問(wèn)題的工具就顯得很重要。LINGO系列優(yōu)化軟件包就給我們提供了理想的選擇。LINGO是一個(gè)利用線性規(guī)劃和非線性規(guī)劃來(lái)簡(jiǎn)潔地闡述、解決和分析復(fù)雜

2、問(wèn)題的簡(jiǎn)便工具。其特點(diǎn)是程序執(zhí)行速度很快,易于輸入、修改、求解和分析一個(gè)數(shù)學(xué)規(guī)劃問(wèn)題,因此LINGO在教育、科研和工業(yè)界得到了廣泛應(yīng)用。教學(xué)版和發(fā)行版的主要區(qū)別在于對(duì)優(yōu)化問(wèn)題的規(guī)模(變量和約束的個(gè)數(shù))有不同的限制。LINGO軟件包有多種版本,但其軟件內(nèi)核和使用方法類(lèi)似。詳細(xì)情況可上網(wǎng)訪問(wèn)LINGO 軟件網(wǎng)站:.關(guān)于LINGO8.0的資料市面上非常少,即使有也僅是一個(gè)附錄,為此編寫(xiě)了本教程。學(xué)完本書(shū)后,應(yīng)該能夠運(yùn)用LINGO8.0建模語(yǔ)言表述實(shí)際問(wèn)題,能夠設(shè)置算法的基本選項(xiàng),正確理解求解過(guò)程所顯示的狀態(tài),最后能正確解讀輸出結(jié)果。作為一門(mén)建模語(yǔ)言,它非常靈活,不是本書(shū)所能

3、完全包含的,“熟能生出百巧來(lái)”,只有用的多了才能掌握LINGO的強(qiáng)大功能。目 錄1LINGO快速入門(mén)2LINGO中的集 2.1 為什么使用集 2.2 什么是集 2.3 模型的集部分2.3.1 定義原始集2.3.2 定義派生集3模型的數(shù)據(jù)部分和初始部分 3.1 模型的數(shù)據(jù)部分3.1.1 數(shù)據(jù)部分入門(mén)3.1.2 參數(shù)3.1.3 實(shí)時(shí)數(shù)據(jù)處理3.1.4 指定屬性為一個(gè)值 3.1.5 數(shù)據(jù)部分的未知數(shù)值3.2 模型的初始部分4LINGO函數(shù) 4.1 基本運(yùn)算符4.1.1 算術(shù)運(yùn)算符 4.1.2 邏輯運(yùn)算符 4.1.3 關(guān)系運(yùn)算符 4.2 數(shù)學(xué)函數(shù)4.3 金融函數(shù)4.4 概率函數(shù)4.5 變量界定函數(shù)4.

4、6 集操作函數(shù)4.7 集循環(huán)函數(shù)4.8 輸入和輸出函數(shù)4.9 輔助函數(shù)5LINGO Windows命令 5.1 文件菜單5.2 編輯菜單5.3 LINGO菜單 5.4 窗口菜單 5.5 幫助菜單6 LINGO的命令行命令 7 綜合舉例 由于時(shí)間原因,7節(jié)內(nèi)容還沒(méi)全部完成,抱歉!但為方便大家,還是先貼出來(lái)啦。獻(xiàn)丑!參考文獻(xiàn)1. LINGO用戶指南(LINGO8.0的幫助文檔).2. 朱德通 編著. 最優(yōu)化模型與實(shí)驗(yàn). 上海:同濟(jì)大學(xué)出版社,2003.3. 何堅(jiān)勇 編著. 運(yùn)籌學(xué)基礎(chǔ). 北京:清華大學(xué)出版社,2000.4. 刁在筠 鄭漢鼎 等編著. 運(yùn)籌學(xué). 北京:高等教育出版社,1996.5.

5、姚恩瑜 何勇 等編著. 數(shù)學(xué)規(guī)劃與組合優(yōu)化. 杭州:浙江大學(xué)出版社,2001.6. H.P.威廉斯 著. 孟國(guó)璧 等譯. 數(shù)學(xué)規(guī)劃模型建立與計(jì)算機(jī)應(yīng)用. 北京:國(guó)防工業(yè)出版社,1991.7洪文 朱廣斌. 整數(shù)規(guī)劃下的最小生成樹(shù)模型. 安徽電氣工程職業(yè)技術(shù)學(xué)院學(xué)報(bào),2003.3,96100.8. 姜啟源謝金星葉俊編. 數(shù)學(xué)模型(第三版). 北京:高等教育出版社,2003.9. 謝金星等編. LINDO-LINGO how to. 網(wǎng)上下載,2004LINGO軟件的使用LINGO是用來(lái)求解線性和非線性優(yōu)化問(wèn)題的簡(jiǎn)易工具。LINGO內(nèi)置了一種建立最優(yōu)化模型的語(yǔ)言,可以簡(jiǎn)便地表達(dá)大規(guī)模問(wèn)題,利用LIN

6、GO高效的求解器可快速求解并分析結(jié)果。1 LINGO快速入門(mén)當(dāng)你在windows下開(kāi)始運(yùn)行LINGO系統(tǒng)時(shí),會(huì)得到類(lèi)似下面的一個(gè)窗口:外層是主框架窗口,包含了所有菜單命令和工具條,其它所有的窗口將被包含在主窗口之下。在主窗口內(nèi)的標(biāo)題為L(zhǎng)INGO Model LINGO1的窗口是LINGO的默認(rèn)模型窗口,建立的模型都要在該窗口內(nèi)編碼實(shí)現(xiàn)。下面舉兩個(gè)例子。例1.1 如何在LINGO中求解如下的LP問(wèn)題:在模型窗口中輸入如下代碼:min=2*x1+3*x2;x1+x2=350;x1=100;2*x1+x2=600;然后點(diǎn)擊工具條上的按鈕 即可。例1.2 使用LINGO軟件計(jì)算6個(gè)發(fā)點(diǎn)8個(gè)收點(diǎn)的最小費(fèi)

7、用運(yùn)輸問(wèn)題。產(chǎn)銷(xiāo)單位運(yùn)價(jià)如下表。單位 銷(xiāo)地運(yùn)價(jià)產(chǎn)地B1B2B3B4B5B6B7B8產(chǎn)量A16267425960A24953858255A35219743351A47673927143A52395726541A65522814352銷(xiāo)量3537223241324338使用LINGO軟件,編制程序如下:model:!6發(fā)點(diǎn)8收點(diǎn)運(yùn)輸問(wèn)題;sets: warehouses/wh1.wh6/: capacity; vendors/v1.v8/: demand; links(warehouses,vendors): cost, volume;endsets!目標(biāo)函數(shù); min=sum(links: co

8、st*volume);!需求約束; for(vendors(J): sum(warehouses(I): volume(I,J)=demand(J);!產(chǎn)量約束; for(warehouses(I): sum(vendors(J): volume(I,J)=capacity(I);!這里是數(shù)據(jù);data: capacity=60 55 51 43 41 52; demand=35 37 22 32 41 32 43 38; cost=6 2 6 7 4 2 9 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5

9、 5 2 2 8 1 4 3;enddataend然后點(diǎn)擊工具條上的按鈕 即可。為了能夠使用LINGO的強(qiáng)大功能,接著第二節(jié)的學(xué)習(xí)吧。2 LINGO中的集對(duì)實(shí)際問(wèn)題建模的時(shí)候,總會(huì)遇到一群或多群相聯(lián)系的對(duì)象,比如工廠、消費(fèi)者群體、交通工具和雇工等等。LINGO允許把這些相聯(lián)系的對(duì)象聚合成集(sets)。一旦把對(duì)象聚合成集,就可以利用集來(lái)最大限度的發(fā)揮LINGO建模語(yǔ)言的優(yōu)勢(shì)。現(xiàn)在我們將深入介紹如何創(chuàng)建集,并用數(shù)據(jù)初始化集的屬性。學(xué)完本節(jié)后,你對(duì)基于建模技術(shù)的集如何引入模型會(huì)有一個(gè)基本的理解。2.1 為什么使用集集是LINGO建模語(yǔ)言的基礎(chǔ),是程序設(shè)計(jì)最強(qiáng)有力的基本構(gòu)件。借助于集,能夠用一個(gè)單一

10、的、長(zhǎng)的、簡(jiǎn)明的復(fù)合公式表示一系列相似的約束,從而可以快速方便地表達(dá)規(guī)模較大的模型。 2.2 什么是集集是一群相聯(lián)系的對(duì)象,這些對(duì)象也稱為集的成員。一個(gè)集可能是一系列產(chǎn)品、卡車(chē)或雇員。每個(gè)集成員可能有一個(gè)或多個(gè)與之有關(guān)聯(lián)的特征,我們把這些特征稱為屬性。屬性值可以預(yù)先給定,也可以是未知的,有待于LINGO求解。例如,產(chǎn)品集中的每個(gè)產(chǎn)品可以有一個(gè)價(jià)格屬性;卡車(chē)集中的每輛卡車(chē)可以有一個(gè)牽引力屬性;雇員集中的每位雇員可以有一個(gè)薪水屬性,也可以有一個(gè)生日屬性等等。LINGO有兩種類(lèi)型的集:原始集(primitiveset)和派生集(derived set)。一個(gè)原始集是由一些最基本的對(duì)象組成的。一個(gè)派生

11、集是用一個(gè)或多個(gè)其它集來(lái)定義的,也就是說(shuō),它的成員來(lái)自于其它已存在的集。2.3 模型的集部分集部分是LINGO模型的一個(gè)可選部分。在LINGO模型中使用集之前,必須在集部分事先定義。集部分以關(guān)鍵字“sets:”開(kāi)始,以“endsets”結(jié)束。一個(gè)模型可以沒(méi)有集部分,或有一個(gè)簡(jiǎn)單的集部分,或有多個(gè)集部分。一個(gè)集部分可以放置于模型的任何地方,但是一個(gè)集及其屬性在模型約束中被引用之前必須定義了它們。2.3.1 定義原始集為了定義一個(gè)原始集,必須詳細(xì)聲明:集的名字可選,集的成員可選,集成員的屬性定義一個(gè)原始集,用下面的語(yǔ)法:setname/member_list/:attribute_list;注意:

12、用“”表示該部分內(nèi)容可選。下同,不再贅述。Setname是你選擇的來(lái)標(biāo)記集的名字,最好具有較強(qiáng)的可讀性。集名字必須嚴(yán)格符合標(biāo)準(zhǔn)命名規(guī)則:以拉丁字母或下劃線(_)為首字符,其后由拉丁字母(AZ)、下劃線、阿拉伯?dāng)?shù)字(0,1,9)組成的總長(zhǎng)度不超過(guò)32個(gè)字符的字符串,且不區(qū)分大小寫(xiě)。注意:該命名規(guī)則同樣適用于集成員名和屬性名等的命名。Member_list是集成員列表。如果集成員放在集定義中,那么對(duì)它們可采取顯式羅列和隱式羅列兩種方式。如果集成員不放在集定義中,那么可以在隨后的數(shù)據(jù)部分定義它們。 當(dāng)顯式羅列成員時(shí),必須為每個(gè)成員輸入一個(gè)不同的名字,中間用空格或逗號(hào)擱開(kāi),允許混合使用。例2.1 可以

13、定義一個(gè)名為students的原始集,它具有成員John、Jill、Rose和Mike,屬性有sex和age:sets: students/John Jill, Rose Mike/: sex, age;endsets 當(dāng)隱式羅列成員時(shí),不必羅列出每個(gè)集成員??刹捎萌缦抡Z(yǔ)法:setname/member1.memberN/: attribute_list;這里的member1是集的第一個(gè)成員名,memberN是集的最末一個(gè)成員名。LINGO將自動(dòng)產(chǎn)生中間的所有成員名。LINGO也接受一些特定的首成員名和末成員名,用于創(chuàng)建一些特殊的集。列表如下:隱式成員列表格式示例所產(chǎn)生集成員1.n1.51,2

14、,3,4,5StringM.StringNCar2.car14Car2,Car3,Car4,Car14DayM.DayNMon.FriMon,Tue,Wed,Thu,FriMonthM.MonthNOct.JanOct,Nov,Dec,JanMonthYearM.MonthYearNOct2001.Jan2002Oct2001,Nov2001,Dec2001,Jan2002 集成員不放在集定義中,而在隨后的數(shù)據(jù)部分來(lái)定義。例2.2!集部分;sets: students:sex,age;endsets!數(shù)據(jù)部分;data: students,sex,age= John 1 16 Jill 0 1

15、4 Rose 0 17 Mike 1 13;enddata注意:開(kāi)頭用感嘆號(hào)(!),末尾用分號(hào)(;)表示注釋?zhuān)煽缍嘈小T诩糠种欢x了一個(gè)集students,并未指定成員。在數(shù)據(jù)部分羅列了集成員John、Jill、Rose和Mike,并對(duì)屬性sex和age分別給出了值。集成員無(wú)論用何種字符標(biāo)記,它的索引都是從1開(kāi)始連續(xù)計(jì)數(shù)。在attribute_ list可以指定一個(gè)或多個(gè)集成員的屬性,屬性之間必須用逗號(hào)隔開(kāi)。可以把集、集成員和集屬性同C語(yǔ)言中的結(jié)構(gòu)體作個(gè)類(lèi)比。如下圖:集 結(jié)構(gòu)體集成員 結(jié)構(gòu)體的域集屬性 結(jié)構(gòu)體實(shí)例LINGO內(nèi)置的建模語(yǔ)言是一種描述性語(yǔ)言,用它可以描述現(xiàn)實(shí)世界中的一些問(wèn)題,然

16、后再借助于LINGO求解器求解。因此,集屬性的值一旦在模型中被確定,就不可能再更改。在LINGO中,只有在初始部分中給出的集屬性值在以后的求解中可更改。這與前面并不矛盾,初始部分是LINGO求解器的需要,并不是描述問(wèn)題所必須的。2.3.2 定義派生集為了定義一個(gè)派生集,必須詳細(xì)聲明:集的名字父集的名字可選,集成員可選,集成員的屬性可用下面的語(yǔ)法定義一個(gè)派生集:setname(parent_set_list)/member_list/:attribute_list;setname是集的名字。parent_set_list是已定義的集的列表,多個(gè)時(shí)必須用逗號(hào)隔開(kāi)。如果沒(méi)有指定成員列表,那么LING

17、O會(huì)自動(dòng)創(chuàng)建父集成員的所有組合作為派生集的成員。派生集的父集既可以是原始集,也可以是其它的派生集。例2.3sets: product/A B/; machine/M N/; week/1.2/; allowed(product,machine,week):x;endsetsLINGO生成了三個(gè)父集的所有組合共八組作為allowed集的成員。列表如下:編號(hào) 成員1 (A,M,1)2 2 (A,M,2)3 3 (A,N,1)4 4 (A,N,2)5 5 (B,M,1)6 6 (B,M,2)7 7 (B,N,1)8 8 (B,N,2)成員列表被忽略時(shí),派生集成員由父集成員所有的組合構(gòu)成,這樣的派生集

18、成為稠密集。如果限制派生集的成員,使它成為父集成員所有組合構(gòu)成的集合的一個(gè)子集,這樣的派生集成為稀疏集。同原始集一樣,派生集成員的聲明也可以放在數(shù)據(jù)部分。一個(gè)派生集的成員列表有兩種方式生成:顯式羅列;設(shè)置成員資格過(guò)濾器。當(dāng)采用方式時(shí),必須顯式羅列出所有要包含在派生集中的成員,并且羅列的每個(gè)成員必須屬于稠密集。使用前面的例子,顯式羅列派生集的成員:allowed(product,machine,week)/A M 1,A N 2,B N 1/;如果需要生成一個(gè)大的、稀疏的集,那么顯式羅列就很討厭。幸運(yùn)地是許多稀疏集的成員都滿足一些條件以和非成員相區(qū)分。我們可以把這些邏輯條件看作過(guò)濾器,在LING

19、O生成派生集的成員時(shí)把使邏輯條件為假的成員從稠密集中過(guò)濾掉。例2.4sets: !學(xué)生集:性別屬性sex,1表示男性,0表示女性;年齡屬性age. ; students/John,Jill,Rose,Mike/:sex,age; !男學(xué)生和女學(xué)生的聯(lián)系集:友好程度屬性friend,0,1之間的數(shù)。 ; linkmf(students,students)|sex(&1) #eq# 1 #and# sex(&2) #eq# 0: friend; !男學(xué)生和女學(xué)生的友好程度大于0.5的集; linkmf2(linkmf) | friend(&1,&2) #ge# 0.5 : x;endsetsdat

20、a: sex,age = 1 16 0 14 0 17 0 13; friend = 0.3 0.5 0.6;enddata用豎線(|)來(lái)標(biāo)記一個(gè)成員資格過(guò)濾器的開(kāi)始。#eq#是邏輯運(yùn)算符,用來(lái)判斷是否“相等”,可參考4. &1可看作派生集的第1個(gè)原始父集的索引,它取遍該原始父集的所有成員;&2可看作派生集的第2 個(gè)原始父集的索引,它取遍該原始父集的所有成員;&3,&4,以此類(lèi)推。注意如果派生集B的父集是另外的派生集A,那么上面所說(shuō)的原始父集是集A向前回溯到最終的原始集,其順序保持不變,并且派生集A的過(guò)濾器對(duì)派生集B仍然有效。因此,派生集的索引個(gè)數(shù)是最終原始父集的個(gè)數(shù),索引的取值是從原始父集到

21、當(dāng)前派生集所作限制的總和??偟膩?lái)說(shuō),LINGO可識(shí)別的集只有兩種類(lèi)型:原始集和派生集。在一個(gè)模型中,原始集是基本的對(duì)象,不能再被拆分成更小的組分。原始集可以由顯式羅列和隱式羅列兩種方式來(lái)定義。當(dāng)用顯式羅列方式時(shí),需在集成員列表中逐個(gè)輸入每個(gè)成員。當(dāng)用隱式羅列方式時(shí),只需在集成員列表中輸入首成員和末成員,而中間的成員由LINGO產(chǎn)生。另一方面,派生集是由其它的集來(lái)創(chuàng)建。這些集被稱為該派生集的父集(原始集或其它的派生集)。一個(gè)派生集既可以是稀疏的,也可以是稠密的。稠密集包含了父集成員的所有組合(有時(shí)也稱為父集的笛卡爾乘積)。稀疏集僅包含了父集的笛卡爾乘積的一個(gè)子集,可通過(guò)顯式羅列和成員資格過(guò)濾器這

22、兩種方式來(lái)定義。顯式羅列方法就是逐個(gè)羅列稀疏集的成員。成員資格過(guò)濾器方法通過(guò)使用稀疏集成員必須滿足的邏輯條件從稠密集成員中過(guò)濾出稀疏集的成員。不同集類(lèi)型的關(guān)系見(jiàn)下圖。集稠密集原始集顯式羅列稀疏集過(guò)濾器派生集LINGO集類(lèi)型3 模型的數(shù)據(jù)部分和初始部分 在處理模型的數(shù)據(jù)時(shí),需要為集指派一些成員并且在LINGO求解模型之前為集的某些屬性指定值。為此,LINGO為用戶提供了兩個(gè)可選部分:輸入集成員和數(shù)據(jù)的數(shù)據(jù)部分(Data Section)和為決策變量設(shè)置初始值的初始部分(Init Section)。 3.1 模型的數(shù)據(jù)部分 3.1.1 數(shù)據(jù)部分入門(mén)數(shù)據(jù)部分提供了模型相對(duì)靜止部分和數(shù)據(jù)分離的可能性。

23、顯然,這對(duì)模型的維護(hù)和維數(shù)的縮放非常便利。數(shù)據(jù)部分以關(guān)鍵字“data:”開(kāi)始,以關(guān)鍵字“enddata”結(jié)束。在這里,可以指定集成員、集的屬性。其語(yǔ)法如下:object_list = value_list;對(duì)象列(object_list)包含要指定值的屬性名、要設(shè)置集成員的集名,用逗號(hào)或空格隔開(kāi)。一個(gè)對(duì)象列中至多有一個(gè)集名,而屬性名可以有任意多。如果對(duì)象列中有多個(gè)屬性名,那么它們的類(lèi)型必須一致。如果對(duì)象列中有一個(gè)集名,那么對(duì)象列中所有的屬性的類(lèi)型就是這個(gè)集。數(shù)值列(value_list)包含要分配給對(duì)象列中的對(duì)象的值,用逗號(hào)或空格隔開(kāi)。注意屬性值的個(gè)數(shù)必須等于集成員的個(gè)數(shù)??聪旅娴睦?。例3.

24、1sets: set1/A,B,C/: X,Y;endsetsdata: X=1,2,3; Y=4,5,6;enddata在集set1中定義了兩個(gè)屬性X和Y。X的三個(gè)值是1、2和3,Y的三個(gè)值是4、5和6。也可采用如下例子中的復(fù)合數(shù)據(jù)聲明(data statement)實(shí)現(xiàn)同樣的功能。例3.2sets: set1/A,B,C/: X,Y;endsetsdata: X,Y=1 4 2 5 3 6;enddata看到這個(gè)例子,可能會(huì)認(rèn)為X被指定了1、4和2三個(gè)值,因?yàn)樗鼈兪菙?shù)值列中前三個(gè),而正確的答案是1、2和3。假設(shè)對(duì)象列有n個(gè)對(duì)象,LINGO在為對(duì)象指定值時(shí),首先在n個(gè)對(duì)象的第1個(gè)索引處依次分

25、配數(shù)值列中的前n個(gè)對(duì)象,然后在n個(gè)對(duì)象的第2個(gè)索引處依次分配數(shù)值列中緊接著的n個(gè)對(duì)象,以此類(lèi)推。模型的所有數(shù)據(jù)屬性值和集成員被單獨(dú)放在數(shù)據(jù)部分,這可能是最規(guī)范的數(shù)據(jù)輸入方式。3.1.2 參數(shù)在數(shù)據(jù)部分也可以指定一些標(biāo)量變量(scalar variables)。當(dāng)一個(gè)標(biāo)量變量在數(shù)據(jù)部分確定時(shí),稱之為參數(shù)??匆焕?,假設(shè)模型中用利率8.5%作為一個(gè)參數(shù),就可以象下面一樣輸入一個(gè)利率作為參數(shù)。例3.3data: interest_rate = .085;enddata也可以同時(shí)指定多個(gè)參數(shù)。例3.4data: interest_rate,inflation_rate = .085 .03;enddat

26、a3.1.3 實(shí)時(shí)數(shù)據(jù)處理在某些情況,對(duì)于模型中的某些數(shù)據(jù)并不是定值。譬如模型中有一個(gè)通貨膨脹率的參數(shù),我們想在2%至6%范圍內(nèi),對(duì)不同的值求解模型,來(lái)觀察模型的結(jié)果對(duì)通貨膨脹的依賴有多么敏感。我們把這種情況稱為實(shí)時(shí)數(shù)據(jù)處理(what if analysis)。LINGO有一個(gè)特征可方便地做到這件事。在本該放數(shù)的地方輸入一個(gè)問(wèn)號(hào)(?)。例3.5data: interest_rate,inflation_rate = .085 ?;enddata每一次求解模型時(shí),LINGO都會(huì)提示為參數(shù)inflation_rate輸入一個(gè)值。在WINDOWS操作系統(tǒng)下,將會(huì)接收到一個(gè)類(lèi)似下面的對(duì)話框:直接輸入一

27、個(gè)值再點(diǎn)擊OK按鈕,LINGO就會(huì)把輸入的值指定給inflation_rate,然后繼續(xù)求解模型。 除了參數(shù)之外,也可以實(shí)時(shí)輸入集的屬性值,但不允許實(shí)時(shí)輸入集成員名。 3.1.4 指定屬性為一個(gè)值可以在數(shù)據(jù)聲明的右邊輸入一個(gè)值來(lái)把所有的成員的該屬性指定為一個(gè)值??聪旅娴睦?。例3.6sets: days /MO,TU,WE,TH,FR,SA,SU/:needs;endsetsdata: needs = 20;enddataLINGO將用20指定days集的所有成員的needs屬性。對(duì)于多個(gè)屬性的情形,見(jiàn)下例。例3.7sets: days /MO,TU,WE,TH,FR,SA,SU/:needs

28、,cost;endsetsdata: needs cost = 20 100;enddata 3.1.5 數(shù)據(jù)部分的未知數(shù)值有時(shí)只想為一個(gè)集的部分成員的某個(gè)屬性指定值,而讓其余成員的該屬性保持未知,以便讓LINGO去求出它們的最優(yōu)值。在數(shù)據(jù)聲明中輸入兩個(gè)相連的逗號(hào)表示該位置對(duì)應(yīng)的集成員的屬性值未知。兩個(gè)逗號(hào)間可以有空格。例3.8sets: years/1.5/: capacity;endsetsdata: capacity = ,34,20,;enddata屬性capacity的第2個(gè)和第3個(gè)值分別為34和20,其余的未知。 3.2 模型的初始部分初始部分是LINGO提供的另一個(gè)可選部分。在初

29、始部分中,可以輸入初始聲明(initialization statement),和數(shù)據(jù)部分中的數(shù)據(jù)聲明相同。對(duì)實(shí)際問(wèn)題的建模時(shí),初始部分并不起到描述模型的作用,在初始部分輸入的值僅被LINGO求解器當(dāng)作初始點(diǎn)來(lái)用,并且僅僅對(duì)非線性模型有用。和數(shù)據(jù)部分指定變量的值不同,LINGO求解器可以自由改變初始部分初始化的變量的值。一個(gè)初始部分以“init:”開(kāi)始,以“endinit”結(jié)束。初始部分的初始聲明規(guī)則和數(shù)據(jù)部分的數(shù)據(jù)聲明規(guī)則相同。也就是說(shuō),我們可以在聲明的左邊同時(shí)初始化多個(gè)集屬性,可以把集屬性初始化為一個(gè)值,可以用問(wèn)號(hào)實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)處理,還可以用逗號(hào)指定未知數(shù)值。例3.9init: X, Y =

30、 0, .1;endinitY=log(X);X2+Y2=1;好的初始點(diǎn)會(huì)減少模型的求解時(shí)間。 在這一節(jié)中,我們僅帶大家接觸了一些基本的數(shù)據(jù)輸入和初始化概念,不過(guò)現(xiàn)在你應(yīng)該可以輕松的為自己的模型加入原始數(shù)據(jù)和初始部分啦。4 LINGO函數(shù) 有了前幾節(jié)的基礎(chǔ)知識(shí),再加上本節(jié)的內(nèi)容,你就能夠借助于LINGO建立并求解復(fù)雜的優(yōu)化模型了。LINGO有9種類(lèi)型的函數(shù):1 1 基本運(yùn)算符:包括算術(shù)運(yùn)算符、邏輯運(yùn)算符和關(guān)系運(yùn)算符2 2 數(shù)學(xué)函數(shù):三角函數(shù)和常規(guī)的數(shù)學(xué)函數(shù)3 3 金融函數(shù):LINGO提供的兩種金融函數(shù)4 4 概率函數(shù):LINGO提供了大量概率相關(guān)的函數(shù)5 5 變量界定函數(shù):這類(lèi)函數(shù)用來(lái)定義變量

31、的取值范圍6 6 集操作函數(shù):這類(lèi)函數(shù)為對(duì)集的操作提供幫助7 7 集循環(huán)函數(shù):遍歷集的元素,執(zhí)行一定的操作的函數(shù)8 8 數(shù)據(jù)輸入輸出函數(shù):這類(lèi)函數(shù)允許模型和外部數(shù)據(jù)源相聯(lián)系,進(jìn)行數(shù)據(jù)的輸入輸出9 9 輔助函數(shù):各種雜類(lèi)函數(shù)4.1 基本運(yùn)算符這些運(yùn)算符是非?;镜?,甚至可以不認(rèn)為它們是一類(lèi)函數(shù)。事實(shí)上,在LINGO中它們是非常重要的。4.1.1 算術(shù)運(yùn)算符算術(shù)運(yùn)算符是針對(duì)數(shù)值進(jìn)行操作的。LINGO提供了5種二元運(yùn)算符:乘方乘除加減LINGO唯一的一元算術(shù)運(yùn)算符是取反函數(shù)“”。這些運(yùn)算符的優(yōu)先級(jí)由高到底為:高(取反) 低運(yùn)算符的運(yùn)算次序?yàn)閺淖蟮接野磧?yōu)先級(jí)高低來(lái)執(zhí)行。運(yùn)算的次序可以用圓括號(hào)“()”來(lái)

32、改變。例4.1 算術(shù)運(yùn)算符示例。253,(24)5等等。4.1.2 邏輯運(yùn)算符在LINGO中,邏輯運(yùn)算符主要用于集循環(huán)函數(shù)的條件表達(dá)式中,來(lái)控制在函數(shù)中哪些集成員被包含,哪些被排斥。在創(chuàng)建稀疏集時(shí)用在成員資格過(guò)濾器中。LINGO具有種邏輯運(yùn)算符:#not# 否定該操作數(shù)的邏輯值,not是一個(gè)一元運(yùn)算符#eq#若兩個(gè)運(yùn)算數(shù)相等,則為true;否則為flase#ne# 若兩個(gè)運(yùn)算符不相等,則為true;否則為flase#gt# 若左邊的運(yùn)算符嚴(yán)格大于右邊的運(yùn)算符,則為true;否則為flase#ge# 若左邊的運(yùn)算符大于或等于右邊的運(yùn)算符,則為true;否則為flase#lt# 若左邊的運(yùn)算符嚴(yán)格

33、小于右邊的運(yùn)算符,則為true;否則為flase#le# 若左邊的運(yùn)算符小于或等于右邊的運(yùn)算符,則為true;否則為flase#and# 僅當(dāng)兩個(gè)參數(shù)都為true時(shí),結(jié)果為true;否則為flase#or# 僅當(dāng)兩個(gè)參數(shù)都為false時(shí),結(jié)果為false;否則為true這些運(yùn)算符的優(yōu)先級(jí)由高到低為:高 #not# #eq# #ne# #gt# #ge# #lt# #le#低 #and# #or#例4.2 邏輯運(yùn)算符示例2 #gt# 3 #and# 4 #gt# 2,其結(jié)果為假(0)。 4.1.3 關(guān)系運(yùn)算符在LINGO中,關(guān)系運(yùn)算符主要是被用在模型中,來(lái)指定一個(gè)表達(dá)式的左邊是否等于、小于等于、

34、或者大于等于右邊,形成模型的一個(gè)約束條件。關(guān)系運(yùn)算符與邏輯運(yùn)算符#eq#、#le#、#ge#截然不同,前者是模型中該關(guān)系運(yùn)算符所指定關(guān)系的為真描述,而后者僅僅判斷一個(gè)該關(guān)系是否被滿足:滿足為真,不滿足為假。 LINGO有三種關(guān)系運(yùn)算符:“=”、“=”。LINGO中還能用“”表示大于等于關(guān)系。LINGO并不支持嚴(yán)格小于和嚴(yán)格大于關(guān)系運(yùn)算符。然而,如果需要嚴(yán)格小于和嚴(yán)格大于關(guān)系,比如讓A嚴(yán)格小于B:AB,那么可以把它變成如下的小于等于表達(dá)式:A+=B,這里是一個(gè)小的正數(shù),它的值依賴于模型中A小于B多少才算不等。下面給出以上三類(lèi)操作符的優(yōu)先級(jí):高#not# (取反) #eq# #ne# #gt# #

35、ge# #lt# #le#and# #or#低 = 4.2 數(shù)學(xué)函數(shù)LINGO提供了大量的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù):abs(x) 返回x的絕對(duì)值sin(x) 返回x的正弦值,x采用弧度制cos(x) 返回x的余弦值tan(x) 返回x的正切值exp(x) 返回常數(shù)e的x次方log(x) 返回x的自然對(duì)數(shù)lgm(x) 返回x的gamma函數(shù)的自然對(duì)數(shù)sign(x) 如果x=0時(shí),返回不超過(guò)x的最大整數(shù);當(dāng)x= required(J);end計(jì)算的部分結(jié)果為Global optimal solution found at iteration: 0 Objective value: 22.00000 Variable Value Reduced Cost REQUIRED( MON) 20.00000 0. REQUIRED( TUE) 16.00000 0. REQUIRED( WED) 13.00000 0. REQUIRED( THU) 16.00000 0. REQUIRED( FRI) 19.0

溫馨提示

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

評(píng)論

0/150

提交評(píng)論