第十八章LINGO軟件的使用17頁_第1頁
第十八章LINGO軟件的使用17頁_第2頁
第十八章LINGO軟件的使用17頁_第3頁
第十八章LINGO軟件的使用17頁_第4頁
第十八章LINGO軟件的使用17頁_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第十八章 LINGO軟件的使用18.1 LINGO入門18.1.1 LINGO軟件的安裝過程點(diǎn)擊LINGO9.0 for Windows安裝文件,出現(xiàn)點(diǎn)擊“Next”按鈕,出現(xiàn)此時(shí)需要接受安裝協(xié)議。系統(tǒng)安裝時(shí)默認(rèn)的目錄是C:LINGO9。安裝完成前,會(huì)出現(xiàn)下圖所示的對(duì)話框:這個(gè)對(duì)話框詢問你希望采用的默認(rèn)的建模(即編程)語言,系統(tǒng)推薦的是采用LINGO語法,也就是選項(xiàng)“LINGO(recommended)”;你也可以選擇“LINDO”將LINDO語法作為默認(rèn)的設(shè)置。當(dāng)然,安裝后你也可以通過“LINGOOptionsFile Format命令來修改默認(rèn)的建模(即編程)語言。在上圖中按下“OK”按鈕

2、,系統(tǒng)就會(huì)完成LINGO的安裝過程。18.1.2 LINGO基礎(chǔ)知識(shí)LINGO有兩種命令格式:一種是常用的Windows模式,通過下拉式菜單命令驅(qū)動(dòng)LINGO運(yùn)行,界面是圖形式的,使用起來也比較方便;另一種是命令行(Command-Line)模式,僅在命令窗口(Command Window)下操作,通過輸入行命令驅(qū)動(dòng)LINGO運(yùn)行。由于其使用字符方式輸入,初學(xué)者往往不太容易掌握。在這里,我們主要介紹在菜單驅(qū)動(dòng)模式下LINGO的使用方法。LINGO 9.0軟件比以前的版本有了很大的改進(jìn),功能大大增強(qiáng),性能更加穩(wěn)定,計(jì)算的結(jié)果更加可靠。LINGO軟件不僅可用于求解非線性規(guī)劃問題,還可以用以求解非線

3、性整數(shù)規(guī)劃問題;LINGO包含了內(nèi)置的建模語言,模型中所需的數(shù)據(jù)可以以一定格式保存在獨(dú)立的文件中;LINGO允許以簡練、直觀的方式描述較大規(guī)模的優(yōu)化問題。注:LIGDO公司目前已將LINDO軟件從其產(chǎn)品中刪除了。事實(shí)上,LINDO軟件的所有功能(包括LINDO語法格式)都在LINGO中得到了支持。當(dāng)你在windows下開始運(yùn)行LINGO系統(tǒng)時(shí),會(huì)得到類似下面的一個(gè)窗口:外層是主框架窗口,包含了所有菜單命令和工具條,其它所有的窗口將被包含在主窗口之下。在主窗口內(nèi)的標(biāo)題為LINGO Model LINGO1的窗口是LINGO的默認(rèn)模型窗口,建立的模型都都要在該窗口內(nèi)編碼實(shí)現(xiàn)。狀態(tài)行最左邊顯示的是“

4、Ready”表示“準(zhǔn)備就緒”;右下角顯示的是當(dāng)前時(shí)間,時(shí)間前面是當(dāng)前光標(biāo)的位置“Ln1,Col1”(即1行1列)。將來,用戶可以用選項(xiàng)命令(LINGOOptions菜單命令)決定是否需要顯示工具欄和狀態(tài)行。在LINGO模型窗口中,選擇菜單命令“FileOpen(F3)”,可以看到下圖所示的標(biāo)準(zhǔn)的“打開文件”對(duì)話框,我們看到有各種不同的“文件類型”:l 后綴“l(fā)g4”表示LINGO格式的模型文件,是一種特殊的二進(jìn)制格式文件,保存了我們?cè)谀P痛翱谥兴軌蚩吹降乃形谋竞推渌麑?duì)象及其格式信息,只有LINGO能讀出它,用其他系統(tǒng)打開這種文件時(shí)會(huì)出現(xiàn)亂碼;l 后綴“l(fā)ng”表示文本格式的模型文件,并且以

