15附錄B--LINGO使用簡(jiǎn)介_(kāi)第1頁(yè)
15附錄B--LINGO使用簡(jiǎn)介_(kāi)第2頁(yè)
15附錄B--LINGO使用簡(jiǎn)介_(kāi)第3頁(yè)
15附錄B--LINGO使用簡(jiǎn)介_(kāi)第4頁(yè)
15附錄B--LINGO使用簡(jiǎn)介_(kāi)第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 MACROBUTTON MTEditEquationSection2 Equation Chapter 1 Section 1 SEQ MTEqn r h * MERGEFORMAT SEQ MTSec r 1 h * MERGEFORMAT SEQ MTChap r 1 h * MERGEFORMAT 附錄B LINGO使用簡(jiǎn)介L(zhǎng)INGO軟件是美國(guó)LINDO系統(tǒng)公司開(kāi)發(fā)的一套專(zhuān)門(mén)用于求解最優(yōu)化問(wèn)題的軟件。它為求解最優(yōu)化問(wèn)題提供了一個(gè)平臺(tái),主要用于求解線(xiàn)性規(guī)劃、 HYPERLINK /s?wd=%E9%9D%9E%E7%BA%BF%E6%80%A7%E8%A7%84%E5%88%92&tn=

2、44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4n1bzn1-9rjTLmHmdmH6z0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHnsnWDknj01PHbkPWTzrjn1rf t _blank 非線(xiàn)性規(guī)劃、 HYPERLINK /s?wd=%E6%95%B4%E6%95%B0%E8%A7%84%E5%88%92&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqI

3、HckPjm4nH00T1Y4n1bzn1-9rjTLmHmdmH6z0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHnsnWDknj01PHbkPWTzrjn1rf t _blank 整數(shù)規(guī)劃、二次規(guī)劃、線(xiàn)性及非線(xiàn)性方程組等問(wèn)題。它是最優(yōu)化問(wèn)題的一種建模語(yǔ)言,包含有許多常用的函數(shù)供使用者編寫(xiě)程序時(shí)調(diào)用,并提供了與其他數(shù)據(jù)文件的接口,易于方便地輸入和輸出數(shù)據(jù),求解和分析大規(guī)模最優(yōu)化問(wèn)題,且執(zhí)行速度快。由于它的功能較強(qiáng),所以在教學(xué)、科研、工業(yè)、商業(yè)、服務(wù)等許

4、多領(lǐng)域得到了廣泛的應(yīng)用。一個(gè)LINGO程序一般會(huì)包括以下幾個(gè)部分:(1)集合段:集部分是LINGO模型的一個(gè)可選部分。在LINGO模型中使用集之前,必須在集部分事先定義。集部分以關(guān)鍵字“sets:”開(kāi)始,以“endsets”結(jié)束。一個(gè)模型可以沒(méi)有集部分,或有一個(gè)簡(jiǎn)單的集部分,或有多個(gè)集部分。一個(gè)集部分可以放置于模型的任何部分,但是一個(gè)集及其屬性在模型目標(biāo)函數(shù)或約束條件中被引用之前必須先定義。(2)數(shù)據(jù)段:在處理模型的數(shù)據(jù)時(shí),需要為集部分定義的某些元素在LINGO求解模型之前為其指定值。數(shù)據(jù)部分以關(guān)鍵字“data:”開(kāi)始,以關(guān)鍵字“enddata”結(jié)束。(3)目標(biāo)和約束段:這部分用來(lái)定義目標(biāo)函數(shù)

5、和約束條件。該部分沒(méi)有開(kāi)始和結(jié)束的標(biāo)記。主要是要用到LINGO的內(nèi)部函數(shù),尤其是與集合有關(guān)的求和與循環(huán)函數(shù)等。(4)初始段:這個(gè)部分要以關(guān)鍵字“init:”開(kāi)始,以關(guān)鍵字“endinit”結(jié)束,它的作用是對(duì)集合的屬性定義一個(gè)初值。在一般的迭代運(yùn)算中,如果可以給一個(gè)接近最優(yōu)解的初始值,會(huì)大大減少程序運(yùn)行的時(shí)間。(4)計(jì)算段:這一部分是以關(guān)鍵字“calc:”開(kāi)始,以關(guān)鍵字“endcalc”結(jié)束。它的作用是把原始數(shù)據(jù)處理成程序模型需要的數(shù)據(jù),它的處理是在數(shù)據(jù)段輸入完以后、開(kāi)始正式求解模型之前進(jìn)行的。在這個(gè)段中,程序語(yǔ)句是順序執(zhí)行的。注意在計(jì)算段中不能有模型的決策變量。B. SEQ B. * ARAB

6、IC 1 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ì)。1.為什么使用集集是LINGO建模語(yǔ)言的基礎(chǔ),是程序設(shè)計(jì)最強(qiáng)有力的基本構(gòu)件。借助于集能夠用一個(gè)單一的、簡(jiǎn)明的復(fù)合公式表示一系列相似的約束,從而可以快速方便地表達(dá)規(guī)模較大的模型。2.什么是集集是一群相聯(lián)系的對(duì)象,這些對(duì)象也稱(chēng)為集的成員。一個(gè)集可能是一系列產(chǎn)品、卡車(chē)或雇員。每個(gè)集的成員可能有一個(gè)或多個(gè)與之有關(guān)聯(lián)的特征,把這些特征稱(chēng)為屬性。屬性值可以預(yù)先

7、給定,也可以是未知的,有待于LINGO求解的。LINGO有兩種類(lèi)型的集:原始集(primitive set)和派生集(derived set)。一個(gè)原始集是由一些最基本的對(duì)象組成的。一個(gè)派生集是用一個(gè)或多個(gè)其他集來(lái)定義的,也就是說(shuō),它的成員來(lái)自于其他已存在的集。3.原始集的定義為了定義一個(gè)原始集,必須詳細(xì)聲明:集的名稱(chēng);集的成員(可選的);集成員的屬性(可選的)。定義一個(gè)原始集,用下面的語(yǔ)法:setname/member_list/:attribute_list;注B. SEQ 注B. * ARABIC 1 用“”表示該部分內(nèi)容可選。同樣的,下面不再贅述。setname是用來(lái)標(biāo)記集的名字,最好

