lingo軟件使用教程_第1頁
lingo軟件使用教程_第2頁
lingo軟件使用教程_第3頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、lingo軟件使用教程一般來說,一個優(yōu)化模型將由以下三局部組成:1. 目標函數(Objective Function):要到達的目標。2. 決策變量(Decision variables):每組決策變量的值代表一種方案。在優(yōu)化模型中需要確定 決策變量的最優(yōu)值,優(yōu)化的目標就是找到決策變量的最優(yōu)值使得目標函數取得最優(yōu)。3. 約束條件(Constraints):對于決策變量的一些約束,它限定決策變量可以取的值。在寫數學模型時,一般第一行是目標函數,接下來是約束條件,再接著是一些非負限制等。 在模型窗口輸入如下代碼:Max = 2*x1+3*x2;X1+2*x2<=8;4*x1<16;4*

2、x2<12;注意:1.每一個lingo表達式最后要跟一個分號 ;2多數電腦中沒有符號,lingo中<=代替;為了方便可以用 <代替小于等于,用 >代替大于等于。3. 我們可以添加一些注釋,增加程序的可讀性。注釋以一個!(嘆號必須在英文狀態(tài)下輸入,它會自動變?yōu)榫G色)開始,以;(分號)結束。4. Lingo中不區(qū)分變量名的大小寫。變量名必須以字母(A-Z)開頭,后面的字符可以是字母、數字、下劃線。變量名不能超過32個字符。Lingo程序的一些規(guī)那么:1. 在Lin go中最開始都是"MAX=或者"MIN= 開始表示求目標函數的最大或者最小值。2. 變量和