5、這個(gè)格式保存模型時(shí)LINGO將給出警告,因?yàn)槟P椭械母袷叫畔ⅲㄈ缱煮w、顏色、嵌入對(duì)象等)將會(huì)丟失;l 后綴“l(fā)dt”表示LINGO數(shù)據(jù)文件;l 后綴“l(fā)tf”表示LINGO命令腳本文件;l 后綴“l(fā)gr”表示LINGO報(bào)告文件;l 后綴“l(fā)tx”表示LINGO格式的模型文件;l 后綴“mps”表示MPS(數(shù)學(xué)規(guī)劃系統(tǒng))格式的模型文件;l “*.*”表示所有文件除“l(fā)g4”文件外,這里的另外幾種格式的文件其實(shí)都是普通的文本文件,可以用任何文本編輯器打開和編輯。18.1.3二個(gè)簡單的LINGO程序下面舉兩個(gè)例子說明如何在LINGO中如何進(jìn)行規(guī)劃問題求解。例1.1求解如下的LP(線性規(guī)劃)問題:在模

6、型窗口中輸入如下代碼:min=2*x1+3*x2;x1+x2=350;x1=100;2*x1+x2=600;如下圖所示:注:(1)LINGO中不區(qū)分大小寫字母,變量(和行名)可以使用不超過32個(gè)字符表示,且必須以字母開頭。(2)LINGO中模型以“MODEL:”開始,以“END”結(jié)束。對(duì)簡單的模型,這兩個(gè)語句也可以省略。(3)LINGO中的語句的順序是不重要的,因?yàn)長INGO總是根據(jù)“MAX=”或“MIN=”語句尋找目標(biāo)函數(shù),而其它語句都是約束條件(當(dāng)然注釋語句和TITLE除外)。(4)LINGO模型是由一系列語句組成,每個(gè)語句以分號(hào)“;”結(jié)束。(5)LINGO中以感嘆號(hào)“!”開始的是說明語句

7、(說明語句也需要以分號(hào)“;”結(jié)束)。(6)LINGO中解優(yōu)化模型時(shí)假定所有變量非負(fù)(除非用限定變量取值范圍的函數(shù)free或sub或slb另行說明)。然后點(diǎn)擊工具條上的按鈕 得到:下面對(duì)上圖的各個(gè)部分進(jìn)行說明。Solution Report(LINGO的結(jié)果報(bào)告窗口) Global optimal solution found 表示全局最優(yōu)解找到. Objective value: 800.0000 表示最優(yōu)目標(biāo)值為800.0000. Total solver iterations: 2 表示用單純行法進(jìn)行了兩次迭代. Variable 表示變量, 此問題中有兩個(gè)變量X1, X2. Value

8、給出最優(yōu)解中各變量(Variable)的值: X1=250.0000, X2=100.0000. Reduced Cost 給出最優(yōu)的單純形表中目標(biāo)函數(shù)行中變量對(duì)應(yīng)的系數(shù). 其中基變量的Reduced Cost值一定為0;對(duì)于非基變量(非基變量本身的取值一定為0)和max問題,相應(yīng)的Reduced Cost值表示當(dāng)該非基變量增加一個(gè)單位(其它非基變量保持不變)時(shí)目標(biāo)函數(shù)的減少的量.在這個(gè)例子中最優(yōu)解中兩個(gè)變量都是基向量, 因此對(duì)應(yīng)的Reduced Cost的值都為0.Slack or Surplus (松弛或剩余)給出約束對(duì)應(yīng)的松弛變量的值:第2和第4行松弛變量均為0,說明對(duì)于最優(yōu)解來講,兩個(gè)