8、具有較強(qiáng)的可讀性。集名稱(chēng)必須嚴(yán)格符合標(biāo)準(zhǔn)命名規(guī)則:以字母為首字符,其后由字母(A-Z)、下劃線(xiàn)、阿拉伯?dāng)?shù)字(0,1,9)組成的總長(zhǎng)度不超過(guò)32個(gè)字符的字符串,且不區(qū)分大小寫(xiě)。注B. SEQ 注B. * ARABIC 2 該命名規(guī)則同樣適用于集合成員名和屬性名等的命名。member_list是集成員列表。如果集成員放在集定義中,那么對(duì)它們可采取顯式羅列和隱式羅列兩種方式。如果集成員不放在集合定義中,那么可以在隨后的數(shù)據(jù)部分定義它們。(1)當(dāng)顯式羅列成員時(shí),必須為每個(gè)成員輸入一個(gè)不同的名字,中間用空格或逗號(hào)擱開(kāi),允許混合使用。例B. SEQ 例B. * ARABIC 1 定義一個(gè)名為friends

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

10、。 表B. SEQ 表B. * ARABIC 1 隱式羅列成員示例隱式成員列表格式示例所產(chǎn)生集成員1.n1.51,2,3,4,5StringM.StringNCar2.Car14Car2,Car3,Car4,Car14DayM.DayNMon.FriMon,Tue,Wed,Thu,FriMonthM.MonthNOct.JanOct,Nov,Dec,JanMonthYearM.MonthYearNOct2001.Jan2002Oct2001,Nov2001,Dec2001,Jan2002(3)集成員不放在集定義中,而在隨后的數(shù)據(jù)部分來(lái)定義。例B. SEQ 例B. * ARABIC 2 集定義示

11、例。sets: !集部分;friends: sex, age;endsetsdata: !數(shù)據(jù)部分;friends, sex, age=John 1 16Jill 0 14Rose 0 17Mike 1 13;enddata注B. SEQ 注B. * ARABIC 3 開(kāi)頭用感嘆號(hào)(?。┍硎咀⑨?zhuān)煽缍嘈小D┪灿梅痔?hào)(;)表示語(yǔ)句結(jié)束。在集部分只定義了一個(gè)集friends,并未指定成員。在數(shù)據(jù)部分羅列了集成員John、Jill、Rose和Mike,并對(duì)屬性sex和age分別給出了值。集成員無(wú)論用何種字符標(biāo)記,它的索引都是從1開(kāi)始連續(xù)計(jì)數(shù)。在attribute_list可以指定一個(gè)或多個(gè)集成員的

12、屬性,屬性之間必須用逗號(hào)隔開(kāi)。4.定義派生集為了定義一個(gè)派生集,必須詳細(xì)說(shuō)明集的名稱(chēng)和父集的名稱(chēng),而集成員和集成員的屬性是可選的??捎孟旅娴恼Z(yǔ)法定義一個(gè)派生集:setname(parent_set_list)/member_list/:attribute_list;setname是集的名字。parent_set_list是已定義集的列表,多個(gè)時(shí)必須用逗號(hào)隔開(kāi)。如果沒(méi)有指定成員列表,那么LINGO會(huì)自動(dòng)創(chuàng)建父集成員的所有組合作為派生集的成員。派生集的父集既可以是原始集,也可以是其他的派生集。例B. SEQ 例B. * ARABIC 3 派生集定義示例。sets: product/A B/; ma

13、chine/M N/; week/1.2/; allowed(product, machine, week): x;endsetsLINGO生成了三個(gè)父集的所有組合共八組作為allowed集的成員。如 REF _Ref512793098 h * MERGEFORMAT 表B.2所列。表B. SEQ 表B. * ARABIC 2 集合allowed的成員編號(hào)成員1(A,M,1)2(A,M,2)3(A,N,1)4(A,N,2)5(B,M,1)6(B,M,2)7(B,N,1)8(B,N,2)成員列表被忽略時(shí),派生集成員由父集成員所有的組合構(gòu)成,這樣的派生集合稱(chēng)為稠密集。如果限制派生集的成員,使它成為

14、父集成員所有組合構(gòu)成的集合的一個(gè)子集,這樣的派生集稱(chēng)為稀疏集。同原始集一樣,派生集成員的聲明也可以放在數(shù)據(jù)部分。一個(gè)派生集的成員列表有兩種方式生成。(1)顯式羅列派生集的成員allowed(product, machine, week)/A M 1, A N 2, B N 1/;(2)設(shè)置成員資格過(guò)濾器如果需要生成一個(gè)大的、稀疏集,那么顯式羅列就十分麻煩。但是許多稀疏集的成員都滿(mǎn)足一些條件以和非成員相區(qū)分??梢园堰@些邏輯條件看作過(guò)濾器,在LINGO生成派生集的成員時(shí)把使邏輯條件為假的成員從稠密集中過(guò)濾掉。例B. SEQ 例B. * ARABIC 4 稀疏集示例。sets: !學(xué)生集:性別屬性s

15、ex,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)#gt#0.5: x;endsetsdata: sex,age=1 16, 0 14, 0 17, 0 13; friend=0.3, 0.5, 0.6;enddata

16、用豎線(xiàn)(|)來(lái)標(biāo)記一個(gè)成員資格過(guò)濾器的開(kāi)始。#eq#是邏輯運(yùn)算符,用來(lái)判斷是否“相等”。&1可看作派生集的第1個(gè)原始父集的索引,它取遍該原始父集的所有成員;&2可看作派生集的第2個(gè)原始父集的索引,它取遍該原始父集的所有成員;&3,&4,以此類(lèi)推。注意如果派生集B的父集是另外的派生集A,那么上面所說(shuō)的原始父集是集A向前回溯到最終的原始集,其順序保持不變,并且派生集A的過(guò)濾器對(duì)派生集B仍然有效。因此,派生集的索引個(gè)數(shù)是最終原始父集的個(gè)數(shù),索引的取值是從原始父集到當(dāng)前派生集所作限制的總和。總的來(lái)說(shuō),LINGO可識(shí)別的集只有兩種類(lèi)型:原始集和派生集。在一個(gè)模型中,原始集是基本的對(duì)象,不能再被拆分成更小

