版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、LINGO是用來(lái)求解線性和非線性優(yōu)化問(wèn)題的簡(jiǎn)易工具。LINGO內(nèi)置了一種建立最優(yōu)化模型的語(yǔ)言,可以簡(jiǎn)便地表達(dá)大規(guī)模問(wèn)題,利用LINGO高效的求解器可快速求解并分析結(jié)果。丁的蛙泳成績(jī)退步到丁的蛙泳成績(jī)退步到115”2;戊的自由泳成績(jī)進(jìn);戊的自由泳成績(jī)進(jìn)步到步到57”5, 組成接力隊(duì)的方案是否應(yīng)該調(diào)整組成接力隊(duì)的方案是否應(yīng)該調(diào)整?如何選拔隊(duì)員組成如何選拔隊(duì)員組成4 4 100100米混合泳接力隊(duì)米混合泳接力隊(duì)? ? 甲甲乙乙丙丙丁丁戊戊蝶泳蝶泳106”857”2118”110”107”4仰泳仰泳115”6106”107”8114”2111”蛙泳蛙泳127”106”4124”6109”6123”8自
2、由泳自由泳58”653”59”457”2102”4 5名候選人的名候選人的百米成績(jī)百米成績(jī)窮舉法窮舉法:組成接力隊(duì)的方案共有組成接力隊(duì)的方案共有5!=120種種。某公司有某公司有6個(gè)建筑工地,位置坐標(biāo)為個(gè)建筑工地,位置坐標(biāo)為(ai, bi) (單位:公單位:公里里),水泥日用量水泥日用量di (單位:噸)單位:噸)ia1.258.750.55.7537.25b1.250.754.7556.57.75d35476111)現(xiàn)有 2 料場(chǎng),位于 A (5, 1), B (2, 7),記(xj,yj),j=1,2, 日儲(chǔ)量 ej各有 20 噸。假設(shè):料場(chǎng)假設(shè):料場(chǎng)和工地之間和工地之間有直線道路有直線道
3、路目標(biāo):制定每天的供應(yīng)計(jì)劃,即從 A, B 兩料場(chǎng)分別向各工地運(yùn)送多少噸水泥,使總的噸公里數(shù)最小。1桶牛奶 3公斤A1 12小時(shí) 8小時(shí) 4公斤A2 或獲利24元/公斤 獲利16元/公斤 50桶牛奶桶牛奶 時(shí)間時(shí)間480小時(shí)小時(shí) 至多加工至多加工100公斤公斤A1 制訂生產(chǎn)計(jì)劃,使每天獲利最大制訂生產(chǎn)計(jì)劃,使每天獲利最大 35元可買(mǎi)到元可買(mǎi)到1桶牛奶,買(mǎi)嗎?若買(mǎi),每天最多買(mǎi)多少桶牛奶,買(mǎi)嗎?若買(mǎi),每天最多買(mǎi)多少? 可聘用臨時(shí)工人,付出的工資最多是每小時(shí)幾元可聘用臨時(shí)工人,付出的工資最多是每小時(shí)幾元? A1的獲利增加到的獲利增加到 30元元/公斤,應(yīng)否改變生產(chǎn)計(jì)劃?公斤,應(yīng)否改變生產(chǎn)計(jì)劃? 每天
4、:每天:線性規(guī)劃模型線性規(guī)劃模型 奶制品生產(chǎn)計(jì)劃奶制品生產(chǎn)計(jì)劃 2022-5-26優(yōu)化問(wèn)題三要素:決策變量;目標(biāo)函數(shù);約束條件優(yōu)化問(wèn)題三要素:決策變量;目標(biāo)函數(shù);約束條件約約束束條條件件決策變量決策變量?jī)?yōu)化問(wèn)題的一般形式優(yōu)化問(wèn)題的一般形式njiDxljxgmixhtsxf,.,1, 0)(,.,1, 0)(. .)(min 無(wú)約束優(yōu)化無(wú)約束優(yōu)化(沒(méi)有約束沒(méi)有約束)與約束優(yōu)化與約束優(yōu)化(有約束有約束) 可行解(只滿足約束)與最優(yōu)解可行解(只滿足約束)與最優(yōu)解(取到最優(yōu)值取到最優(yōu)值)目標(biāo)函數(shù)目標(biāo)函數(shù)連續(xù)優(yōu)化離散優(yōu)化連續(xù)優(yōu)化LINDO/LINGO軟件能求解的模型軟件能求解的模型優(yōu)化優(yōu)化線性規(guī)劃線性規(guī)
5、劃非線性規(guī)劃非線性規(guī)劃二次規(guī)劃二次規(guī)劃連續(xù)優(yōu)化連續(xù)優(yōu)化整數(shù)規(guī)劃整數(shù)規(guī)劃 LINDOLINGO問(wèn)題求解的難度增加 1 LINGO1 LINGO快速入門(mén)快速入門(mén) 當(dāng)你在windows下開(kāi)始運(yùn)行LINGO系統(tǒng)時(shí),會(huì)得到類似下面的一個(gè)窗口:外層是主框架窗口,包含了所有菜單命令和工具條,其它所有的窗口將被包含在主窗口之下。在主窗口內(nèi)的標(biāo)題為L(zhǎng)INGO Model LINGO1的窗口是LINGO的默認(rèn)模型窗口,建立的模型都都要在該窗口內(nèi)編碼實(shí)現(xiàn)。工具欄工具欄File|Open(F3)打開(kāi)文件File|Print(F7)打印文件Edit|Copy(Ctrl+C)復(fù)制Edit|Undo(Ctrl+Z)取消操作
6、Edit|Find (Ctrl+F)查找LINGO|Solution(Alt+O)顯示解答E d i t | M a t c h Parenthesis(Ctrl+P)匹配括號(hào)LINGO|Options(Ctrl+I)選項(xiàng)設(shè)置Window|Close All (Alt+X)關(guān)閉所有窗口Help|Contents(F1)在線幫助File|New(F2)新建文件File|Save(F4)保存文件Edit|Cut(Ctrl+X)剪切Edit|Paste(Ctrl+V)粘貼Edit|Redo(Ctrl+Y)恢復(fù)操作Edit | Go To Line(Ctrl+T)定位某行LINGO|Solve (Ct
7、rl+S)求解模型LINGO|Picture(Ctrl+K)模型圖示W(wǎng)indow|Send to Back (Ctrl+B)窗口后置Window|Tile(Alt+T) 平鋪窗口上下文相關(guān)的幫助輸入窗口如下:輸入窗口如下:一個(gè)簡(jiǎn)單的一個(gè)簡(jiǎn)單的LINGO程序程序例例1.1 直接用LINGO來(lái)解如下二次規(guī)劃問(wèn)題: 40,322100. .123 . 02779821212122212121為整數(shù)xxxxxxtsxxxxxxMax程序語(yǔ)句輸入的備注:程序語(yǔ)句輸入的備注:LINGO總是根據(jù)總是根據(jù)“MAX=”或或“MIN=”尋找目標(biāo)函數(shù),尋找目標(biāo)函數(shù),而除注釋語(yǔ)句和而除注釋語(yǔ)句和TITLE語(yǔ)句外的其他
8、語(yǔ)句都是約束條語(yǔ)句外的其他語(yǔ)句都是約束條件,因此語(yǔ)句的順序并不重要件,因此語(yǔ)句的順序并不重要 。限定變量取整數(shù)值的語(yǔ)句為限定變量取整數(shù)值的語(yǔ)句為“GIN(X1)”和和“GIN(X2)”,不可以寫(xiě)成,不可以寫(xiě)成“GIN(2)”,否則,否則LINGO將把這個(gè)模型看成沒(méi)有整數(shù)變量。將把這個(gè)模型看成沒(méi)有整數(shù)變量。LINGO中函數(shù)一律需要以中函數(shù)一律需要以“”開(kāi)頭,其中整型變量開(kāi)頭,其中整型變量函數(shù)(函數(shù)(BIN、GIN)和上下界限定函數(shù)()和上下界限定函數(shù)(FREE、SUB、SLB)。而且)。而且0/1變量函數(shù)是變量函數(shù)是BIN函數(shù)。函數(shù)。LINGO編程的幾點(diǎn)注意事項(xiàng)編程的幾點(diǎn)注意事項(xiàng) :用LINGO
9、解優(yōu)化模型時(shí)已假定所有變量非負(fù)(除非用限定變量取值范圍的函數(shù)free或sub或slb另行說(shuō)明)。語(yǔ)句是組成LINGO模型的基本單位,每個(gè)語(yǔ)句都以分號(hào)結(jié)尾,編寫(xiě)程序時(shí)應(yīng)注意模型的可讀性。在英文輸入法下輸入程序和結(jié)尾的分號(hào) 。乘號(hào)用*表示。以感嘆號(hào)開(kāi)始的是說(shuō)明語(yǔ)句(說(shuō)明語(yǔ)句也需要以分號(hào)結(jié)束))。輸出結(jié)果:輸出結(jié)果:運(yùn)行菜單命令運(yùn)行菜單命令“LINGO|Solve或者或者 最優(yōu)整數(shù)解最優(yōu)整數(shù)解X=(35,65)最大利潤(rùn)最大利潤(rùn)=11077.5 ctrl+s 或者輸出結(jié)果備注:輸出結(jié)果備注:通過(guò)菜單 “WINDOW| Status Window”看到狀態(tài)窗口,可看到最佳目標(biāo)值“Best Obj”與問(wèn)題
10、的上界“Obj Bound”已經(jīng)是一樣的,當(dāng)前解的最大利潤(rùn)與這兩個(gè)值非常接近,是計(jì)算誤差引起的。如果采用全局最優(yōu)求解程序(后面介紹),可以驗(yàn)證它就是全局最優(yōu)解。LINGO是將它作為PINLP(純整數(shù)非線性規(guī)劃)來(lái)求解,因此找到的是局部最優(yōu)解。 LP QP NLP IP 全局優(yōu)化全局優(yōu)化(選選) ILP IQP INLP LINGO預(yù)處理程序預(yù)處理程序線性優(yōu)化求解程序線性優(yōu)化求解程序非線性優(yōu)化求解程序非線性優(yōu)化求解程序分枝定界管理程序分枝定界管理程序1. 確定常數(shù)確定常數(shù)2. 識(shí)別類型識(shí)別類型1. 單純形算法單純形算法2. 內(nèi)點(diǎn)算法內(nèi)點(diǎn)算法(選選)1、順序線性規(guī)劃法、順序線性規(guī)劃法(SLP) 2
11、、廣義既約梯度法、廣義既約梯度法(GRG) (選選) 3、多點(diǎn)搜索、多點(diǎn)搜索(Multistart) (選選) 例例1.2使用LINGO軟件計(jì)算6個(gè)發(fā)點(diǎn)8個(gè)收點(diǎn)的最小費(fèi)用運(yùn)輸問(wèn)題。產(chǎn)銷單位運(yùn)價(jià)如下表。使用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:cost*volume);!需求約束;for(vendors(J):sum(wareho
12、uses(I):volume(I,J)=demand(J);!產(chǎn)量約束;for(warehouses(I):sum(vendors(J):volume(I,J)=capacity(I); !這里是數(shù)據(jù);data:capacity=605551434152;demand=3537223241324338;cost=626742954953858252197433767392712395726555228143;enddataend然后點(diǎn)擊工具條上的按鈕即可。2LINGO中的集對(duì)實(shí)際問(wèn)題建模的時(shí)候,總會(huì)遇到一群或多群相聯(lián)系的對(duì)象,比如工廠、消費(fèi)者群體、交通工具和雇工等等。LINGO允許把這些相聯(lián)系
13、的對(duì)象聚合成集(sets)。一旦把對(duì)象聚合成集,就可以利用集來(lái)最大限度的發(fā)揮LINGO建模語(yǔ)言的優(yōu)勢(shì)?,F(xiàn)在我們將深入介紹如何創(chuàng)建集,并用數(shù)據(jù)初始化集的屬性。學(xué)完本節(jié)后,你對(duì)基于建模技術(shù)的集如何引入模型會(huì)有一個(gè)基本的理解。2.1為什么使用集集是LINGO建模語(yǔ)言的基礎(chǔ),是程序設(shè)計(jì)最強(qiáng)有力的基本構(gòu)件。借助于集,能夠用一個(gè)單一的、長(zhǎng)的、簡(jiǎn)明的復(fù)合公式表示一系列相似的約束,從而可以快速方便地表達(dá)規(guī)模較大的模型。 2.2 什么是集什么是集集是一群相聯(lián)系的對(duì)象,這些對(duì)象也稱為集的成員成員。一個(gè)集可能是一系列產(chǎn)品、卡車或雇員。每個(gè)集成員可能有一個(gè)或多個(gè)與之有關(guān)聯(lián)的特征,我們把這些特征稱為屬性屬性。屬性值可以
14、預(yù)先給定,也可以是未知的,有待于LINGO求解。例如,產(chǎn)品集中的每個(gè)產(chǎn)品可以有一個(gè)價(jià)格屬性;卡車集中的每輛卡車可以有一個(gè)牽引力屬性;雇員集中的每位雇員可以有一個(gè)薪水屬性,也可以有一個(gè)生日屬性等等。LINGO有兩種類型的集:原始集原始集(primitiveset)和派生集派生集(derived set)。一個(gè)原始集是由一些最基本的對(duì)象組成的。一個(gè)派生集是用一個(gè)或多個(gè)其它集來(lái)定義的,也就是說(shuō),它的成員來(lái)自于其它已存在的集。2.3 2.3 模型的集部分模型的集部分集部分是集部分是LINGOLINGO模型的一個(gè)可選部分。在模型的一個(gè)可選部分。在LINGOLINGO模型中使用集之前,必須在模型中使用集之
15、前,必須在集部分事先定義。集部分以關(guān)鍵字集部分事先定義。集部分以關(guān)鍵字“sets:”sets:”開(kāi)始,以開(kāi)始,以“endsets”endsets”結(jié)束。一結(jié)束。一個(gè)模型可以沒(méi)有集部分,或有一個(gè)簡(jiǎn)單的集部分,或有多個(gè)集部分。一個(gè)集個(gè)模型可以沒(méi)有集部分,或有一個(gè)簡(jiǎn)單的集部分,或有多個(gè)集部分。一個(gè)集部分可以放置于模型的任何地方,但是一個(gè)集及其屬性在模型約束中被引用部分可以放置于模型的任何地方,但是一個(gè)集及其屬性在模型約束中被引用之前必須定義了它們。之前必須定義了它們。2.3.1 2.3.1 定義原始集定義原始集為了定義一個(gè)原始集,必須詳細(xì)聲明:為了定義一個(gè)原始集,必須詳細(xì)聲明:集的名字集的名字可選,
16、集的成員可選,集的成員可選,集成員的屬性可選,集成員的屬性定義一個(gè)原始集,用下面的語(yǔ)法:定義一個(gè)原始集,用下面的語(yǔ)法:setname/member_list/:attribute_list;setname/member_list/:attribute_list;注意:用注意:用“”表示該部分內(nèi)容可選。下同,不再贅述。表示該部分內(nèi)容可選。下同,不再贅述。SetnameSetname是你選擇的來(lái)標(biāo)記集的名字,最好具有較強(qiáng)的可讀性。集名字必是你選擇的來(lái)標(biāo)記集的名字,最好具有較強(qiáng)的可讀性。集名字必須嚴(yán)格符合標(biāo)準(zhǔn)命名規(guī)則:以拉丁字母或下劃線(須嚴(yán)格符合標(biāo)準(zhǔn)命名規(guī)則:以拉丁字母或下劃線(_ _)為首字符,
17、其后由拉)為首字符,其后由拉丁字母(丁字母(AZAZ)、下劃線、阿拉伯?dāng)?shù)字()、下劃線、阿拉伯?dāng)?shù)字(0 0,1 1,9 9)組成的總長(zhǎng)度不超)組成的總長(zhǎng)度不超過(guò)過(guò)3232個(gè)字符的字符串,且不區(qū)分大小寫(xiě)。個(gè)字符的字符串,且不區(qū)分大小寫(xiě)。注意:該命名規(guī)則同樣適用于集成員名和屬性名等的命名。注意:該命名規(guī)則同樣適用于集成員名和屬性名等的命名。Member_listMember_list是集成員列表。如果集成員放在集定義中,那么對(duì)它們可采是集成員列表。如果集成員放在集定義中,那么對(duì)它們可采取顯式羅列和隱式羅列兩種方式。如果集成員不放在集定義中,那么可以在取顯式羅列和隱式羅列兩種方式。如果集成員不放在集
18、定義中,那么可以在隨后的數(shù)據(jù)部分定義它們。隨后的數(shù)據(jù)部分定義它們。 當(dāng)顯式羅列成員時(shí),必須為每個(gè)成員輸入一個(gè)不同的名字,中間用空格或逗號(hào)擱開(kāi),允許混合使用。例例2.1 可以定義一個(gè)名為students的原始集,它具有成員John、Jill、Rose和Mike,屬性有sex和age:sets: students/John Jill, Rose Mike/: sex, age;Endsets 當(dāng)隱式羅列成員時(shí),不必羅列出每個(gè)集成員。可采用如下語(yǔ)法:setname/member1.memberN/: attribute_list;這里的member1是集的第一個(gè)成員名,memberN是集的最末一個(gè)成
19、員名。LINGO將自動(dòng)產(chǎn)生中間的所有成員名。LINGO也接受一些特定的首成員名和末成員名,用于創(chuàng)建一些特殊的集。 列表如下:列表如下:隱式成員列表格式示例所產(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 集成員可以不放在集定義中,而在隨后的數(shù)
20、據(jù)部分?jǐn)?shù)據(jù)部分來(lái)定義 例例2.2!集部分集部分;sets: students:sex,age;endsets!數(shù)據(jù)部分?jǐn)?shù)據(jù)部分;data: students,sex,age= John 1 16 Jill 0 14 Rose 0 17 Mike 1 13;enddata注意:開(kāi)頭用感嘆號(hào)(注意:開(kāi)頭用感嘆號(hào)(!),末尾用分號(hào)(),末尾用分號(hào)(;)表示注釋,可跨多行。)表示注釋,可跨多行。在集部分只定義了一個(gè)集在集部分只定義了一個(gè)集students,并未指定成員。在數(shù)據(jù)部分羅列了,并未指定成員。在數(shù)據(jù)部分羅列了集成員集成員John、Jill、Rose和和Mike,并對(duì)屬性,并對(duì)屬性sex和和ag
21、e分別給出了值。分別給出了值。集成員無(wú)論用何種字符標(biāo)記集成員無(wú)論用何種字符標(biāo)記,它的索引都是從它的索引都是從1開(kāi)始連續(xù)計(jì)數(shù)。在開(kāi)始連續(xù)計(jì)數(shù)。在attribute_ list可以指定一個(gè)或多個(gè)集成員的屬性,屬性之間必須用逗號(hào)隔可以指定一個(gè)或多個(gè)集成員的屬性,屬性之間必須用逗號(hào)隔開(kāi)。開(kāi)。LINGO內(nèi)置的建模語(yǔ)言是一種描述性語(yǔ)言,用它可以描述現(xiàn)實(shí)世界中的一些問(wèn)題,然后再借助于LINGO求解器求解。因此,集屬性的值一旦在模型中被確定,就不可能再更改。在LINGO中,只有在初始部分中給出的集屬性值在以后的求解中可更改。這與前面并不矛盾,初始部分是LINGO求解器的需要,并不是描述問(wèn)題所必須的。2.3.2
22、 定義派生集為了定義一個(gè)派生集,必須詳細(xì)聲明:集的名字父集的名字可選,集成員可選,集成員的屬性可用下面的語(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)建父集成員的所有組合作為派生集的成員。派生集的父集既可以是原始集,也可以是其它的派生集。例例2.3sets: product/A B/; machine/M N/; week/1.2/; allowed(product,mach
23、ine,week):x;endsetsLINGO生成了三個(gè)父集的所有組合共八組作為生成了三個(gè)父集的所有組合共八組作為allowed集的成員集的成員。列表如下:。列表如下:編號(hào)編號(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)成,這樣的派生集成為稠密集。如果限制派生集的成員,使它成為父集成員所有組合構(gòu)成的集合的一個(gè)子集,這樣的派生集成為稀疏集。同原始集一樣,派生集成員的聲明也可以放在數(shù)據(jù)部分。一個(gè)派生集的成員列表有兩種方式生成:顯式羅列;設(shè)
24、置成員資格過(guò)濾器。當(dāng)采用方式時(shí),必須顯式羅列出所有要包含在派生集中的成員,并且羅列的每個(gè)成員必須屬于稠密集。使用前面的例子,顯式羅列派生集的成員:allowed(product,machine,week)/A M 1,A N 2,B N 1/;如果需要生成一個(gè)大的、稀疏的集,那么顯式羅列就很麻煩。幸運(yùn)地是許多稀疏集的成員都滿足一些條件以和非成員相區(qū)分。我們可以把這些邏輯條件看作過(guò)濾器,在LINGO生成派生集的成員時(shí)把使邏輯條件為假的成員從稠密集中過(guò)濾掉。 例2.4sets: !學(xué)生集:性別屬性sex,1表示男性,0表示女性;年齡屬性age. ; students/John,Jill,Rose,
25、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;endsetsdata: sex,age = 1 16 0 14 0 17 0 13; friend = 0.3 0.5 0.6;enddata用豎線(用豎線(|)來(lái)標(biāo)記一個(gè)成員資格過(guò)濾器
26、的開(kāi)始。)來(lái)標(biāo)記一個(gè)成員資格過(guò)濾器的開(kāi)始。#eq#是邏輯運(yùn)是邏輯運(yùn)算符,用來(lái)判斷是否算符,用來(lái)判斷是否“相等相等”. &1可看作派生集的第可看作派生集的第1個(gè)原始父集的個(gè)原始父集的索引,它取遍該原始父集的所有成員;索引,它取遍該原始父集的所有成員;&2可看作派生集的第可看作派生集的第2 個(gè)原個(gè)原始父集的索引,它取遍該原始父集的所有成員;始父集的索引,它取遍該原始父集的所有成員;&3,&4,以此類推。注意如果派生集以此類推。注意如果派生集B的父集是另外的派生集的父集是另外的派生集A,那么上面所,那么上面所說(shuō)的原始父集是集說(shuō)的原始父集是集A向前回溯到最終的原始集,其
27、順序保持不變,向前回溯到最終的原始集,其順序保持不變,并且派生集并且派生集A的過(guò)濾器對(duì)派生集的過(guò)濾器對(duì)派生集B仍然有效。因此,派生集的索引個(gè)仍然有效。因此,派生集的索引個(gè)數(shù)是最終原始父集的個(gè)數(shù),索引的取值是從原始父集到當(dāng)前派生集數(shù)是最終原始父集的個(gè)數(shù),索引的取值是從原始父集到當(dāng)前派生集所作限制的總和。所作限制的總和。 總的來(lái)說(shuō),總的來(lái)說(shuō),LINGO可識(shí)別的集只有兩種類型:原始集和派生集??勺R(shí)別的集只有兩種類型:原始集和派生集。在一個(gè)模型中,原始集是基本的對(duì)象,不能再被拆分成更小的組在一個(gè)模型中,原始集是基本的對(duì)象,不能再被拆分成更小的組分。原始集可以由顯式羅列和隱式羅列兩種方式來(lái)定義。當(dāng)用顯式
28、分。原始集可以由顯式羅列和隱式羅列兩種方式來(lái)定義。當(dāng)用顯式羅列方式時(shí),需在集成員列表中逐個(gè)輸入每個(gè)成員。當(dāng)用隱式羅列羅列方式時(shí),需在集成員列表中逐個(gè)輸入每個(gè)成員。當(dāng)用隱式羅列方式時(shí),只需在集成員列表中輸入首成員和末成員,而中間的成員方式時(shí),只需在集成員列表中輸入首成員和末成員,而中間的成員由由LINGO產(chǎn)生。產(chǎn)生。 當(dāng)顯式羅列成員時(shí),必須為每個(gè)成員輸入一個(gè)不同的名字,中間用空格或逗號(hào)擱開(kāi),允許混合使用。例例2.1 可以定義一個(gè)名為students的原始集,它具有成員John、Jill、Rose和Mike,屬性有sex和age:sets: students/John Jill, Rose Mik
29、e/: 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)建一些特殊的集。 另一方面,派生集是由其它的集來(lái)創(chuàng)建。這些集被稱為該派生集的父集(原另一方面,派生集是由其它的集來(lái)創(chuàng)建。這些集被稱為該派生集的父集(原始集或其它的派生集)。一個(gè)派生集既可以是稀疏的,也可以是稠密的。稠密始集或其它的派生集)。一個(gè)派生集既可
30、以是稀疏的,也可以是稠密的。稠密集包含了父集成員的所有組合(有時(shí)也稱為父集的笛卡爾乘積)。稀疏集僅包集包含了父集成員的所有組合(有時(shí)也稱為父集的笛卡爾乘積)。稀疏集僅包含了父集的笛卡爾乘積的一個(gè)子集,可通過(guò)顯式羅列和成員資格過(guò)濾器這兩種含了父集的笛卡爾乘積的一個(gè)子集,可通過(guò)顯式羅列和成員資格過(guò)濾器這兩種方式來(lái)定義。顯式羅列方法就是逐個(gè)羅列稀疏集的成員。成員資格過(guò)濾器方法方式來(lái)定義。顯式羅列方法就是逐個(gè)羅列稀疏集的成員。成員資格過(guò)濾器方法通過(guò)使用稀疏集成員必須滿足的邏輯條件從稠密集成員中過(guò)濾出稀疏集的成員通過(guò)使用稀疏集成員必須滿足的邏輯條件從稠密集成員中過(guò)濾出稀疏集的成員。不同集類型的關(guān)系見(jiàn)下圖
31、。不同集類型的關(guān)系見(jiàn)下圖。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ù)分離的可能性。顯然,這對(duì)模型的維護(hù)和維數(shù)的縮放非常便利。數(shù)據(jù)部分以關(guān)鍵字“data:”開(kāi)始,以關(guān)鍵字“enddata”結(jié)束。在這里,可以指定集成員、集的屬性。其語(yǔ)法如下:object_list = value_
32、list;對(duì)象列(對(duì)象列(object_list)包含要指定值的屬性名、要設(shè)置集成員的)包含要指定值的屬性名、要設(shè)置集成員的集名,用逗號(hào)或空格隔開(kāi)。一個(gè)對(duì)象列中至多有一個(gè)集名,而屬性集名,用逗號(hào)或空格隔開(kāi)。一個(gè)對(duì)象列中至多有一個(gè)集名,而屬性名可以有任意多。如果對(duì)象列中有多個(gè)屬性名,那么它們的類型必名可以有任意多。如果對(duì)象列中有多個(gè)屬性名,那么它們的類型必須一致。如果對(duì)象列中有一個(gè)集名,那么對(duì)象列中所有的屬性的類須一致。如果對(duì)象列中有一個(gè)集名,那么對(duì)象列中所有的屬性的類型就是這個(gè)集。型就是這個(gè)集。數(shù)值列(數(shù)值列(value_list)包含要分配給對(duì)象列中的對(duì)象的值,用逗)包含要分配給對(duì)象列中的對(duì)
33、象的值,用逗號(hào)或空格隔開(kāi)。注意屬性值的個(gè)數(shù)必須等于集成員的個(gè)數(shù)??聪旅嫣?hào)或空格隔開(kāi)。注意屬性值的個(gè)數(shù)必須等于集成員的個(gè)數(shù)??聪旅娴睦?。的例子。例例3.1sets: set1/A,B,C/: X,Y;endsetsdata: X=1,2,3; Y=4,5,6;enddata在集在集set1中定義了兩個(gè)屬性中定義了兩個(gè)屬性X和和Y。X的三個(gè)值是的三個(gè)值是1、2和和3,Y的三的三個(gè)值是個(gè)值是4、5和和6。也可采用如下例子中的復(fù)合數(shù)據(jù)聲明(。也可采用如下例子中的復(fù)合數(shù)據(jù)聲明(data statement)實(shí)現(xiàn)同樣的功能。)實(shí)現(xiàn)同樣的功能。例例3.2sets: set1/A,B,C/: X,Y;end
34、setsdata: X,Y=1 4 2 5 3 6;Enddata看到這個(gè)例子,可能會(huì)認(rèn)為看到這個(gè)例子,可能會(huì)認(rèn)為X被指定了被指定了1、4和和2三個(gè)值,因?yàn)樗鼈內(nèi)齻€(gè)值,因?yàn)樗鼈兪菙?shù)值列中前三個(gè),而正確的答案是是數(shù)值列中前三個(gè),而正確的答案是1、2和和3。假設(shè)對(duì)象列有。假設(shè)對(duì)象列有n個(gè)對(duì)個(gè)對(duì)象,象,LINGO在為對(duì)象指定值時(shí),首先在在為對(duì)象指定值時(shí),首先在n個(gè)對(duì)象的第個(gè)對(duì)象的第1個(gè)索引處依次個(gè)索引處依次分配數(shù)值列中的前分配數(shù)值列中的前n個(gè)對(duì)象,然后在個(gè)對(duì)象,然后在n個(gè)對(duì)象的第個(gè)對(duì)象的第2個(gè)索引處依次分個(gè)索引處依次分配數(shù)值列中緊接著的配數(shù)值列中緊接著的n個(gè)對(duì)象,個(gè)對(duì)象,以此類推。,以此類推。模型的
35、所有數(shù)據(jù)模型的所有數(shù)據(jù)屬性值和集成員屬性值和集成員被單獨(dú)放在數(shù)據(jù)部分,被單獨(dú)放在數(shù)據(jù)部分,這可能是最規(guī)范的數(shù)據(jù)輸入方式。這可能是最規(guī)范的數(shù)據(jù)輸入方式。3.1.2 參數(shù)在數(shù)據(jù)部分也可以指定一些標(biāo)量變量(scalar variables)。當(dāng)一個(gè)標(biāo)量變量在數(shù)據(jù)部分確定時(shí),稱之為參數(shù)??匆焕僭O(shè)模型中用利率8.5%作為一個(gè)參數(shù),就可以象下面一樣輸入一個(gè)利率作為參數(shù)。例3.3data: interest_rate = .085;enddata也可以同時(shí)指定多個(gè)參數(shù)。例3.4data: interest_rate,inflation_rate = .085 .03;enddata3.1.3 實(shí)時(shí)數(shù)據(jù)處
36、理實(shí)時(shí)數(shù)據(jù)處理在某些情況,對(duì)于模型中的某些數(shù)據(jù)并不是定值。譬如模型中有一個(gè)通在某些情況,對(duì)于模型中的某些數(shù)據(jù)并不是定值。譬如模型中有一個(gè)通貨膨脹率的參數(shù),我們想在貨膨脹率的參數(shù),我們想在2%至至6%范圍內(nèi),對(duì)不同的值求解模型,來(lái)觀范圍內(nèi),對(duì)不同的值求解模型,來(lái)觀察模型的結(jié)果對(duì)通貨膨脹的依賴有多么敏感。我們把這種情況稱為實(shí)時(shí)數(shù)察模型的結(jié)果對(duì)通貨膨脹的依賴有多么敏感。我們把這種情況稱為實(shí)時(shí)數(shù)據(jù)處理(據(jù)處理(what if analysis)。)。LINGO有一個(gè)特征可方便地做到這件事。有一個(gè)特征可方便地做到這件事。 在本該放數(shù)的地方輸入一個(gè)問(wèn)號(hào)(在本該放數(shù)的地方輸入一個(gè)問(wèn)號(hào)(?)。)。例例3.5d
37、ata: interest_rate,inflation_rate = .085 ?;enddata每一次求解模型時(shí),每一次求解模型時(shí),LINGO都會(huì)提示為參數(shù)都會(huì)提示為參數(shù)inflation_rate輸入一個(gè)值輸入一個(gè)值。在。在WINDOWS操作系統(tǒng)下,將會(huì)接收到一個(gè)類似下面的對(duì)話框:操作系統(tǒng)下,將會(huì)接收到一個(gè)類似下面的對(duì)話框:直接輸入一個(gè)值再點(diǎn)擊直接輸入一個(gè)值再點(diǎn)擊OK按鈕,按鈕,LINGO就會(huì)把輸入的值指定給就會(huì)把輸入的值指定給inflation_rate,然后繼續(xù)求解模型。,然后繼續(xù)求解模型。 除了參數(shù)之外,也可以實(shí)時(shí)輸入集的屬性值,但不允許實(shí)時(shí)輸入集成員名除了參數(shù)之外,也可以實(shí)時(shí)輸入
38、集的屬性值,但不允許實(shí)時(shí)輸入集成員名。 3.1.4 指定屬性為一個(gè)值指定屬性為一個(gè)值可以在數(shù)據(jù)聲明的右邊輸入一個(gè)值來(lái)把所有的成員的該屬性指定為一個(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è)屬性的情形屬性。對(duì)于多個(gè)屬性的情形,見(jiàn)下例。,見(jiàn)下例。例例3.7sets: days /MO,TU,WE,TH,F
39、R,SA,SU/:needs,cost;endsetsdata: needs cost = 20 100;enddata3.1.5 數(shù)據(jù)部分的未知數(shù)值數(shù)據(jù)部分的未知數(shù)值有時(shí)只想為一個(gè)集的部分成員的某個(gè)屬性指定值,而讓其余成員有時(shí)只想為一個(gè)集的部分成員的某個(gè)屬性指定值,而讓其余成員的該屬性保持未知,以便讓的該屬性保持未知,以便讓LINGO去求出它們的最優(yōu)值。在數(shù)據(jù)聲去求出它們的最優(yōu)值。在數(shù)據(jù)聲明中輸入兩個(gè)相連的逗號(hào)表示該位置對(duì)應(yīng)的集成員的屬性值未知。明中輸入兩個(gè)相連的逗號(hào)表示該位置對(duì)應(yīng)的集成員的屬性值未知。兩個(gè)逗號(hào)間可以有空格。兩個(gè)逗號(hào)間可以有空格。例例3.8sets: years/1.5/:
40、capacity;endsetsdata: capacity = ,34,20,;enddata屬性屬性capacity的第的第2個(gè)和第個(gè)和第3個(gè)值分別為個(gè)值分別為34和和20,其余的未知,其余的未知 3.2 模型的初始部分模型的初始部分初始部分是初始部分是LINGO提供的另一個(gè)可選部分。在初始部分中,可以提供的另一個(gè)可選部分。在初始部分中,可以輸入初始聲明(輸入初始聲明(initialization statement),和數(shù)據(jù)部分中的數(shù)據(jù)),和數(shù)據(jù)部分中的數(shù)據(jù)聲明相同。對(duì)實(shí)際問(wèn)題的建模時(shí),初始部分并不起到描述模型的作聲明相同。對(duì)實(shí)際問(wèn)題的建模時(shí),初始部分并不起到描述模型的作用,用,在初始部
41、分輸入的值僅被在初始部分輸入的值僅被LINGO求解器當(dāng)作初始點(diǎn)來(lái)用,并且求解器當(dāng)作初始點(diǎn)來(lái)用,并且僅僅對(duì)非線性模型有用。僅僅對(duì)非線性模型有用。和數(shù)據(jù)部分指定變量的值不同,和數(shù)據(jù)部分指定變量的值不同,LINGO求求解器可以自由改變初始部分初始化的變量的值。解器可以自由改變初始部分初始化的變量的值。一個(gè)初始部分以一個(gè)初始部分以“init:”開(kāi)始,以開(kāi)始,以“endinit”結(jié)束。初始部分的初結(jié)束。初始部分的初始聲明規(guī)則和數(shù)據(jù)部分的數(shù)據(jù)聲明規(guī)則相同。也就是說(shuō),我們可以始聲明規(guī)則和數(shù)據(jù)部分的數(shù)據(jù)聲明規(guī)則相同。也就是說(shuō),我們可以在聲明的左邊同時(shí)初始化多個(gè)集屬性,可以把集屬性初始化為一個(gè)在聲明的左邊同時(shí)初
42、始化多個(gè)集屬性,可以把集屬性初始化為一個(gè)值,可以用問(wèn)號(hào)實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)處理,還可以用逗號(hào)指定未知數(shù)值。值,可以用問(wèn)號(hào)實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)處理,還可以用逗號(hào)指定未知數(shù)值。例例3.9init: X, Y = 0, .1;endinitY=log(X);X2+Y2=1;好的初始點(diǎn)會(huì)減少模型的求解時(shí)間。好的初始點(diǎn)會(huì)減少模型的求解時(shí)間。3.33.3計(jì)算段計(jì)算段(CALC)(CALC):以:以“CALC: ”開(kāi)始,開(kāi)始, “ENDCALC”結(jié)束,對(duì)一些原始數(shù)據(jù)進(jìn)行計(jì)算處理。結(jié)束,對(duì)一些原始數(shù)據(jù)進(jìn)行計(jì)算處理。在實(shí)際問(wèn)題中,輸入的數(shù)據(jù)通常是原始數(shù)據(jù),不一定在實(shí)際問(wèn)題中,輸入的數(shù)據(jù)通常是原始數(shù)據(jù),不一定能在模型中直接使用,
43、可以在這個(gè)段對(duì)這些原始數(shù)據(jù)進(jìn)能在模型中直接使用,可以在這個(gè)段對(duì)這些原始數(shù)據(jù)進(jìn)行一定的行一定的“預(yù)處理預(yù)處理”,得到模型中真正需要的數(shù)據(jù)。,得到模型中真正需要的數(shù)據(jù)。例如上例,如果希望得到全年的總需求和季度平均需求,可以增加這個(gè)段:例如上例,如果希望得到全年的總需求和季度平均需求,可以增加這個(gè)段:CALC: T_DEM = SUM(quarters: DEM); !總需求總需求; A_DEM = T_DEM / size(quarters); !平均需求平均需求;ENDCALC在計(jì)算段中也可以使用集合函數(shù)(其中函數(shù)在計(jì)算段中也可以使用集合函數(shù)(其中函數(shù)size(quarters)表示集合表示集合
44、quarters的元素個(gè)數(shù),這里也就是的元素個(gè)數(shù),這里也就是4)。這時(shí),變量)。這時(shí),變量T_DEM的值就是總需的值就是總需求,求,A_DEM的值就是平均需求(如果需要的話,這兩個(gè)變量就可以在程的值就是平均需求(如果需要的話,這兩個(gè)變量就可以在程序的其它地方作為常數(shù)使用了)。序的其它地方作為常數(shù)使用了)。注:上面的兩個(gè)語(yǔ)句不能交換順序,因?yàn)橛?jì)算注:上面的兩個(gè)語(yǔ)句不能交換順序,因?yàn)橛?jì)算A_DEM必須要用到必須要用到T_DEM的的值。此外,在計(jì)算段中只能直接使用賦值語(yǔ)句,而不能包含需要經(jīng)過(guò)解方值。此外,在計(jì)算段中只能直接使用賦值語(yǔ)句,而不能包含需要經(jīng)過(guò)解方程或經(jīng)過(guò)求解優(yōu)化問(wèn)題以后才能決定的變量。程
45、或經(jīng)過(guò)求解優(yōu)化問(wèn)題以后才能決定的變量。4 LINGO函數(shù) 有了前幾節(jié)的基礎(chǔ)知識(shí),再加上本節(jié)的內(nèi)容,你就能夠借助于LINGO建立并求解復(fù)雜的優(yōu)化模型了。LINGO有9種類型的函數(shù):1 基本運(yùn)算符:包括算術(shù)運(yùn)算符、邏輯運(yùn)算符和關(guān)系運(yùn)算符2 數(shù)學(xué)函數(shù):三角函數(shù)和常規(guī)的數(shù)學(xué)函數(shù)3 金融函數(shù):LINGO提供的兩種金融函數(shù)4 概率函數(shù):LINGO提供了大量概率相關(guān)的函數(shù)5 變量界定函數(shù):這類函數(shù)用來(lái)定義變量的取值范圍6 集操作函數(shù):這類函數(shù)為對(duì)集的操作提供幫助7 集循環(huán)函數(shù):遍歷集的元素,執(zhí)行一定的操作的函數(shù)8 數(shù)據(jù)輸入輸出函數(shù):這類函數(shù)允許模型和外部數(shù)據(jù)源相聯(lián)系,進(jìn)行數(shù)據(jù)的輸入輸出9 輔助函數(shù):各種雜類
46、函數(shù)4.1 基本運(yùn)算符基本運(yùn)算符這些運(yùn)算符是非?;镜模踔量梢圆徽J(rèn)為它們是一類函數(shù)。事實(shí)上這些運(yùn)算符是非?;镜模踔量梢圆徽J(rèn)為它們是一類函數(shù)。事實(shí)上,在,在LINGO中它們是非常重要的。中它們是非常重要的。4.1.1 算術(shù)運(yùn)算符算術(shù)運(yùn)算符算術(shù)運(yùn)算符是針對(duì)數(shù)值進(jìn)行操作的。算術(shù)運(yùn)算符是針對(duì)數(shù)值進(jìn)行操作的。LINGO提供了提供了5種二元運(yùn)算符:種二元運(yùn)算符:乘方乘方乘乘除除加加減減LINGO唯一的一元算術(shù)運(yùn)算符是取反函數(shù)唯一的一元算術(shù)運(yùn)算符是取反函數(shù)“”。這些運(yùn)算符的優(yōu)先級(jí)由高到底為:這些運(yùn)算符的優(yōu)先級(jí)由高到底為:高(取反)高(取反) 低低運(yùn)算符的運(yùn)算次序?yàn)閺淖蟮接野磧?yōu)先級(jí)高低來(lái)執(zhí)行。運(yùn)算的次序
47、可以運(yùn)算符的運(yùn)算次序?yàn)閺淖蟮接野磧?yōu)先級(jí)高低來(lái)執(zhí)行。運(yùn)算的次序可以用圓括號(hào)用圓括號(hào)“()()”來(lái)改變。來(lái)改變。例例4.1 算術(shù)運(yùn)算符示例。算術(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)算符,則為tru
48、e;否則為flase#ge# 若左邊的運(yùn)算符大于或等于右邊的運(yùn)算符,則為true;否則為flase#lt# 若左邊的運(yùn)算符嚴(yán)格小于右邊的運(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é)
49、果為假(0)。4.1.3 關(guān)系運(yùn)算符在LINGO中,關(guān)系運(yùn)算符主要是被用在模型中,來(lái)指定一個(gè)表達(dá)式的左邊是否等于、小于等于、或者大于等于右邊,形成模型的一個(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ù),它的
50、值依賴于模型中A小于B多少才算不等。 下面給出以上三類操作符的優(yōu)先級(jí):高#not# (取反) #eq# #ne# #gt# #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);!比如考慮星期二,那么上星期五,星期六,星期天
51、,和星期一,星期二的人數(shù)要大于等于所需求。(5,6,7,1,2)看做(5,6,7,8,9)的warp(,7)值,又要循環(huán)起來(lái)就要加上I。 星期二的話就是2+I+?,所以?=2.end計(jì)算的部分結(jié)果為Global optimal solution found at iteration: 0 Objective value: 22.00000 Variable Value Reduced Cost REQUIRED( MON) 20.00000 0.000000 REQUIRED( TUE) 16.00000 0.000000 REQUIRED( WED) 13.00000 0.000000 RE
52、QUIRED( THU) 16.00000 0.000000 REQUIRED( FRI) 19.00000 0.000000 REQUIRED( SAT) 14.00000 0.000000 REQUIRED( SUN) 12.00000 0.000000 START( MON) 8.000000 0.000000 START( TUE) 2.000000 0.000000 START( WED) 0.000000 0.3333333 START( THU) 6.000000 0.000000 START( FRI) 3.000000 0.000000 START( SAT) 3.00000
53、0 0.000000 START( SUN) 0.000000 0.000000從而解決方案是:每周最少需要22個(gè)職員,周一安排8人,周二安排2人,周三無(wú)需安排人,周四安排6人,周五和周六都安排3人,周日無(wú)需安排人。4.8 輸入和輸出函數(shù)輸入和輸出函數(shù)輸入和輸出函數(shù)可以把模型和外部數(shù)據(jù)比如文本文件、數(shù)據(jù)庫(kù)和輸入和輸出函數(shù)可以把模型和外部數(shù)據(jù)比如文本文件、數(shù)據(jù)庫(kù)和電子表格等連接起來(lái)。電子表格等連接起來(lái)。1file函數(shù)函數(shù) 該函數(shù)用從外部文件中輸入數(shù)據(jù),可以放在模型中任何地方。該函數(shù)用從外部文件中輸入數(shù)據(jù),可以放在模型中任何地方。該函數(shù)的語(yǔ)法格式為該函數(shù)的語(yǔ)法格式為file(filename)。這
54、里。這里filename是文件名,是文件名,可以采用相對(duì)路徑和絕對(duì)路徑兩種表示方式。可以采用相對(duì)路徑和絕對(duì)路徑兩種表示方式。file函數(shù)對(duì)同一文件函數(shù)對(duì)同一文件的兩種表示方式的處理和對(duì)兩個(gè)不同的文件處理是一樣的,這一點(diǎn)的兩種表示方式的處理和對(duì)兩個(gè)不同的文件處理是一樣的,這一點(diǎn)必須注意。必須注意。例例4.14 以例以例1.2來(lái)講解來(lái)講解file函數(shù)的用法。函數(shù)的用法。注意到在例注意到在例1.2的編碼中有兩處涉及到數(shù)據(jù)。第一個(gè)地方是集部分的編碼中有兩處涉及到數(shù)據(jù)。第一個(gè)地方是集部分的的6個(gè)個(gè)warehouses集成員和集成員和8個(gè)個(gè)vendors集成員;第二個(gè)地方是數(shù)集成員;第二個(gè)地方是數(shù)據(jù)部分的
55、據(jù)部分的capacity,demand和和cost數(shù)據(jù)。數(shù)據(jù)。為了使數(shù)據(jù)和我們的模型完全分開(kāi),我們把它們移到外部的文本為了使數(shù)據(jù)和我們的模型完全分開(kāi),我們把它們移到外部的文本文件中。修改模型代碼以便于用文件中。修改模型代碼以便于用file函數(shù)把數(shù)據(jù)從文本文件中拖到函數(shù)把數(shù)據(jù)從文本文件中拖到模型中來(lái)。修改后(修改處代碼黑體加粗)的模型代碼如下:模型中來(lái)。修改后(修改處代碼黑體加粗)的模型代碼如下:模型的所有數(shù)據(jù)來(lái)自于1_2.txt文件。其內(nèi)容如下:!warehouses成員;WH1 WH2 WH3 WH4 WH5 WH6 !vendors成員;V1 V2 V3 V4 V5 V6 V7 V8 !產(chǎn)
56、量;60 55 51 43 41 52 !銷量;35 37 22 32 41 32 43 38 !單位運(yùn)輸費(fèi)用矩陣;6 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 3model:!6發(fā)點(diǎn)8收點(diǎn)運(yùn)輸問(wèn)題;sets: warehouses/ file(1_2.txt) /: capacity; vendors/ file(1_2.txt) /: demand; links(warehouses,vendors): cost, volume;endsets!目標(biāo)函數(shù); m
57、in=sum(links: cost*volume);!需求約束; for(vendors(J): sum(warehouses(I): volume(I,J)=demand(J);!產(chǎn)量約束; for(warehouses(I): sum(vendors(J): volume(I,J) NEED( I); CON2 ORDERED( I) =30;end0,300,30,360)(0,20,2100)(.)()(minyxyxyyyyygxxxxxfstxgxf; 2warn(text,logical_condition)如果邏輯條件如果邏輯條件logical_condition為真,則產(chǎn)生
58、一個(gè)內(nèi)容為為真,則產(chǎn)生一個(gè)內(nèi)容為text的信息框。的信息框。例例4.19 示例。示例。model: x=1; warn(x是正數(shù)是正數(shù),x #gt# 0); end5 LINGO WINDOWS命令命令 (略略) 5.3 LINGO菜單菜單1 求解模型(求解模型(Slove) 從從LINGO菜單中選用菜單中選用“求解求解”命令、單擊命令、單擊“Slove”按鈕或按按鈕或按Ctrl+S組合鍵可以將當(dāng)前模型送入內(nèi)存求解。組合鍵可以將當(dāng)前模型送入內(nèi)存求解。2 求解結(jié)果(求解結(jié)果(Solution) 從從LINGO菜單中選用菜單中選用“Solution”命令、單擊命令、單擊“Solution”按鈕或直
59、接按按鈕或直接按Ctrl+O組合鍵可以打開(kāi)求解結(jié)果組合鍵可以打開(kāi)求解結(jié)果的對(duì)話框。這里可以指定查看當(dāng)前內(nèi)存中求解結(jié)果的那些內(nèi)容。的對(duì)話框。這里可以指定查看當(dāng)前內(nèi)存中求解結(jié)果的那些內(nèi)容。3 查看(查看(Look)從從LINGO菜單中選用菜單中選用“Look”命令或直接按命令或直接按Ctrl+L組合組合鍵可以查看全部的或選中的模型文本內(nèi)容。鍵可以查看全部的或選中的模型文本內(nèi)容。4 靈敏性分析(靈敏性分析(Range,Ctrl+R)用該命令產(chǎn)生當(dāng)前模型的靈敏性分析報(bào)告:研究當(dāng)目標(biāo)函數(shù)的費(fèi)用該命令產(chǎn)生當(dāng)前模型的靈敏性分析報(bào)告:研究當(dāng)目標(biāo)函數(shù)的費(fèi)用系數(shù)和約束右端項(xiàng)在什么范圍(此時(shí)假定其它系數(shù)不變)時(shí),最
60、用系數(shù)和約束右端項(xiàng)在什么范圍(此時(shí)假定其它系數(shù)不變)時(shí),最優(yōu)基保持不變。靈敏性分析是在求解模型時(shí)作出的,因此在求解模優(yōu)基保持不變。靈敏性分析是在求解模型時(shí)作出的,因此在求解模型時(shí)靈敏性分析是激活狀態(tài),但是默認(rèn)是不激活的。為了激活靈敏型時(shí)靈敏性分析是激活狀態(tài),但是默認(rèn)是不激活的。為了激活靈敏性分析,運(yùn)行性分析,運(yùn)行LINGO|Options,選擇,選擇General Solver Tab, 在在Dual Computations列表框中,選擇列表框中,選擇Prices and Ranges選項(xiàng)。靈選項(xiàng)。靈敏性分析耗費(fèi)相當(dāng)多的求解時(shí)間,因此當(dāng)速度很關(guān)鍵時(shí),就沒(méi)有必敏性分析耗費(fèi)相當(dāng)多的求解時(shí)間,因此當(dāng)速度很關(guān)鍵時(shí),就沒(méi)有必要激活它。要激活它。下面我們看一個(gè)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2006年浙江高考語(yǔ)文真題及答案
- 香附藥材安全性評(píng)價(jià)-洞察分析
- 網(wǎng)絡(luò)安全風(fēng)險(xiǎn)評(píng)估-第15篇-洞察分析
- 信息資源整合策略-洞察分析
- 虛擬現(xiàn)實(shí)考古信息可視化-洞察分析
- 游戲跨文化研究-洞察分析
- 塑料制品回收與再利用技術(shù)研究-洞察分析
- 音樂(lè)數(shù)字資源開(kāi)發(fā)與應(yīng)用-洞察分析
- 體育用品制造業(yè)供應(yīng)鏈優(yōu)化-洞察分析
- 煙草種植市場(chǎng)供需預(yù)測(cè)-洞察分析
- 2024-2025學(xué)年北師版八年級(jí)物理上冊(cè)期末考試綜合測(cè)試卷
- 2023-2024學(xué)年廣東省廣州市白云區(qū)八年級(jí)(上)期末數(shù)學(xué)試卷及答案解析
- 錐坡工程量計(jì)算
- 植物園設(shè)計(jì)規(guī)范
- 北京保險(xiǎn)中介行業(yè)營(yíng)銷員增員及流動(dòng)自律公約
- 深圳市建設(shè)工程施工圍擋圖集(試行版_下半部分).pdf
- 熱水器3c安全試驗(yàn)報(bào)告及第三方檢測(cè)報(bào)告dsf65mx ts tx ws wx ys yx ms
- 南洋電工GSB1A型16錠高速編織機(jī)使用說(shuō)明書(shū)
- 大管輪見(jiàn)習(xí)記錄簿范本匯總
- 園區(qū)保安隊(duì)長(zhǎng)的工作職責(zé)
- 萬(wàn)能中國(guó)地圖模板(可修改)
評(píng)論
0/150
提交評(píng)論