9、約束(第2和4行)均取等號(hào),即都是緊約束.Dual Price 給出對(duì)偶價(jià)格(也稱影子價(jià)格)的值.例1.2某家具公司制造書桌、餐桌和椅子,所用的資源有三種:木料、木工和漆工。生產(chǎn)數(shù)據(jù)如下表所示:每個(gè)書桌每個(gè)餐桌每個(gè)椅子現(xiàn)有資源總數(shù)木料8單位6單位1單位48單位漆工4單位2單位1.5單位20單位木工2單位1.5單位0.5單位8單位成品單價(jià)60單位30單位20單位若要求桌子的生產(chǎn)量不超過5件,如何安排三種產(chǎn)品的生產(chǎn)可使利潤最大?用DESKS、TABLES和CHAIRS分別表示三種產(chǎn)品的生產(chǎn)量,建立LP模型。max=60*desks+30*tables+20*chairs;8*desks+6*tab

10、les+chairs=48;4*desks+2*tables+1.5*chairs=20;2*desks+1.5*tables+.5*chairs=8;tables=5;求解這個(gè)模型,查看報(bào)告窗口(Reports Window),如下圖:可以看到如下結(jié)果。Global optimal solution found at iteration: 3 Objective value: 280.0000 Variable Value Reduced Cost DESKS 2.000000 0.000000 TABLES 0.000000 5.000000 CHAIRS 8.000000 0.00000

11、0 Row Slack or Surplus Dual Price 1 280.0000 1.000000 2 24.00000 0.000000 3 0.000000 10.00000 4 0.000000 10.00000 5 5.000000 0.000000“Global optimal solution found at iteration: 3”表示3次迭代后得到全局最優(yōu)解。 “Objective value:280.0000”表示最優(yōu)目標(biāo)值為280。 “Value”給出最優(yōu)解中各變量的值:造2個(gè)書桌(desks), 0個(gè)餐桌(tables), 8個(gè)椅子(chairs)。所以des

12、ks、chairs是基變量(非0),tables是非基變量(0)。 “Slack or Surplus”給出松馳變量的值:第1行松馳變量 =280(模型第一行表示目標(biāo)函數(shù),所以第二行對(duì)應(yīng)第一個(gè)約束)第2行松馳變量 =24第3行松馳變量 =0第4行松馳變量 =0第5行松馳變量 =5“Reduced Cost”列出最優(yōu)單純形表中判別數(shù)所在行的變量的系數(shù),表示當(dāng)變量有微小變動(dòng)時(shí), 目標(biāo)函數(shù)的變化率。其中基變量的reduced cost值應(yīng)為0, 對(duì)于非基變量 Xj, 相應(yīng)的 reduced cost值表示當(dāng)某個(gè)變量Xj 增加一個(gè)單位時(shí)目標(biāo)函數(shù)減少的量( max型問題)。本例中:變量tables對(duì)應(yīng)的

13、reduced cost值為5,表示當(dāng)非基變量tables的值從0變?yōu)?1時(shí)(此時(shí)假定其他非基變量保持不變,但為了滿足約束條件,基變量顯然會(huì)發(fā)生變化),最優(yōu)的目標(biāo)函數(shù)值 = 280 - 5 = 275?!癉UAL PRICE”(對(duì)偶價(jià)格)表示當(dāng)對(duì)應(yīng)約束有微小變動(dòng)時(shí), 目標(biāo)函數(shù)的變化率。輸出結(jié)果中對(duì)應(yīng)于每一個(gè)約束有一個(gè)對(duì)偶價(jià)格。 若其數(shù)值為p, 表示對(duì)應(yīng)約束中不等式右端項(xiàng)若增加1 個(gè)單位,目標(biāo)函數(shù)將增加p個(gè)單位(max型問題)。顯然,如果在最優(yōu)解處約束正好取等號(hào)(也就是“緊約束”,也稱為有效約束或起作用約束),對(duì)偶價(jià)格值才可能不是0。本例中:第3、4行是緊約束,對(duì)應(yīng)的對(duì)偶價(jià)格值為10,表示當(dāng)緊約