17、的組分。原始集可以由顯式羅列和隱式羅列兩種方式來(lái)定義。當(dāng)用顯式羅列方式時(shí),需在集成員列表中逐個(gè)輸入每個(gè)成員。當(dāng)用隱式羅列方式時(shí),只需在集成員列表中輸入首成員和末成員,而中間的成員由LINGO產(chǎn)生。另一方面,派生集是由其他的集來(lái)創(chuàng)建。這些集被稱(chēng)為該派生集的父集。一個(gè)派生集既可以是稀疏的,也可以是稠密的。稠密集包含了父集成員的所有組合(有時(shí)也稱(chēng)為父集的笛卡爾乘積)。稀疏集僅包含了父集的笛卡爾乘積的一個(gè)子集,可通過(guò)顯式羅列和成員資格過(guò)濾器這兩種方式來(lái)定義,顯式羅列方法就是逐個(gè)羅列稀疏集的成員,成員資格過(guò)濾器方法通過(guò)使用稀疏集成員必須滿(mǎn)足的邏輯條件從稠密集成員中過(guò)濾出稀疏集的成員。不同集類(lèi)型的關(guān)系如

18、REF _Ref512801100 h * MERGEFORMAT 圖B.1所示。圖B. SEQ 圖B. * ARABIC 1 LINGO集合關(guān)系圖B.2 LINGO數(shù)據(jù)部分和初始部分在處理模型的數(shù)據(jù)時(shí),需要為集指派一些成員并且在LINGO求解模型之前為集的某些屬性指定值。為此,LINGO為用戶(hù)提供了兩個(gè)可選部分:輸入集成員和數(shù)據(jù)的數(shù)據(jù)部分(Data Section)和為決策變量設(shè)置初始值的初始部分(Init Section)。B.2.1 模型的數(shù)據(jù)部分 1.數(shù)據(jù)部分入門(mén)數(shù)據(jù)部分以關(guān)鍵字“data:”開(kāi)始,以關(guān)鍵字“enddata”結(jié)束。在這里,可以指定集成員、集的屬性。其語(yǔ)法如下:objec

19、t_list=value_list;對(duì)象列(object_list)包含要指定值的屬性名、要設(shè)置集成員的集名,用逗號(hào)或空格隔開(kāi)。一個(gè)對(duì)象列中至多有一個(gè)集名,而屬性名可以有任意多。如果對(duì)象列中有多個(gè)屬性名,那么它們的類(lèi)型必須一致。數(shù)值列(value_list)包含要分配給對(duì)象列中的對(duì)象的值,用逗號(hào)或空格隔開(kāi)。注意屬性值的個(gè)數(shù)必須等于集成員的個(gè)數(shù)。例B. SEQ 例B. * ARABIC 5sets: 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。也可采

20、用如下例子中的復(fù)合數(shù)據(jù)聲明(data statement)實(shí)現(xiàn)同樣的功能。例B. SEQ 例B. * ARABIC 6sets: set1/A,B,C/: X,Y;endsetsdata: X,Y=1 4 2 5 3 6;enddata REF _Ref512803707 h * MERGEFORMAT 例B.6中可能會(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è)索引處依次分配數(shù)值列中的前n個(gè)對(duì)象,然后在n個(gè)對(duì)象的第2個(gè)索引處依次分配數(shù)值列中緊接著的n個(gè)對(duì)象,以此類(lèi)推。2.參數(shù)輸入在

21、數(shù)據(jù)部分也可以指定一些標(biāo)量變量(scalar variables)。當(dāng)一個(gè)標(biāo)量變量在數(shù)據(jù)部分確定時(shí),稱(chēng)之為參數(shù)。例如,假設(shè)模型中用利率8%作為一個(gè)參數(shù),就可以輸入一個(gè)利率作為參數(shù)。例B. SEQ 例B. * ARABIC 7data: interest_rate=0.08;enddata實(shí)際中也可以同時(shí)指定多個(gè)參數(shù)。例B. SEQ 例B. * ARABIC 8data: interest_rate,inflation_rate=0.08 0.03;enddata3.實(shí)時(shí)數(shù)據(jù)處理在某些情況,對(duì)于模型中的某些數(shù)據(jù)并不是定值。比如模型中有一個(gè)通貨膨脹率的參數(shù),如果在2%6%范圍內(nèi),對(duì)不同的值求解模型

22、,觀察模型的結(jié)果對(duì)通貨膨脹的依賴(lài)程度。那么把這種情況稱(chēng)為實(shí)時(shí)數(shù)據(jù)處理。在本該放數(shù)的地方輸入一個(gè)問(wèn)號(hào)(?)。例B. SEQ 例B. * ARABIC 9data: interest_rate,inflation_rate=0.08 ?;enddata圖B. SEQ 圖B. * ARABIC 2 交互式輸入對(duì)話(huà)框每一次求解模型時(shí),LINGO都會(huì)提示為參數(shù)inflation_rate輸入一個(gè)值。在WINDOWS操作系統(tǒng)下,將會(huì)接收到一個(gè)類(lèi)似 REF _Ref512826490 h * MERGEFORMAT 圖B.2的對(duì)話(huà)框。直接輸入一個(gè)值后再單擊OK按鈕,LINGO就會(huì)把輸入的值指定給inflat

23、ion_rate,然后繼續(xù)求解模型。 除了參數(shù)之外,也可以實(shí)時(shí)輸入集的屬性值,但不允許實(shí)時(shí)輸入集成員名。 4.指定屬性為一個(gè)值可以在數(shù)據(jù)聲明的右邊輸入一個(gè)值來(lái)把所有的成員的該屬性指定為一個(gè)值??聪旅娴睦?。例B. SEQ 例B. * ARABIC 10sets: days /MO,TU,WE,TH,FR,SA,SU/:needs;endsetsdata: needs = 20;enddata REF _Ref512826931 h * MERGEFORMAT 例B.10中LINGO將用20指定days集的所有成員的needs屬性。對(duì)于多個(gè)屬性的情形,見(jiàn)下例。例B. SEQ 例B. * ARAB

24、IC 11sets: days /MO,TU,WE,TH,FR,SA,SU/:needs,cost;endsetsdata: needs cost = 20 100;enddata 5.數(shù)據(jù)部分的未知數(shù)值表示有時(shí)只想為一個(gè)集的部分成員的某個(gè)屬性指定值,而讓其余成員的該屬性保持未知,以便讓LINGO去求出它們的最優(yōu)值。在數(shù)據(jù)聲明中輸入一個(gè)逗號(hào)(數(shù)據(jù)之間的逗號(hào)分隔符不計(jì)入)表示該位置對(duì)應(yīng)的集成員的屬性值未知。兩個(gè)逗號(hào)間可以有空格。例B. SEQ 例B. * ARABIC 12sets: years/1.5/: capacity;endsetsdata: capacity = , 34, 20 ,