3、它前面的系數之間要用“* 連接,中間可以有空格。3. 變量名不區(qū)分大小寫,但必須以字母開始,不超過32個字符。4. 數學表達式結束時要用分號“;表示結束。表達式可以寫在多行上,但是表達式中間不 能用分號。5. 在電腦系統中一般沒有“小于等于符號,在Lin go采用“ <=來表示“小于等于,用“>=表示“大于等于。小于等于也可以用更簡單的“<表示,大于等于用“ >表示。集合段:在我們已經得到的程序里有一些量沒有定義,如WAREHOUSES( ,) DEMAND( J), LINKS( I, J。這些量將在Lin go中的集合段定義。集合段以SETS表示開始,以ENDSET

4、S示結束。如果一個集合的元素都已經定義過,就可以用一些循環(huán)函數(如for).注:1.集合的屬性相當于以集合的元素為下標的數組。Lin go中沒有數組的概念,只有定義在集合上的屬性的概念。2集合的定義語法:set_ name/set_member/:attributeist;集合的名稱在左邊,右邊是這個集合上的屬性,他們之間用冒號“:分割開,最后由分號表示結束。如果在同一個集合上有多個屬性時,不同的屬性之間用逗號“,隔開,如本例的cost和volume屬性。如果要特別列出集合的元素時,在集合的名稱后把元素寫在兩條斜線之間,如本例中的倉庫可以寫為WAREHOUSES/WH1, WH2, WH3,

5、WH4, WH5, WH6/: CAPACITY;也可以寫為 WAREH0USES/WH1.WH6/: CAPACITY; LingO自動生成需要的集合元素。數據段:數據段以DATA開始,以ENDDATA表示數據段結束。注意:在給類似link這樣的集合賦值時,外邊的指標先增加。注:1. Longo模型以model:表示模型開始,以 end表示模型結束。2. 嘆號為lingo的注釋符,以分號表示注釋結束。注釋可以寫在多行,一般顯示為綠色。3. 如果只想看到求解結果中的非零局部,可以在菜單中選擇solution,在屬性或行名稱下拉框中選擇 volume,在勾選 Non zeros復選框。例1.2使

6、用LINGO軟件計算6個發(fā)點8個收點的最小費用運輸問題。產銷單位運價如下表。單銷地EiBi產量山6272&g60A;49513S5B2555219743351767S927143235726&41&522814352銷量353722324132433Smodel:!6發(fā)點8收點運輸問題;sets:warehouses/wh1.wh6 /: capacity;ven dors/v1.v8/: dema nd;lin ks(warehouses,ve ndors): cost, volume; endsets !目標函數;min=sum(links: cost*volume

7、); !需求約束;for(ve ndors(J):sum(warehouses(l): volume(I,J)=demand(J); !產量約束;for(warehouses(I):sum (ven dors(J): volume(l,J)<=capacity(l);!這里是數據;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 54 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

8、 3;enddataendLING O中的集對實際問題建模的時候, 總會遇到一群或多群相聯系的對象, 比方工廠、 消費者 群體、交通工具和雇工等等。LINGO允許把這些相聯系的對象聚合成集(sets)。 一旦把對象聚合成集,就可以利用集來最大限度的發(fā)揮 LINGO建模語言的優(yōu)勢。 現在我們將深入介紹如何創(chuàng)立集, 并用數據初始化集的屬性。 學完本節(jié)后, 你對 基于建模技術的集如何引入模型會有一個根本的理解。2.1 為什么使用集集是LINGO建模語言的根底,是程序設計最強有力的根本構件。借助于集,能 夠用一個單一的、 長的、 簡明的復合公式表示一系列相似的約束, 從而可以快速方便地表 達規(guī)模較大的

9、模型。2.2什么是集 集是一群相聯系的對象,這些對象也稱為集的成員。一個集可能是一系列產品、 卡車或雇員。 每個集成員可能有一個或多個與之有關聯的特征, 我們把這些特征 稱為屬性。屬性值可以預先給定,也可以是未知的,有待于 LINGO求解。例如, 產品集中的每個產品可以有一個價格屬性; 卡車集中的每輛卡車可以有一個牽引 力屬性;雇員集中的每位雇員可以有一個薪水屬性,也可以有一個生日屬性等LINGO有兩種類型的集:原始集(primitive set)和派生集(derived set)。一個原始集 是由一些最根本的對象組成的。 一個派生集是用一個或多個其它集來定義的,也就是說,它的成員來自于其它已

10、存在的集。2.3 模型的集局部集局部是LINGO模型的一個可選局部。在LINGO模型中使用集之前,必須在集 局部事先定義。集局部以關鍵字“ sets:開始,以“ endsets結束。一個模型可 以沒有集局部, 或有一個簡單的集局部, 或有多個集局部。 一個集局部可以放置 于模型的任何地方, 但是一個集及其屬性在模型約束中被引用之前必須定義了它 們。2.3.1 定義原始集為了定義一個原始集,必須詳細聲明:集的名字可選,集的成員可選,集成員的屬性定義一個原始集,用下面的語法:setname/member_list/:attribute_list;注意:用“ 表示該局部內容可選。下同,不再贅述。Se

11、t name是你選擇的來標記集的名字,最好具有較強的可讀性。集名字必須嚴格 符合標準命名規(guī)那么:以拉丁字母或下劃線_為首字符,其后由拉丁字母AZ、 下劃線、阿拉伯數字 0, 1, ,, 9組成的總長度不超過 32 個字符的字符串, 且不區(qū)分大小寫。注意:該命名規(guī)那么同樣適用于集成員名和屬性名等的命名。Member_list 是集成員列表。如果集成員放在集定義中,那么對它們可采取顯式 羅列和隱式羅列兩種方式。 如果集成員不放在集定義中, 那么可以在隨后的數據 局部定義它們。 當顯式羅列成員時,必須為每個成員輸入一個不同的名字,中間用空格或逗 號擱開,允許混合使用。例 2.1 可以定義一個名為 s

12、tudents 的原始集,它具有成員 John、 Jill、 Rose和Mike,屬性有sex和age:sets:students/John, Jill, Rose, Mike/: sex, age;endsets當隱式羅列成員時,不必羅列出每個集成員??刹捎萌缦抡Z法:set name/member1.memberN/: attribute_list;這里的memberl是集的第一個成員名,memberN是集的最末一個成員名。LING 0將自動產生中間的所有成員名。LINGO也接受一些特定的首成員名和 末成員名,用于創(chuàng)立一些特殊的集。列表如下:隱式成員歹康格式例如所產生集成員1n1. . 5C

13、ar2 *Carl4DayH. , DayNMoix. P FiiJliIaELj Tue? IV ed7 Hiuij Fx 1IrtoTi+hW. xOct. J ailOctj Kovj Dec, JanNonthYeaxIrt.Qct2001, - J3»2002Oct2001,1 PecSOOl, Jan2002集成員不放在集定義中,而在隨后的數據局部來定義例2.2!集局部;sets:stude nts:sex,age;endsets數據局部;data:stude nts,sex,age= Joh n 1 16Jill 0 14Rose 0 17Mike 1 13;en dd

14、ata注意:開頭用感慨號!,末尾用分號;表示注釋,可跨多行。在集局部只定義了一個集 stude nts,并未指定成員。在數據局部羅列了集成員John Jill、Rose和Mike,并對屬性sex和age分別給出了值。集成員無論用何種字符標記,它的索引都是從 1開始連續(xù)計數。在 attribute_ list可以指定一個或多個集成員的屬性,屬性之間必須用逗號隔開??梢园鸭?、集成員和集屬性同 C語言中的結構體作個類比。如下列圖:集 <> 結構體集成員 <> 結構體的域集屬性 <> 結構體實例 LINGO內置的建模語言是一種描述性語言,用它可以描述現實世界中的一些

15、 問題,然后再借助于LINGO求解器求解。因此,集屬性的值一旦在模型中被 確定,就不可能再更改。在LING 0中,只有在初始局部中給出的集屬性值在 以后的求解中可更改。這與前面并不矛盾,初始局部是LINGO求解器的需要, 并不是描述問題所必須的。例 2.3sets:product/A B/;machine/M N/;week/1.2/;allowed(product,machine,week):x;endsetsLINGO生成了三個父集的所有組合共八組作為 allowed集的成員。列表如下:編號 成員1 (A,M,1)2 (A,M,2)3 (A,N,1)4 (A,N,2)5 (B,M,1)6

16、(B,M,2)7 (B,N,1)8 (B,N,2)成員列表被忽略時,派生集成員由父集成員所有的組合構成,這樣的派生集 成為稠密集。如果限制派生集的成員,使它成為父集成員所有組合構成的集 合的一個子集,這樣的派生集成為稀疏集。同原始集一樣,派生集成員的聲 明也可以放在數據局部。一個派生集的成員列表有兩種方式生成:顯式羅 列;設置成員資格過濾器。當采用方式時,必須顯式羅列出所有要包含 在派生集中的成員, 并且羅列的每個成員必須屬于稠密集。 使用前面的例子, 顯式羅列派生集的成員:allowed(product,machine,week)/A M 1,A N 2,B N 1/;如果需要生成一個大的、

17、稀疏的集,那么顯式羅列就很討厭。幸運地是許多 稀疏集的成員都滿足一些條件以和非成員相區(qū)分。我們可以把這些邏輯條件 看作過濾器,在LINGO生成派生集的成員時把使邏輯條件為假的成員從稠密 集中過濾掉。、例 2.4sets:!學生集:性別屬性 sex, 1 表示男性, 0表示女性;年齡屬性 age. students/John,Jill,Rose,Mike/:sex,age;!男學生和女學生的聯系集:友好程度屬性 friend , 0, 1之間的數。 linkmf(students,students)|sex(&1) #eq# 1 #and# sex(&2) #eq# 0: fri

18、end; !男學生和女學生的友好程度大于 0.5 的集;linkmf2(linkmf) | friend(&1,&2) #ge# 0.5 : x;endsetsdata:sex,age = 1 160 140 170 13;friend = 0.3 0.5 0.6;enddata用豎線(|)來標記一個成員資格過濾器的開始。#eq#是邏輯運算符,用來判 斷是否“相等,可參考§ 4. &1 可看作派生集的第 1個原始父集的索引,它 取遍該原始父集的所有成員; &2 可看作派生集的第 2 個原始父集的索引, 它 取遍該原始父集的所有成員; &3, &

19、amp;4, , ,以此類推。注意如果派生集 B 的父集是另外的派生集A,那么上面所說的原始父集是集 A向前回溯到最終 的原始集,其順序保持不變,并且派生集 A的過濾器對派生集B仍然有效。 因此,派生集的索引個數是最終原始父集的個數,索引的取值是從原始父集 到當前派生集所作限制的總和。總的來說,LINGO可識別的集只有兩種類型:原始集和派生集。 在一個模型中,原始集是根本的對象,不能再被拆分成更小的組分。原始集 可以由顯式羅列和隱式羅列兩種方式來定義。當用顯式羅列方式時,需在集 成員列表中逐個輸入每個成員。當用隱式羅列方式時,只需在集成員列表中 輸入首成員和末成員,而中間的成員由 LINGO產

20、生。另一方面,派生集是由其它的集來創(chuàng)立。這些集被稱為該派生集的父集原 始集或其它的派生集。一個派生集既可以是稀疏的,也可以是稠密的。稠 密集包含了父集成員的所有組合有時也稱為父集的笛卡爾乘積。稀疏集僅包含了父集的笛卡爾乘積的一個子集,可通過顯式羅列和成員資格過濾器 這兩種方式來定義。顯式羅列方法就是逐個羅列稀疏集的成員。成員資格過 濾器方法通過使用稀疏集成員必須滿足的邏輯條件從稠密集成員中過濾出 稀疏集的成員。不同集類型的關系見下列圖。§ 3模型的數據局部和初始局部在處理模型的數據時,需要為集指派一些成員并且在LINGO求解模型之前為集的某些屬性指定值。為此,LINGO為用戶提供了兩

21、個可選局部:輸入集 成員和數據的數據局部Data Section和為決策變量設置初始值的初始局部Init Section。3.1模型的數據局部數據局部入門數據局部提供了模型相對靜止局部和數據別離的可能性。顯然,這對模型的 維護和維數的縮放非常便利。數據局部以關鍵字“data: 開始,以關鍵字“ en ddata 結束。在這里,可以 指定集成員、集的屬性。其語法如下:object_list = value_list;對象列(o bject_list )包含要指定值的屬性名、要設置集成員的集名,用逗號 或空格隔開。一個對象列中至多有一個集名,而屬性名可以有任意多。如果 對象列中有多個屬性名,那么它

22、們的類型必須一致。如果對象列中有一個集 名,那么對象列中所有的屬性的類型就是這個集。數值列( value_list )包含要分配給對象列中的對象的值,用逗號或空格隔 開。注意屬性值的個數必須等于集成員的個數??聪旅娴睦?。例 3.1sets:set1/A,B,C/:X,Y;endsetsdata:X=1,2,3;Y=4,5,6;enddata在集setl中定義了兩個屬性X和Y。X的三個值是1、2和3, Y的三個值是4、 5 和 6。也可采用如下例子中的復合數據聲明( data statement )實現 同樣的功能。例 3.2sets:set1/A,B,C/: X,Y;endsets data

23、:X,Y=1 42 53 6;看到這個例子,可能會認為 X被指定了 1、4和2三個值,因為它們是數值 列中前三個,而正確的答案是1、2和3。假設對象列有n個對象,LINGO在 為對象指定值時,首先在 n 個對象的第 1 個索引處依次分配數值列中的前 n 個對象,然后在n個對象的第2個索引處依次分配數值列中緊接著的 n個對 象, , ,以此類推。模型的所有數據 屬性值和集成員 被單獨放在數據局部,這可能是最 標準的數據輸入方式。3.1.2 參數在數據局部也可以指定一些標量變量scalar variable®。當一個標量變量在 數據局部確定時,稱之為參數??匆焕僭O模型中用利率 8.5

24、%作為一個參 數,就可以象下面一樣輸入一個利率作為參數。例 3.3data:interest_rate = .085;enddata也可以同時指定多個參數。例 3.4data:interest_rate,inflation_rate = .085 .03;enddata3.1.3 實時數據處理在某些情況,對于模型中的某些數據并不是定值。譬如模型中有一個通貨膨 脹率的參數,我們想在 2%至 6%范圍內,對不同的值求解模型,來觀察模型 的結果對通貨膨脹的依賴有多么敏感。我們把這種情況稱為實時數據處理what if analysis。 LINGO有一個特征可方便地做到這件事。在本該放數的地方輸入一個

25、問號 ?。例 3.5data:interest_rate,inflation_rate = .085 ?;每一次求解模型時,LINGO都會提示為參數inflation_rate輸入一個值。在WINDOWS操作系統下,將會接收到一個類似下面的對話框:Fl 皂Liipiit a iralue for:| _HnATIDK.WTS _sCancel| 血 直接輸入一個值再點擊OK按鈕,LINGO就會把輸入的值指定給inflation_rate, 然后繼續(xù)求解模型。除了參數之外,也可以實時輸入集的屬性值,但不允許實時輸入集成員名。指定屬性為一個值可以在數據聲明的右邊輸入一個值來把所有的成員的該屬性指定

26、為一個值??聪旅娴睦?。例3.6sets:days /MO,TU,WE,TH,FR,SA,SU/: needs;en dsets data:n eeds = 20;en ddataLINGO將用20指定days集的所有成員的needs屬性。對于多個屬性的情形, 見下例。例3.7sets:days /MO,TU,WE,TH,FR,SA,SU/: needs,cost;en dsetsdata:n eeds cost = 20 100;en ddata3.2模型的初始局部初始局部是LINGO提供的另一個可選局部。在初始局部中,可以輸入初始聲明(initialization statement),和

27、數據局部中的數據聲明相同。對實際問題的建模時,初始 局部并不起到描述模型的作用,在初始局部輸入的值僅被LINGO求解器當作初始點來用,并且僅僅對非線性模型有用。和數據局部指定變量的值不同,LINGO求解器可以自由改變初始局部初始化的變量的值。一個初始局部以“ init: 開始,以“ endinit 結束。初始局部的初始聲明規(guī)那么和數據部 分的數據聲明規(guī)那么相同。也就是說,我們可以在聲明的左邊同時初始化多個集屬性,可 以把集屬性初始化為一個值, 可以用問號實現實時數據處理, 還可以用逗號指定未知數 值。 例 3.9init:X, Y = 0, .1;endinitY=log(X);XA2+YA2

28、<=1;好的初始點會減少模型的求解時間。 在這一節(jié)中, 我們僅帶大家接觸了一些根本的數 據輸入和初始化概念, 不過現在你應該可以輕松的為自己的模型參加原始數據和初始部 分啦。LINGO 函數有了前幾節(jié)的根底知識, 再加上本節(jié)的內容, 你就能夠借助于 LINGO 建立并求解復雜 的優(yōu)化模型了。LINGO有9種類型的函數:1 根本運算符:包括算術運算符、邏輯運算符和關系運算符2 數學函數:三角函數和常規(guī)的數學函數 3.金融函數:LING 0提供的兩種金融函數4.概率函數:LINGO提供了大量概率相關的函數5 變量界定函數:這類函數用來定義變量的取值范圍 6 集操作函數: 這類函數為對 集的操

29、作提供幫助7 集循環(huán)函數:遍歷集的元素,執(zhí)行一定的操作的函數8 數據輸入輸出函數: 這類函數允許模型和外部數據源相聯系, 進行數據的輸入輸出9 輔助函數:各種雜類函數4.1 根本運算符這些運算符是非常根本的,甚至可以不認為它們是一類函數。事實上,在LINGO中它們是非常重要的。4.1.1 算術運算符算術運算符是針對數值進行操作的。LINGO提供了 5種二元運算符:人乘 方*乘/除+加-減LING O唯一的一元算術運算符是取反函數“-。這些運算符的優(yōu)先級由高到底為:高-(取反)人*/低+ - 運算符的運算次序為從左到右按優(yōu)先級上下來執(zhí)行。運算的次序可以用圓括號“()來改變。例4.1算術運算符例如

30、。 2 -5/3, (2 + 4)/5等等。邏輯運算符 在LINGO中,邏 輯運算符主要用于集循環(huán)函數的條件表達式中, 來控制在函數中哪些集成員被包含, 哪 些被排斥。在創(chuàng)立稀疏集時用在成員資格過濾器中。LINGO具有9種邏輯運算符:#not# 否認該操作數的邏輯值, not 是一個一元運算符#eq# 假設兩個運算數相等,那么為 true ;否那么為 flase #ne# 假設兩個運算符不相等,那么為 true ;否那么為 flasetrue ;否那么為 flasetrue ;否那么為 flasetrue ;否那么為 flasetrue ;否那么為 flase#gt# 假設左邊的運算符嚴格大于

31、右邊的運算符,那么為#ge# 假設左邊的運算符大于或等于右邊的運算符,那么為#lt# 假設左邊的運算符嚴格小于右邊的運算符,那么為#le# 假設左邊的運算符小于或等于右邊的運算符,那么為#and# 僅當兩個參數都為 true 時,結果為 true ;否那么為 flase#or# 僅當兩個參數都為false時,結果為false;否那么為true這些運算符的優(yōu)先級由高到低為:高 #not#eq# #ne# #gt# #ge# #lt# #le#低 #and# #or#例 4.2 邏輯運算符例如2 #gt# 3 #and# 4 #gt# 2 ,其結果為假( 0)。4.1.3 關系運算符在 LINGO

32、 中,關系運算符主要是被用在模型中,來指定一個表達式的左邊是否等于、 小于等于、 或者大于等于右邊, 形成模型的一個約束條件。 關系運算符與邏輯運算符 #eq#、 #le#、#ge#截然不同,前者是模型中該關系運算符所指定關系的為真描述,而后者僅僅 判斷一個該關系是否被滿足:滿足為真,不滿足為假。LINGO有三種關系運算符:“=、“<=和“ >=。LINGO中還能用“ <表示小于等于關 系,“表示大于等于關系。LINGO并不支持嚴格小于和嚴格大于關系運算符。然而, 如果需要嚴格小于和嚴格大于關系,比方讓 A 嚴格小于 B:A<B,那么可以把它變成如下的小于等于表達式:A

33、+ e <=B,A小于B多少才算不等。這里&是一個小的正數,它的值依賴于模型中下面給出以上三類操作符的優(yōu)先級:高#n ot# -(取反)* /+ #eq# #ne# #gt# #ge# #lt# #le#and# #or#低 <= = >=4.2 數學函數LINGO提供了大量的標準數學函數:abs(x)返回 x 的絕對值sin(x)返回 x 的正弦值, x 采用弧度制cos(x)返回 x 的余弦值tan(x)返回 x 的正切值exp(x)返回常數 e 的 x 次方log(x)返回 x 的自然對數lgm(x)返回 x 的 gamma函數的自然對數sign(x) 如果 x

34、<0 返回 -1;否那么,返回 1floor(x) 返回 x 的整數局部。當 x>=0 時,返回不超過 x 的最大整數;當x<0 時,返回不低于 x 的最小整數。smax(x1,x2, ,xn) 返回 x1, x2, , ,xn 中的最大值smin(x1,x2, ,xn)返回 x1, x2, , , xn 中的最小值 例 431 求 sin(2), floor(-1.2)的值.4.3 概率函數1 pbn(p,n,x)二項分布的累積分布函數。當n和(或)x不是整數時,用線性插值法進行計算。2pcx(n,x)自由度為n的x 2分布的累積分布函數。3peb(a,x)當到達負荷為a,

35、效勞系統有x個效勞器且允許無窮排隊時的Erlang繁忙概率。4pel(a,x)當到達負荷為a,效勞系統有x個效勞器且不允許排隊時的Erlang繁忙概率。5pfd(n,d,x)自由度為n和d的F分布的累積分布函數。6pfs(a,x,c)當負荷上限為a,顧客數為c,平行效勞器數量為 x時,有限源的Poisson效勞系統的等 待或返修顧客數的期望值。 a 是顧客數乘以平均效勞時間,再除以平均返修時間。當c和(或)x不是整數時,采用線性插值進行計算。7phg(pop,g,n,x)超幾何(Hypergeometric )分布的累積分布函數。pop表示產品總數,g是正品數。從所有產品中任意取出 n (nW

36、 pop)件。pop, g, n和x都可以是非整數,這時采用線性插 值進行計算。8ppl(a,x)Poisson分布的線性損失函數,即返回max(0,z-x )的期望值,其中隨機變量z服從均值為a 的 Poisson 分布。9pps(a,x)均值為 a 的 Poisson 分布的累積分布函數。當 x 不是整數時,采用線性插值進行計算。 10 psl(x)單位正態(tài)線性損失函數,即返回max(0,z-x)的期望值,其中隨機變量z服從標準正態(tài)分布。11psn(x)標準正態(tài)分布的累積分布函數。12ptd(n,x)自由度為n的t分布的累積分布函數。13. qrand(seed):次可以生成很多產生服從

37、(0,1)區(qū)間的擬隨機數。qrand 只允許在模型的數據局部使用,它將用擬隨機數填滿集屬性。通常,聲明一個mxn的二維表,m表示運行實驗的次數,n表示每次實驗所需的隨機數的個數。在行內,隨機數是獨立分布的;在行間,隨機數是非常均勻 的。這些隨機數是用“分層取樣的方法產生的。例 4.5model: data:M=4; N=2; seed=1234567;enddata sets:rows/1.M/;cols/1.N/;table(rows,cols): x;endsetsdata:X=qrand(seed);enddataend如果沒有為函數指定種子,那么LINGO將用系統時間構造種子。14.

38、rand(seed): 次只生成一個返回0和1間的偽隨機數,依賴于指定的種子。典型用法是U(l+1)=rand(U(l)。注意如果 seed 不變,那么產生的隨機數也不變。例 4.6 利用 rand 產生 1 5個標準正態(tài)分布的隨機數和自由度為2的 t 分布的隨機數。model:!產生一列正態(tài)分布和 t 分布的隨機數 ;sets:series/1.15/: u, znorm, zt;endsets!第一個均勻分布隨機數是任意的;u( 1) = rand( .1234);!產生其余的均勻分布的隨機數;for(series( l)| l #GT# 1: u( l) = rand( u( l - 1

39、);for( series( l):!正態(tài)分布隨機數 ;psn( znorm( l) = u( l);!和自由度為 2 的 t 分布隨機數 ;ptd( 2, zt( l) = u( l);!ZNORM 和 ZT 可以是負數 ;free( znorm( l); free( zt( l););end4.5 變量界定函數變量界定函數實現對變量取值范圍的附加限制,共 4 種:bin(x) 限制 x 為 0 或 1bnd(L,x,U) 限制 Lw xw Ufree(x)取消對變量x的默認下界為0的限制,即x可以取任意實數gin(x) 限制 x 為整數在默認情況下,LINGO規(guī)定變量是非負的,也就是說下界

40、為0,上界為+8。free取消了默認的下界為 0 的限制, 使變量也可以取負值。 bnd 用于設定一個變量的上下界 , 它也可以取消默認下界為 0 的約束。LlNGO WlNDOWS 命令5.1 文件菜單( File Menu )1 1 新建( New )從文件菜單中選用“新建命令、單擊“新建按鈕或直接按 F2 鍵可以創(chuàng)立一個新 的“ Model 窗口。在這個新的“ Model 窗口中能夠輸入所要求解的模型。2 2 翻開( Open)從文件菜單中選用“翻開命令、單擊“翻開按鈕或直接按 F3 鍵可以翻開一個 已經存在的文本文件。這個文件可能是一個 Model 文件。3 3 保存 (Save)從文

41、件菜單中選用“保存命令、單擊“保存按鈕或直接按 F4 鍵用來保存當前 活動窗口(最前臺的窗口)中的模型結果、命令序列等保存為文件。4. 4.另存為.(Save As .)從文件菜單中選用"另存為.命令或按F5鍵可 以將當前活動窗口中的內容保存為文本文件,其文件名為你在“另存為對話框中輸入的文件名。 利用這種方法你可以將任何窗口的內容如模型、 求解結果或命令保存為文件。5 5 關閉( Close)在文件菜單中選用“關閉(Close)命令或按F6鍵將關閉當前活動窗口。如果這個窗口是新建窗口或已經改變了當前文件的內容,LINGO系統將會提示是否想要保存改變后的內容。6 6 打印 (Prin

42、t)在文件菜單中選用“打印(Pri nt)命令、單擊“打印按鈕或直接按F7鍵可以將當前活動窗口中的內容發(fā)送到打印機。7 7打印設置 (Print Setup ) 在文件菜單中選用“打印設置 命令或直接按 F8 鍵可以將文件輸出到指定的打印機。8 8 打印預覽 (Print Preview) 在文件菜單中選用“打印預覽 命令或直接按 Shift+F8 鍵可以進行打印預覽。9. 9.輸出到日志文件(Log Output.) 從文件菜單中選用“ Log Output ."命令 或按 F9 鍵翻開一個對話框,用于生成一個日志文件,它存儲接下來在“命令窗口中 輸入的所有命令。10 提 交 LI

43、NGO 命 令 腳 本 文 件 (Take Commands ) 從 文 件 菜 單 中 選 用 “ Take Comma nds."命令或直接按 F11鍵就可以將 LINGO命令腳本(comma nd script) 文件提交給系統進程來運行。11.引入 LINGO文件(Import Lingo File .)從文件菜單中選用“ Import Lingo File ." 命令或直接按F12鍵可以翻開一個LINGO格式模型的文件,然后LINGO系統會盡可能把 模型轉化為LINGO語法允許的程序。12 退出( Exit)從文件菜單中選用“ Exit 命令或直接按 F10鍵可以

44、退出LINGO系統。5.2 編輯菜單 (Edit Menu)1 1 恢復 (Undo) 從編輯菜單中選用“恢復"至其前的狀態(tài)。2 2 剪切 (Cut) 從編輯菜單中選用“剪切"至剪貼板中。3 3 復制 (Copy)從編輯菜單中選用“復制"(Undo)命令或按 Ctrl+Z組合鍵,將撤銷上次操作、恢復(Cut)命令或按Ctrl+X組合鍵可以將當前選中的內容剪切(Copy)命令、單擊“復制按鈕或按Ctrl+C組合鍵可以將當前選中的內容復制到剪貼板中。4. 4.粘貼(Paste)從編輯菜單中選用“粘貼(Paste)命令、單擊“粘貼按鈕或按Ctrl+V組合鍵可以將粘貼板中

45、的當前內容復制到當前插入點的位置。5. 5.粘貼特定.(Paste Special。)與上面的命令不同,它可以用于剪貼板中的內容不是文本的情形。6. 6.全選(Select All)從編輯菜單中選用“ Select All命令或按Ctrl+A組合鍵可選定當前窗口中的所有內 容。7. 7.匹配小括號(Match Parenthesis)從編輯菜單中選用 “ Match Parenthesis "命令、單擊“ Match Parenthesis 按鈕或按 Ctrl+P 組合鍵可以為當前選中的開括號查找匹配的閉括號。8. 8.粘貼函數(Paste Function)從編輯菜單中選用 “Pa

46、ste Function命令可以將LINGO 的內部函數粘貼到當前插入點。5.3 LINGO 菜單1. 1.求解模型(Slove)從LINGO菜單中選用“求解命令、單擊“Slove按鈕或按Ctrl+S組合鍵可以將當前模型送入內存求解。2. 2.求解結果.(Solution .) 從LINGO菜單中選用“ Solution .命令、單 擊“Solution .按鈕或直接按 Ctrl+O組合鍵可以翻開求解結果的對話框。這里可以指 定查看當前內存中求解結果的那些內容。3. 3.查看.(Look.)從LINGO菜單中選用“ Look.命令或直接按 Ctrl+L組 合鍵可以查看全部的或選中的模型文本內容

47、。4. 4.靈敏性分析(Range, Ctrl+R)用該命令產生當前模型的靈敏性分析報告:研 究當目標函數的費用系數和約束右端項在什么范圍(此時假定其它系數不變)時,最優(yōu) 基保持不變。靈敏性分析是在求解模型時作出的,因此在求解模型時靈敏性分析是激活狀態(tài),但是默認是不激活的。為了激活靈敏性分析,運行LINGO|Options ,選擇General Solver Tab,在 Dual Computations 列表框中,選擇 Prices and Ranges選項。靈敏 性分析消耗相當多的求解時間,因此當速度很關鍵時,就沒有必要激活它。下面我們看一個簡單的具體例子。例5.1某家具公司制造書桌、餐桌

48、和椅子,所用的資源有三種:木料、木工和漆工。生產數據如下表所示:每個餐桌毎個椅子現有資源總數I Wg單位E單位1單位49單位漆工4電位2單位1- 5單位20里位木工2單位池單位0. 5單位8單位SO單位帥單位20單位假設要求桌子的生產量不超過5件,如何安排三種產品的生產可使利潤最大?用DESKS TABLES CHAIRS分別表示三種產品的生產量,建立LP模型。max=60*desks+30*tables+20*chairs;8*desks+6*tables+chairs<=48;4*desks+2*tables+1.5*chairs<=20;表 示 3 次 迭 代 后 得 到 全

49、 局 最 優(yōu)2*desks+1.5*tables+.5*chairs<=8;Global optimal solution found at iteration:3Objective value:280.0000VariableValueReduced CostDESKS2.0000000.000000TABLES0.0000005.000000CHAIRS8.0000000.000000RowSlack or Surplus Dual Price1280.00001.000000224.000000.00000030.00000010.0000040.00000010.0000055.

50、0000000.000000tables<=5;求解這個模型,并激活靈敏性分析。這時,查看報告窗口Reports Window ,可以看到如下結果。«Global optimal solution found at iteration: 3解?!癘bjective value:280.0000 表示最優(yōu)目標值為 280。 “ Value給出最優(yōu)解中各變量的值:造2個書桌desks , 0個餐桌tables , 8個椅子chairs。所以desks、chairs是基變量非0,tables是非基變量0?!癝lack or Surplus給出松馳變量的值:第 1 行松馳變量 =280

51、模型第一行表示目標函數,所以第二行對應第一個約束第 2 行松馳變量 =24第 3 行松馳變量 =0第 4 行松馳變量 =0第 5 行松馳變量 =5“ Reduced Cost列出最優(yōu)單純形表中判別數所在行的變量的系數,表示當變量有微小變動 時, 目標函數的變化率。其中基變量的reduced cost 值應為 0, 對于非基變量 Xj, 相應的reduced cost值表示當某個變量 Xj增加一個單位時目標函數減少的量max型問題。注:min 型問題時表示當某個變量 Xj 增加一個單位時目標函數增加的量。本例中:變量 tables對應的 reduced cost 值為 5,表示當非基變量 tab

52、les 的值從 0 變?yōu)?1 時此時假定其他非基 變量保持不變,但為了滿足約束條件, 基變量顯然會發(fā)生變化, 最優(yōu)的目標函數 值 = 280 - 5 = 275。“DUAL PRICE 對偶價格表示當對應約束有微小變動時,目標函數的變化率。輸出結果中對應于每一個約束有一個對偶價格。 假設其數值為 p, 表示對應約束中不等式右端項假設增加 1個單位,目標函數將增加 p個單位max型問題。顯然,如果在最優(yōu)解處約束正好取等 號也就是 “緊約束,也稱為有效約束或起作用約束 ,對偶價格值才可能不是 0。本例中: 第 3、 4 行是緊約束,對應的對偶價格值為 10,表示當緊約束 3 4 DESKS + 2

53、 TABLES + 1.5 CHAIRS <= 20變?yōu)?3 4 DESKS + 2 TABLES + 1.5 CHAIRS <= 時21,目標函數值 = 280 +10 = 290。對第 4 行也 類似。對于非緊約束如本例中第 2、5行是非緊約束,DUAL PRICE勺值為0,表示對應約束中不 等式右端項的微小擾動不影響目標函數。 有時,通過分析DUAL PRICE也可對產生不可行問題的原因有所了解。靈敏度分析的結果是Ranges in which the basis is unchanged:Objective Coefficient RangesCurrent Allowab

54、le AllowableDecreaseDESKS 60.0000020.00000 4.000000Variable Coefficient IncreaseINFINITY5.000000TABLES 30.00000 5.000000CHAIRS 20.00000 2.500000Righthand Side RangesRowCurrentRHSAllowableIncreaseAllowableDecrease248.00000INFINITY24.00000320.000004.0000004.00000048.0000002.0000001.33333355.000000INFINITY5.000000目標函數中DESKS變量原來的費用系數為 60,允許增加(Allowable In crease ) =20、允許減 少(Allowable Decrease)=4,說明當它在60-4,60+20 = 56,80范圍變化時,最優(yōu)基保持 不變。對TABLES CHAIRS變量,可以類似解釋。由于此時約束沒有變化(只是目標函數中 某個費用系數發(fā)生變化) ,所以最優(yōu)基保持不變的意思也就是最優(yōu)解不變(當然,由于目標 函數中費用系

溫馨提示

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

評論

0/150

提交評論