14、束 3) 4 DESKS + 2 TABLES + 1.5 CHAIRS = 20 變?yōu)?3) 4 DESKS + 2 TABLES + 1.5 CHAIRS = 21 時(shí),目標(biāo)函數(shù)值 = 280 +10 = 290。對(duì)第4行也類似。 對(duì)于非緊約束(如本例中第2、5行是非緊約束),DUAL PRICE 的值為0, 表示對(duì)應(yīng)約束中不等式右端項(xiàng)的微小擾動(dòng)不影響目標(biāo)函數(shù)。有時(shí), 通過分析DUAL PRICE, 也可對(duì)產(chǎn)生不可行問題的原因有所了解。18.2 集的使用LINGO允許把相聯(lián)系的對(duì)象聚合成集(sets)。一旦把對(duì)象聚合成集,就可以利用集來最大限度的發(fā)揮LINGO語言的優(yōu)勢(shì)。集是LINGO建模

15、語言的基礎(chǔ),是程序設(shè)計(jì)最強(qiáng)有力的基本構(gòu)件。借助于集,能夠用一個(gè)單一的、長的、簡明的復(fù)合公式表示一系列相似的約束,從而可以快速方便地表達(dá)規(guī)模較大的模型。一個(gè)集可能是一系列食品、汽車等。每個(gè)集成員可能有一個(gè)或多個(gè)與之有關(guān)聯(lián)的特征,我們把這些特征稱為屬性。屬性值可以預(yù)先給定,也可以是未知的,有待于LINGO求解。例如,食品集中的每個(gè)產(chǎn)品可以有一個(gè)價(jià)格屬性;汽車集中的每輛車可以有一個(gè)貨車或客車屬性, 也可以有一個(gè)動(dòng)力屬性??傊? 集是一群相聯(lián)系的對(duì)象,這些對(duì)象也稱為集的成員。集部分是LINGO模型的一個(gè)可選部分。在LINGO模型中使用集之前,必須在集部分事先定義。集部分以關(guān)鍵字“sets:”開始,以“

16、endsets”結(jié)束。一個(gè)模型可以沒有集部分,或有一個(gè)簡單的集部分,或有多個(gè)集部分。一個(gè)集部分可以放置于模型的任何地方,但是一個(gè)集及其屬性在模型約束中被引用之前必須已經(jīng)被定義。LINGO有兩種類型的集:原始集(primitiveset)和派生集(derived set)。一個(gè)原始集是由一些最基本的對(duì)象組成的。一個(gè)派生集是用一個(gè)或多個(gè)其它集來定義的,也就是說,它的成員來自于其它已存在的集。18.2.1原始集為了定義一個(gè)原始集,必須詳細(xì)聲明:集的名字可選,集的成員可選,集成員的屬性定義一個(gè)原始集,用下面的語法:集的名稱/集的成員列表/:成員屬性列表;集名字必須嚴(yán)格符合標(biāo)準(zhǔn)命名規(guī)則:以拉丁字母或下劃

17、線(_)為首字符,其后由拉丁字母(AZ)、下劃線、阿拉伯?dāng)?shù)字(0,1,9)組成的總長度不超過32個(gè)字符的字符串,且不區(qū)分大小寫。該命名規(guī)則同樣適用于集成員名和屬性名等的命名。如果集成員放在集定義中,那么對(duì)它們可采取顯式羅列和隱式羅列兩種方式。如果集成員不放在集定義中,那么可以在隨后的數(shù)據(jù)部分定義它們。(1) 當(dāng)顯式羅列成員時(shí),必須為每個(gè)成員輸入一個(gè)不同的名字,中間用空格或逗號(hào)擱開,允許混合使用。例2.1 可以定義一個(gè)名為teachers的原始集,它具有成員Suzan、Roll、Rose和Mike,屬性有sex和age:sets: teachers/Suzan Roll, Rose Mike/:

18、 sex, age;endsets(2) 當(dāng)隱式羅列成員時(shí),不必羅列出每個(gè)集成員。可采用如下語法:集的名稱/成員1.成員N/: 屬性列表;這里的成員1是集的第一個(gè)成員名,成員N是集的最末一個(gè)成員名。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,

19、JanMonthYearM.MonthYearNOct2001.Jan2002Oct2001,Nov2001,Dec2001,Jan2002(3) 集成員不放在集定義中,而在隨后的數(shù)據(jù)部分來定義。請(qǐng)看下面示例:!集部分;sets: teachers:sex,age;endsets!數(shù)據(jù)部分;data: students,sex,age= Suzan 0 20 Roll 1 10 Rose 0 30 Mike 1 26;enddata注意:開頭用感嘆號(hào)(!),末尾用分號(hào)(;)表示注釋,可跨多行。在集部分只定義了一個(gè)集teachers,并未指定成員。在數(shù)據(jù)部分羅列了集成員Suzan、 Roll、R

20、ose和Mike,并對(duì)屬性sex和age分別給出了值。集成員無論用何種字符標(biāo)記,它的索引都是從1開始連續(xù)計(jì)數(shù)。在attribute_ list可以指定一個(gè)或多個(gè)集成員的屬性,屬性之間必須用逗號(hào)隔開。18.2.2派生集為了定義一個(gè)派生集,必須詳細(xì)聲明:集的名字父集的名字可選,集成員可選,集成員的屬性可用下面的語法定義一個(gè)派生集:集的名稱(父集列表)/ 集成員列表/:集成員屬性列表;父集列表是已定義的集的列表,多個(gè)時(shí)必須用逗號(hào)隔開。如果沒有指定成員列表,那么LINGO會(huì)自動(dòng)創(chuàng)建父集成員的所有組合作為派生集的成員。派生集的父集既可以是原始集,也可以是其它的派生集。例如:sets: product/A

21、 B/; machine/M N/; week/1.2/; allowed(product,machine,week):x;endsetsLINGO生成了三個(gè)父集的所有組合共八組作為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)成,這樣的派生集成為稠密集。如果限制派生集的成員,使它成為父集成員所有組合構(gòu)成的集合的一個(gè)子集,這樣的派生集成為稀疏集。同原始集一樣,派生集成員的聲明也可以放在數(shù)據(jù)部分。一個(gè)派生集

22、的成員列表有兩種方式生成:顯式羅列;設(shè)置成員資格過濾器。當(dāng)采用方式時(shí),必須顯式羅列出所有要包含在派生集中的成員,并且羅列的每個(gè)成員必須屬于稠密集。使用前面的例子,顯式羅列派生集的成員:allowed(product,machine,week)/A M 1,A N 2,B N 1/;如果需要生成一個(gè)大的、稀疏的集,那么顯式羅列就很討厭。幸運(yùn)地是許多稀疏集的成員都滿足一些條件以和非成員相區(qū)分。我們可以把這些邏輯條件看作過濾器,在LINGO生成派生集的成員時(shí)把使邏輯條件為假的成員從稠密集中過濾掉。例如:sets: !學(xué)生集:性別屬性sex,1表示男性,0表示女性;年齡屬性age. ; student

23、s/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;endsetsdata: sex,age = 1 16 0 14 0 17 0 13; friend = 0.3 0.5 0.6;enddata用豎線(|)來標(biāo)記一個(gè)成員資格過濾器的開始