25、, ;enddata屬性capacity的第2個(gè)和第3個(gè)值分別為34和20,其余的未知。這里34和20之間的逗號(hào)是數(shù)據(jù)分隔符,第1個(gè)、第3個(gè)、第4個(gè)逗號(hào)表示未知值。B.2.2 模型的初始部分初始部分是LINGO提供的另一個(gè)可選部分。在初始部分中,與數(shù)據(jù)部分中的數(shù)據(jù)聲明相同,可以輸入初始聲明(initialization statement)。在實(shí)際問(wèn)題建模時(shí),初始部分并不起到描述模型的作用,在初始部分輸入的值僅被LINGO求解器當(dāng)作初始點(diǎn)來(lái)用,并且僅僅對(duì)非線(xiàn)性模型有用。這與數(shù)據(jù)部分指定變量的值不同,LINGO求解器可以自由改變初始部分初始化的變量的值。一個(gè)初始部分以“init:”開(kāi)始,以“en

26、dinit”結(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ù)值。例B. SEQ 例B. * ARABIC 13init: X, Y = 0, 0.1;endinitY=log(X);X2+Y2=1;好的初始點(diǎn)會(huì)減少模型的求解時(shí)間。B.3 LINGO函數(shù)B.3.1 運(yùn)算符及其優(yōu)先級(jí) LINGO中的運(yùn)算符可以分為3類(lèi):算法運(yùn)算符、邏輯運(yùn)算符和關(guān)系運(yùn)算符。1.算術(shù)運(yùn)算符算術(shù)運(yùn)算符是針對(duì)數(shù)值進(jìn)行操作的。LINGO提供了5種二元運(yùn)算符:(求冪)、(乘)、(除)、(

27、加)、(減)。LINGO唯一的一元算術(shù)運(yùn)算符是取反運(yùn)算“”。運(yùn)算符的運(yùn)算次序?yàn)閺淖蟮接野磧?yōu)先級(jí)高低來(lái)執(zhí)行。運(yùn)算的次序可以用圓括號(hào)“()”來(lái)改變。2.邏輯運(yùn)算符在LINGO中,邏輯運(yùn)算符主要用于集循環(huán)函數(shù)的條件表達(dá)式中,來(lái)控制在函數(shù)中哪些集成員被包含,哪些被排斥。在創(chuàng)建稀疏集時(shí)用在成員資格過(guò)濾器中。LINGO具有個(gè)邏輯運(yùn)算符,這些運(yùn)算符分為兩類(lèi):#and#(與),#or#(或),#not#(非) ,這三個(gè)運(yùn)算符是參與邏輯值之間的運(yùn)算,其結(jié)果還是邏輯值;#eq#(等于),#ne#(不等于),#gt#(大于),#ge#(大于等于),#lt#(小于),#le#(小于等于)是數(shù)與數(shù)之間的比較運(yùn)算符,其結(jié)

28、果為邏輯值。3.關(guān)系運(yùn)算符LINGO中有3個(gè)關(guān)系運(yùn)算符:(等價(jià)于(等價(jià)于=,大于等于),=(等于)。注意LINGO中優(yōu)化模型的約束一般沒(méi)有嚴(yán)格大于、嚴(yán)格小于。在LINGO中,關(guān)系運(yùn)算符主要是被用在模型中,來(lái)指定一個(gè)表達(dá)式的左邊是否等于、小于等于、或者大于等于右邊,形成模型的一個(gè)約束條件。關(guān)系運(yùn)算符與邏輯運(yùn)算符#eq#、#le#、#ge#截然不同。運(yùn)算符的優(yōu)先級(jí)如 REF _Ref513044925 h * MERGEFORMAT 表B.3所示。表B. SEQ 表B. * ARABIC 3 運(yùn)算符的優(yōu)先級(jí)優(yōu)先級(jí)運(yùn)算符高級(jí)#not#,-(取反),#eq#,#ne#,#gt#,#ge#,#lt#,#

29、le#and#,#or#最低B.3.2 LINGO函數(shù)簡(jiǎn)介1.基本數(shù)學(xué)函數(shù)LINGO中有相當(dāng)豐富的數(shù)學(xué)函數(shù),這些函數(shù)的用法簡(jiǎn)單。 REF _Ref875673 h 表B.4對(duì)各個(gè)函數(shù)的用法做了簡(jiǎn)單介紹。表B. SEQ 表B. * ARABIC 4 基本數(shù)學(xué)函數(shù)函數(shù)調(diào)用格式含義abs(x)返回x的絕對(duì)值。sin(x)返回x的正弦值(x的單位是弧度)。cos(x)返回x的余弦值(x的單位是弧度)。tan(x)返回x的正切值(x的單位是弧度)。exp(x)返回ex的值。log(x)返回x的自然對(duì)數(shù)值。lgm(x)返回x的伽瑪(Gamma)函數(shù)的自然對(duì)數(shù)值。mod(x,y)返回x對(duì)y取模的結(jié)果。sig

30、n(x)返回x的符號(hào)值。pow(x,y)返回xy的值。sqr(x)返回x的平方。sqrt(x)返回x的正平方根值。floor(x)返回x的整數(shù)部分。當(dāng)x=0時(shí),返回不超過(guò)x的最大整數(shù);當(dāng)x= a(j);end求得需要的總?cè)藬?shù)最少為22人,其中每天的安排如 REF _Ref513053212 h * MERGEFORMAT 表B.5所示。表B. SEQ 表B. * ARABIC 5 每天的人數(shù)安排星期星期一星期二星期三星期四星期五星期六星期日人數(shù)82063304.變量界定函數(shù)變量界定函數(shù)能夠?qū)崿F(xiàn)對(duì)變量取值范圍的附加限制,共4種:bin(x):限制x為0或1;bnd(L,x,U):限制LxU;fr