24、。#eq#是邏輯運(yùn)算符,用來判斷是否“相等”,&1可看作派生集的第1個(gè)原始父集的索引,它取遍該原始父集的所有成員;&2可看作派生集的第2 個(gè)原始父集的索引,它取遍該原始父集的所有成員;&3,&4,以此類推。注意如果派生集B的父集是另外的派生集A,那么上面所說的原始父集是集A向前回溯到最終的原始集,其順序保持不變,并且派生集A的過濾器對(duì)派生集B仍然有效。因此,派生集的索引個(gè)數(shù)是最終原始父集的個(gè)數(shù),索引的取值是從原始父集到當(dāng)前派生集所作限制的總和。18.2.3模型的數(shù)據(jù)部分在處理模型的數(shù)據(jù)時(shí),需要為集指派一些成員并且在LINGO求解模型之前為集的某些屬性指定值。為此,LINGO為用戶提供了兩個(gè)可選

25、部分:輸入集成員和數(shù)據(jù)的數(shù)據(jù)部分(Data Section)和為決策變量設(shè)置初始值的初始部分(Init Section)。數(shù)據(jù)部分以關(guān)鍵字“data:”開始,以關(guān)鍵字“enddata”結(jié)束。在這里,可以指定集成員、集的屬性。其語法如下:object_list = value_list;對(duì)象列(object_list)包含要指定值的屬性名、要設(shè)置集成員的集名,用逗號(hào)或空格隔開。一個(gè)對(duì)象列中至多有一個(gè)集名,而屬性名可以有任意多。如果對(duì)象列中有多個(gè)屬性名,那么它們的類型必須一致。如果對(duì)象列中有一個(gè)集名,那么對(duì)象列中所有的屬性的類型就是這個(gè)集。數(shù)值列(value_list)包含要分配給對(duì)象列中的對(duì)象的

26、值,用逗號(hào)或空格隔開。注意屬性值的個(gè)數(shù)必須等于集成員的個(gè)數(shù)。例如:sets: 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)同樣的功能。sets: 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ì)象,LIN

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

28、34 .02;enddata在某些情況,對(duì)于模型中的某些數(shù)據(jù)并不是定值,我們實(shí)時(shí)對(duì)數(shù)據(jù)進(jìn)行處理,LINGO有一個(gè)特征可方便地做到這件事,也就是, 在本該放數(shù)的地方輸入一個(gè)問號(hào)(?)。例如:data: interest_rate,inflation_rate = .034 ?;enddata每一次求解模型時(shí),LINGO都會(huì)提示為參數(shù)inflation_rate輸入一個(gè)值。18.2.4模型的初始部分初始部分是LINGO提供的另一個(gè)可選部分。在初始部分中,可以輸入初始聲明和數(shù)據(jù)部分中的數(shù)據(jù)聲明相同。對(duì)實(shí)際問題的建模時(shí),初始部分并不起到描述模型的作用,在初始部分輸入的值僅被LINGO求解器當(dāng)作初始點(diǎn)來

29、用,并且僅僅對(duì)非線性模型有用。和數(shù)據(jù)部分指定變量的值不同,LINGO求解器可以自由改變初始部分初始化的變量的值。一個(gè)初始部分以“init:”開始,以“endinit”結(jié)束。初始部分的初始聲明規(guī)則和數(shù)據(jù)部分的數(shù)據(jù)聲明規(guī)則相同。也就是說,我們可以在聲明的左邊同時(shí)初始化多個(gè)集屬性,可以把集屬性初始化為一個(gè)值,可以用問號(hào)實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)處理,還可以用逗號(hào)指定未知數(shù)值。例如:init: X, Y = 0, .1;endinitY=log(X);X2+Y2=1;好的初始點(diǎn)會(huì)減少模型的求解時(shí)間。18.3 運(yùn)算符及函數(shù)18.3.1 算術(shù)運(yùn)算符算術(shù)運(yùn)算符是針對(duì)數(shù)值進(jìn)行操作的。LINGO提供了5種二元運(yùn)算符:乘方乘除

30、加減LINGO唯一的一元算術(shù)運(yùn)算符是取反函數(shù)“”。這些運(yùn)算符的優(yōu)先級(jí)由高到底為:高(取反) 低運(yùn)算符的運(yùn)算次序?yàn)閺淖蟮接野磧?yōu)先級(jí)高低來執(zhí)行。運(yùn)算的次序可以用圓括號(hào)“()”來改變。18.3.2邏輯運(yùn)算符在LINGO中,邏輯運(yùn)算符主要用于集循環(huán)函數(shù)的條件表達(dá)式中,來控制在函數(shù)中哪些集成員被包含,哪些被排斥。在創(chuàng)建稀疏集時(shí)用在成員資格過濾器中。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;

31、否則為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#18.3.3關(guān)系運(yùn)算符在LINGO中,關(guān)系運(yùn)算符主要是被用在模型中,來指定一個(gè)表

32、達(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)系。下面給出以上三類操作符的優(yōu)先級(jí):高#not# (取反) #eq# #ne# #gt# #ge# #lt# #le#and# #or#低 =18.3.4 ole函數(shù)下面介紹一種特別有用的函數(shù): ole函數(shù)OLE是從EXCEL中引入或輸出數(shù)據(jù)的接口函數(shù),它是基于傳輸?shù)腛LE技術(shù)。O

33、LE傳輸直接在內(nèi)存中傳輸數(shù)據(jù),并不借助于中間文件。當(dāng)使用OLE時(shí),LINGO先裝載EXCEL,再通知EXCEL裝載指定的電子數(shù)據(jù)表,最后從電子數(shù)據(jù)表中獲得Ranges。為了使用OLE函數(shù),必須有EXCEL5及其以上版本。OLE函數(shù)可在數(shù)據(jù)部分和初始部分引入數(shù)據(jù)。OLE可以同時(shí)讀集成員和集屬性,集成員最好用文本格式,集屬性最好用數(shù)值格式。原始集每個(gè)集成員需要一個(gè)單元(cell),而對(duì)于n元的派生集每個(gè)集成員需要n個(gè)單元,這里第一行的n個(gè)單元對(duì)應(yīng)派生集的第一個(gè)集成員,第二行的n個(gè)單元對(duì)應(yīng)派生集的第二個(gè)集成員,依此類推。OLE只能讀一維或二維的Ranges(在單個(gè)的EXCEL工作表(sheet)中)

34、,但不能讀間斷的或三維的Ranges。Ranges是自左而右、自上而下來讀。請(qǐng)看下例:sets: PRODUCT; !產(chǎn)品; MACHINE; !機(jī)器; WEEK; !周; ALLOWED(PRODUCT,MACHINE,WEEK):x,y; !允許組合及屬性;endsetsdata: rate=0.01; PRODUCT,MACHINE,WEEK,ALLOWED,x,y=OLE(D:IMPORT.XLS); OLE(D:IMPORT.XLS)=rate;enddata代替在代碼文本的數(shù)據(jù)部分顯式輸入形式,我們把相關(guān)數(shù)據(jù)全部放在如下電子數(shù)據(jù)表中來輸入。下面是D:IMPORT.XLS的圖表。除了

35、輸入數(shù)據(jù)之外,我們也必須定義Ranges名:PRODUCT,MACHINE,WEEK,ALLOWED,x,y. 明確的,我們需要定義如下的Ranges名:Name RangePRODUCT B3:B4MACHINE C3:C4WEEK D3:D5ALLOWED B8:D10X F8:F10Y G8:G10rate C13為了在EXCEL中定義Ranges名: 按鼠標(biāo)左鍵拖曳選擇Range, 釋放鼠標(biāo)按鈕, 選擇“插入|名稱|定義”, 輸入希望的名字, 點(diǎn)擊“確定”按鈕。我們?cè)谀P偷臄?shù)據(jù)部分用如下代碼從EXECL中引入數(shù)據(jù):PRODUCT,MACHINE,WEEK,ALLOWED,x,y=OLE(D:IMPORT.XLS);OLE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論