31、ee(x):取消對(duì)變量x的默認(rèn)下界為0的限制,即x可以取任意實(shí)數(shù);gin(x):限制x為整數(shù)。在默認(rèn)情況下,LINGO規(guī)定變量是非負(fù)的,也就是說(shuō)下界為0,上界為+。free取消了默認(rèn)的下界為0的限制,使變量也可以取負(fù)值。bnd用于設(shè)定一個(gè)變量的上下界,它也可以取消默認(rèn)下界為0的約束。5.概率函數(shù)(1)pbn(p,n,x)二項(xiàng)分布的分布函數(shù)在x點(diǎn)的取值。當(dāng)n和(或)x不是整數(shù)時(shí),用線(xiàn)性插值法進(jìn)行計(jì)算。(2)pcx(n,x)自由度為n的2分布的分布函數(shù)在x點(diǎn)的取值。(3)peb(a,x)當(dāng)?shù)竭_(dá)負(fù)荷(平均服務(wù)強(qiáng)度)為a,服務(wù)系統(tǒng)有x個(gè)服務(wù)臺(tái),且系統(tǒng)容量無(wú)限時(shí)的Erlang繁忙概率。(4)pel(a,

32、x)當(dāng)?shù)竭_(dá)負(fù)荷(平均服務(wù)強(qiáng)度)為a,服務(wù)系統(tǒng)有x個(gè)服務(wù)臺(tái),且不允許排隊(duì)時(shí)的Erlang繁忙概率。(5)pfd(n,d,x)自由度為n和d的F分布的分布函數(shù)在x點(diǎn)的取值。(6)pfs(a,x,c)當(dāng)負(fù)荷上限為a,顧客數(shù)為c,平行服務(wù)臺(tái)數(shù)量為x時(shí),有限源的Poisson服務(wù)系統(tǒng)的等待或返修顧客數(shù)的期望值。a等于顧客數(shù)乘以平均服務(wù)時(shí)間,再除以平均返修時(shí)間。當(dāng)c和(或)x不是整數(shù)時(shí),采用線(xiàn)性插值進(jìn)行計(jì)算。(7)phg(pop,g,n,x)超幾何(Hypergeometric)分布的分布函數(shù)在x點(diǎn)的取值。pop表示產(chǎn)品總數(shù),g是正品總數(shù)。從所有產(chǎn)品中任意取出n(npop)件,取出的正品數(shù)為x。pop,g

33、,n和x都可以是非整數(shù),這時(shí)采用線(xiàn)性插值進(jìn)行計(jì)算。(8)ppl(a,x)Poisson分布的線(xiàn)性損失函數(shù),即返回max(0,x)的期望值,其中隨機(jī)變量服從均值為a的Poisson分布。(9)pps(a,x)均值為a的Poisson分布的分布函數(shù)在x點(diǎn)的取值。當(dāng)x不是整數(shù)時(shí),采用線(xiàn)性插值進(jìn)行計(jì)算。(10)psl(x)單位正態(tài)線(xiàn)性損失函數(shù),即返回max(0,x)的期望值,其中隨機(jī)變量服從標(biāo)準(zhǔn)正態(tài)分布。(11)psn(x)標(biāo)準(zhǔn)正態(tài)分布的分布函數(shù)在x點(diǎn)的取值。(12)ptd(n,x)自由度為n的t分布的分布函數(shù)在x點(diǎn)的取值。(13)qrand(seed)產(chǎn)生 (0,1)區(qū)間上的擬隨機(jī)數(shù)向量。qrand

34、只允許在模型的數(shù)據(jù)部分使用,它將用擬隨機(jī)數(shù)填滿(mǎn)集屬性。通常,聲明一個(gè)mn的二維表,m表示運(yùn)行實(shí)驗(yàn)的次數(shù),n表示每次實(shí)驗(yàn)所需的隨機(jī)數(shù)的個(gè)數(shù)。在行內(nèi),隨機(jī)數(shù)是獨(dú)立分布的;在行間,隨機(jī)數(shù)是非常均勻的。這些隨機(jī)數(shù)是用“分層取樣”的方法產(chǎn)生的。例B. SEQ 例B. * ARABIC 21 model:sets: rows/1.4/; cols/1.2/; table(rows,cols): x;endsetsdata: X=qrand(); !qrand(seed)中沒(méi)有指明種子,LINGO用系統(tǒng)時(shí)間構(gòu)造種子;enddataend(14)rand(seed)返回0和1間的一個(gè)偽隨機(jī)數(shù),依賴(lài)于指定的種子

35、。典型用法是U(I+1)=rand(U(I)。注意如果seed不變,那么產(chǎn)生的隨機(jī)數(shù)也不變。例B. SEQ 例B. * ARABIC 22 利用rand產(chǎn)生15個(gè)服從標(biāo)準(zhǔn)正態(tài)分布的隨機(jī)數(shù)和自由度為2的分布的隨機(jī)數(shù)。model:sets: series/1.15/: u, znorm, zt;endsets u(1)=rand(0.1234); !產(chǎn)生第一個(gè)(0,1)區(qū)間上隨機(jī)數(shù); for(series(i)|i#gt# 1:u(i)=rand(u(i-1); !產(chǎn)生其余的(0,1)區(qū)間上的隨機(jī)數(shù); for(series(i): psn(znorm(i)=u(i); !正態(tài)分布隨機(jī)數(shù); ptd(

36、2,zt(i)=u(i); !自由度為2的t分布隨機(jī)數(shù); free(znorm(i); free(zt(i); !ZNORM 和 ZT 可以是負(fù)數(shù);end6.金融函數(shù)目前LINGO提供了兩個(gè)金融函數(shù)。(1)fpa(I,N)返回如下情形的凈現(xiàn)值:?jiǎn)挝粫r(shí)段利率為I,連續(xù)個(gè)時(shí)段支付,每個(gè)時(shí)段支付單位費(fèi)用。若每個(gè)時(shí)段支付x單位的費(fèi)用,則凈現(xiàn)值可用x乘以fpa(I,N)算得。fpa的計(jì)算公式為.例B. SEQ 例B. * ARABIC 23 貸款總金額50000元,貸款年利率5.31%,采取分期付款方式(每年年末還固定金額,直至還清)。問(wèn)擬貸款10年,每年需償還多少元?解 設(shè)貸款的總額為元,年利率為,總

37、貸款時(shí)間為年,每年的等額還款額為元。設(shè)第年的欠款為(),則有遞推關(guān)系,.于是有,可以遞推地得到因而得到貸款總額、年利率、總貸款時(shí)間年、每年的還款額的如下關(guān)系, MACROBUTTON MTPlaceRef * MERGEFORMAT SEQ MTEqn h * MERGEFORMAT ( SEQ MTEqn c * Arabic * MERGEFORMAT 1)所以每年的還款額. MACROBUTTON MTPlaceRef * MERGEFORMAT SEQ MTEqn h * MERGEFORMAT ( SEQ MTEqn c * Arabic * MERGEFORMAT 2)代入數(shù)據(jù),計(jì)

38、算得每年需償還元。計(jì)算的LINGO程序如下:A0=50000; r=0.0531; N=10;A0=x1*fpa(r,N); !利用LINGO函數(shù)解方程計(jì)算;x2=A0*(1+r)N*r/(1+r)N-1); !利用還款額公式 GOTOBUTTON ZEqnNum480782 * MERGEFORMAT REF ZEqnNum480782 * Charformat ! * MERGEFORMAT (2)計(jì)算(2)fpl(I,N)返回如下情形的凈現(xiàn)值:?jiǎn)挝粫r(shí)段利率為I,第N個(gè)時(shí)段支付單位費(fèi)用。fpl(I,N)的計(jì)算公式為 .這兩個(gè)函數(shù)間的關(guān)系為 .例B. SEQ 例B. * ARABIC 24

39、驗(yàn)證.驗(yàn)證的LINGO程序如下:sets:num/1.10/;endsetsr=0.05; a=fpa(r,10);b=sum(num(i):fpl(r,i);B.4 LINGO與其他文件的數(shù)據(jù)傳遞B.4.1 通過(guò)文本文件傳遞數(shù)據(jù)在LINGO軟件中,通過(guò)文本文件輸入數(shù)據(jù)使用的是file函數(shù),輸出結(jié)果使用的是text函數(shù)。下面介紹這兩個(gè)函數(shù)的詳細(xì)用法。1.通過(guò)文本文件輸入數(shù)據(jù)file函數(shù)通??梢栽诩隙魏蛿?shù)據(jù)段使用,但不允許嵌套使用。這個(gè)函數(shù)的一般用法是file(filename);其中filename為存放數(shù)據(jù)的文件名,文件名可以包含完整的路徑名,沒(méi)有指定路徑時(shí)表示在當(dāng)前目錄下尋找這個(gè)文件。該

40、文件必須是文本(或ASCII碼文件),可以用Windows附件中的寫(xiě)字板或記事本創(chuàng)建,文件中可以包含多個(gè)記錄,記錄之間用“”分開(kāi),同一記錄內(nèi)的多個(gè)數(shù)據(jù)之間用逗號(hào)或空格分開(kāi)。執(zhí)行一次file,讀入一個(gè)記錄的數(shù)據(jù)。下面通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明。例B. SEQ 例B. * ARABIC 25 file函數(shù)的用法示例。假設(shè)存放數(shù)據(jù)的文本文件gdataB25.txt的內(nèi)容如下:Seattle,Detroit,Chicago,DenverCOST,NEED,SUPPLY,ORDERED12,28,15,201600,1800,1200,10001700,1900,1300,1100現(xiàn)在,在LINGO模型窗

41、口中建立如下LINGO模型:model:sets:myset/file(gdataB25.txt)/:file(gdataB25.txt);endsetsdata:cost=file(gdataB25.txt); !LINGO是不區(qū)分大小寫(xiě)字母的;need=file(gdataB25.txt);supply=file(gdataB25.txt);enddataend運(yùn)行上述LINGO模型的結(jié)果為:文本文件gdataB25.txt中第一行的4個(gè)字符串賦值給集合myset的4個(gè)成員,第二行的4個(gè)字符串COST,NEED,SUPPLY,ORDERED(或cost,need,supply,ordere

42、d)成為集合myset的4個(gè)屬性,第三行的4個(gè)數(shù)值賦值給屬性cost,第四行的4個(gè)數(shù)值賦值給屬性need,第五行的4個(gè)數(shù)值賦值給屬性supply,未賦值的屬性ordered作為決策向量。顯然,當(dāng)僅僅是輸入數(shù)據(jù)改變了,只需要改變輸入文件gdataB25.txt,而程序無(wú)需改變,這是非常有利的,因?yàn)檫@樣就做到了程序與數(shù)據(jù)的分離。2.通過(guò)文本文件輸出數(shù)據(jù)text函數(shù)用于文本文件輸出數(shù)據(jù),通常只在數(shù)據(jù)段使用這個(gè)函數(shù)。這個(gè)函數(shù)的語(yǔ)法為:text(filename,a)它用于數(shù)據(jù)段中將解答結(jié)果輸出到文本文件filename中,當(dāng)省略filename時(shí),結(jié)果送到標(biāo)準(zhǔn)的輸出設(shè)備(通常就是屏幕)。當(dāng)有第二個(gè)參數(shù)

43、a時(shí),數(shù)據(jù)是以追加(append)的方式輸出到文本文件,否則,是新建一個(gè)文本文件(如果文件已經(jīng)存在,則其中的內(nèi)容將會(huì)被覆蓋)供輸出數(shù)據(jù)。text函數(shù)的一般調(diào)用格式為:text(results.txt)=屬性名;其中results.txt是文件名,它可以由用戶(hù)按自己的意愿命名,該函數(shù)的執(zhí)行結(jié)果是把屬性名對(duì)應(yīng)的取值輸出到文本文件results.txt中。例B. SEQ 例B. * ARABIC 26 已知某種商品6個(gè)倉(cāng)庫(kù)的存貨量,8個(gè)客戶(hù)對(duì)該商品的需求量,單位商品運(yùn)價(jià)如 REF _Ref513735941 h * MERGEFORMAT 表B.6所示。試確定6個(gè)倉(cāng)庫(kù)到8個(gè)客戶(hù)的商品調(diào)運(yùn)數(shù)量,使總的

44、運(yùn)輸費(fèi)用最小。表B. SEQ 表B. * ARABIC 6 商品信息數(shù)據(jù)表單位運(yùn)價(jià) 客戶(hù)倉(cāng)庫(kù)V1V2V3V4V5V6V7V8存貨量W16267425960W24953858255W35219743351w47673927143W52395726541W65522814352需求量3537223241324338解 設(shè)表示第個(gè)倉(cāng)庫(kù)運(yùn)到第個(gè)客戶(hù)的商品數(shù)量,表示第個(gè)倉(cāng)庫(kù)到第個(gè)客戶(hù)的單位運(yùn)價(jià),表示第個(gè)客戶(hù)的需求量,表示第個(gè)倉(cāng)庫(kù)的存貨量,建立如下線(xiàn)性規(guī)劃模型, s.t. 在 REF _Ref513753854 h * MERGEFORMAT 例B.26的運(yùn)輸問(wèn)題中,使用文本文件輸入和輸出數(shù)據(jù)。求得的最小

45、運(yùn)輸費(fèi)用為664,求得的最優(yōu)解為,其他.求解的LINGO程序如下:model:sets: warehouses/1.6/: e; vendors/1.8/: d; links(warehouses,vendors): c,x;endsetsdata: !數(shù)據(jù)部分;e=file(gdataB26_1.txt); d=file(gdataB26_1.txt); c=file(gdataB26_1.txt); text(gdataB26_2.txt)=table(x); !把求解結(jié)果以表格形式輸出到文本文件gd252.txt中;enddatamin=sum(links(i,j): c(i,j)*x(

46、i,j); !目標(biāo)函數(shù);for(warehouses(i):sum(vendors(j): x(i,j)=e(i); !約束條件;for(vendors(j):sum(warehouses(i): x(i,j)=d(j);end其中文本文件gdataB26_1.txt中的內(nèi)容如下:60 55 51 43 41 5235 37 22 32 41 32 43 386 2 6 7 4 2 5 94 9 5 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3注B. SEQ 注B. * ARABIC 5 文本文件gd

47、ataB26_1.txt必須放在LINGO程序所在目錄下。注B. SEQ 注B. * ARABIC 6 在 REF _Ref513753854 h * MERGEFORMAT 例B.26數(shù)學(xué)模型中是一個(gè)矩陣,即二維向量,在上述LINGO程序中,屬性c數(shù)據(jù)(LINGO中通過(guò)c(i,j)引用屬性的值)的排列方式為 c(1,1),c(1,2),c(1,8),c(2,1),c(2,2), ,c(2,8), ,c(6,1),c(6,2), ,c(6,8);即LINGO中的數(shù)據(jù)是逐行排列的。B.4.2 LINGO與EXCEL文件之間的數(shù)據(jù)傳遞LINGO通過(guò)ole函數(shù)實(shí)現(xiàn)與EXCEL文件傳遞數(shù)據(jù),使用ole

48、函數(shù)既可以從EXCEL文件中輸入數(shù)據(jù),也能把計(jì)算結(jié)果輸出到EXCEL文件。1.通過(guò)EXCEL文件輸入數(shù)據(jù)ole函數(shù)只能用在模型的集定義段、數(shù)據(jù)段和初始段。使用格式為object_list = OLE(spreadsheet_file , range_name_list);其中spreadsheet_file是電子表格文件的名稱(chēng),應(yīng)當(dāng)包括擴(kuò)展名(如*.xls,*.xlsx等),還可以包含完整的路徑名,只要字符數(shù)不超過(guò)64即可;range_name_list是指文件中包含數(shù)據(jù)的單元范圍(單元范圍的格式與EXCEL中工作表的單元范圍格式一致)。其中spreadsheet_file和range_nam

49、e_list都是可以缺省的。具體地說(shuō),當(dāng)從EXCEL中向LINGO模型中輸入數(shù)據(jù)時(shí),在集定義段可以直接采用“ole()”的形式讀入集成員,但在數(shù)據(jù)段和初始段應(yīng)當(dāng)采用“屬性=ole()”的賦值形式。2.通過(guò)EXCEL文件輸出數(shù)據(jù) ole函數(shù)能把數(shù)據(jù)輸出到EXCEL文件,調(diào)用格式為OLE( spreadsheet_file , range_name_list) = object_list;其中對(duì)象列表object_list中的元素用逗號(hào)分隔,spreadsheet_file是輸出值所保存到的EXCEL文件名,如果文件名缺省,默認(rèn)的文件名是當(dāng)前EXCEL軟件所打開(kāi)的文件。域名列表range_name

50、_list是表單中的域名,所在的單元用于保存對(duì)象列表中的屬性值,表單中的域名必須與對(duì)象列表中的屬性一一對(duì)應(yīng),并且域名所對(duì)應(yīng)的單元大?。〝?shù)據(jù)塊的大?。┎粦?yīng)小于變量所包含的數(shù)據(jù),如果單元中原來(lái)有數(shù)據(jù),則ole輸出語(yǔ)句運(yùn)行后原來(lái)的數(shù)據(jù)將被新的數(shù)據(jù)覆蓋。 要注意ole函數(shù)用于輸出和輸入之間的差異,只要記住 ole( ) = object_list; 輸出, object_list = ole( ); 輸入。例B. SEQ 例B. * ARABIC 27(續(xù) REF _Ref513753854 h * MERGEFORMAT 例B.26)在 REF _Ref513753854 h * MERGEFORM

51、AT 例B.26的運(yùn)輸問(wèn)題中,使用EXCEL文件輸入和輸出數(shù)據(jù)。首先,我們用EXCEL建立一個(gè)名為gdata27.xlsx的EXCEL數(shù)據(jù)文件,參見(jiàn) REF _Ref513754718 h * MERGEFORMAT 圖B.4。為了能夠通過(guò)ole函數(shù)與LINGO傳遞數(shù)據(jù),我們需要對(duì)這個(gè)文件中的數(shù)據(jù)進(jìn)行命名,具體做法是:我們用鼠標(biāo)選中這個(gè)表格的A1:H6單元,然后選擇EXCEL的菜單命令“插入名稱(chēng)定義”,這時(shí)將會(huì)彈出一個(gè)對(duì)話(huà)框,請(qǐng)您輸入名字,例如可以將它命名為cost(LINGO禁止使用c作為域名),同理,我們將I1:I7單元命名為e,將A7:H7單元命令為d,將A9:H14單元命名為x。一般來(lái)

52、說(shuō),這些單元取什么名字是無(wú)所謂的,只要LINGO調(diào)用時(shí)使用對(duì)應(yīng)的名字就可以了。但最好是這些單元的名稱(chēng)(稱(chēng)為域名)與LINGO對(duì)應(yīng)的屬性名同名,將來(lái)LINGO調(diào)用時(shí)就可以省略域名。圖B. SEQ 圖B. * ARABIC 4 運(yùn)輸問(wèn)題的已知數(shù)據(jù)model:sets: warehouses/1.6/: e; vendors/1.8/: d; links(warehouses,vendors): c,x;endsetsdata: !數(shù)據(jù)部分;e=ole(gdataB27.xlsx); !域名與屬性名相同時(shí),調(diào)用時(shí)省略域名;d=ole(gdataB27.xlsx); c=ole(gdataB27.xl

53、sx,cost); !域名與屬性名不相同時(shí),調(diào)用時(shí)必須提供域名;ole(gdataB27.xlsx)=x; !把求解結(jié)果輸出到EXCEL文件;enddatamin=sum(links(i,j): c(i,j)*x(i,j); !目標(biāo)函數(shù);for(warehouses(i):sum(vendors(j): x(i,j)=e(i); !約束條件;for(vendors(j):sum(warehouses(i): x(i,j)=d(j);end求解結(jié)果的輸出內(nèi)容如 REF _Ref513754727 h * MERGEFORMAT 圖B.5所示。圖B. SEQ 圖B. * ARABIC 5 求解結(jié)果

54、的輸出數(shù)據(jù)注B. SEQ 注B. * ARABIC 7 LINGO要輸入外部EXCEL文件中的數(shù)據(jù),必須預(yù)先用EXCEL軟件把要操作的EXCEL文件打開(kāi),否則LINGO是無(wú)法輸入數(shù)據(jù)的。例B. SEQ 例B. * ARABIC 28(續(xù) REF _Ref513756428 h * MERGEFORMAT 例B.27)使用EXCEL的單元范圍作為域名,輸入或輸出屬性的值。我們使用EXCEL的單元范圍作為域名,不需要像 REF _Ref513756428 h * MERGEFORMAT 例B.27那樣,需要預(yù)先定義輸入或輸出數(shù)據(jù)對(duì)應(yīng)的域名,才能向LINGO輸入或輸出數(shù)據(jù)。model:sets: w

55、arehouses/1.6/: e; vendors/1.8/: d; links(warehouses,vendors): c,x;endsetsdata: !數(shù)據(jù)部分;e=ole(gdataB27.xlsx, I1:I7); d=ole(gdataB27.xlsx, A7:H7); c=ole(gdataB27.xlsx, A1:H6); ole(gdataB27.xlsx,A9:H14)=x; !把求解結(jié)果輸出到EXCEL文件;enddatamin=sum(links(i,j): c(i,j)*x(i,j); !目標(biāo)函數(shù);for(warehouses(i):sum(vendors(j):

56、 x(i,j)=e(i); !約束條件;for(vendors(j):sum(warehouses(i): x(i,j)=d(j);endB.5 LINGO子模型B.5.1 子模型的定義和求解在 LINGO 9.0 及更早的版本中,在每個(gè)LINGO 模型窗口中只允許有一個(gè)優(yōu)化模型,可以稱(chēng)為主模型(MAIN MODEL)。在LINGO 10.0及以后的版本中,每個(gè)LINGO 模型窗口中除了主模型外,用戶(hù)還可以定義子模型(SUBMODEL)。子模型可以在主模型的計(jì)算段中被調(diào)用,這就進(jìn)一步增強(qiáng)了LINGO的編程能力。子模型必須包含在主模型之內(nèi),即必須位于以“MODEL:”開(kāi)頭、以“END”結(jié)束的模塊

57、內(nèi)。同一個(gè)主模型中,允許定義多個(gè)子模型,所以每個(gè)子模型本身必須命名,其基本語(yǔ)法是:SUBMODEL submodel_name:可執(zhí)行語(yǔ)句(約束+目標(biāo)函數(shù));ENDSUBMODEL其中submodel_name是該子模型的名字,可執(zhí)行語(yǔ)句一般是一些約束語(yǔ)句,也可能包含目標(biāo)函數(shù),但不可以有自身單獨(dú)的集合段、數(shù)據(jù)段、初始段和計(jì)算段。也就是說(shuō),同一個(gè)主模型內(nèi)的變量都是全局變量,這些變量對(duì)主模型和所有子模型同樣有效。如果已經(jīng)定義了子模型 submodel_name,則在計(jì)算段中可以用語(yǔ)句“SOLVE(submodel_name);”求解這個(gè)子模型。同一個(gè)LINGO主模型中,允許定義多個(gè)子模型。例B.

58、SEQ 例B. * ARABIC 29 用LINGO求下列方程組的所有解。model:submodel maincon: !定義方程子模型;x2+y2=4;x2-y2=1;endsubmodelsubmodel con1: !定義附加約束子模型;free(x);x0;endsubmodelsubmodel con2: !定義附加約束子模型;free(y); y0;endsubmodelsubmodel con3: !定義附加約束子模型;free(x); free(y);x0; y0;endsubmodelcalc:solve(maincon); !調(diào)用子模型,求第一象限中的解;solve(ma

59、incon,con1); !調(diào)用兩個(gè)子模型,求第二象限中的解;solve(maincon,con2); !調(diào)用兩個(gè)子模型,求第四象限中的解;solve(maincon,con3); !調(diào)用兩個(gè)子模型,求第三象限中的解;endcalcend求上述LINGO模型時(shí),需要把求解器設(shè)置為全局求解器。依次調(diào)用4個(gè)子模型,求得方程組的解依次為;.例B. SEQ 例B. * ARABIC 30 分別求解以下4個(gè)優(yōu)化問(wèn)題: (1)在滿(mǎn)足約束且非負(fù)的條件下,求的最大值; (2)在滿(mǎn)足約束且非負(fù)的條件下,求的最小值; (3)在滿(mǎn)足約束且可取任何實(shí)數(shù)的條件下,求的最大值; (4)在滿(mǎn)足約束且可取任何實(shí)數(shù)的條件下,求

60、的最小值??梢跃帉?xiě)如下LINGO程序:model:submodel obj1:max=x-y;endsubmodelsubmodel obj2:min=x+y;endsubmodelsubmodel con1:x2+4*y2=1;endsubmodelsubmodel con2:free(x); free(y);endsubmodelcalc:write(問(wèn)題1的解:, newline(1); solve(obj1,con1);write(問(wèn)題2的解:, newline(1); solve(obj2,con1);write(問(wèn)題3的解:, newline(1); solve(obj1,con1

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論