版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、LINGO簡明-數(shù)學模型培訓(Security Matrix)LINGO 快速入門LINGO 是用來求解線性和非線性優(yōu)化問題的簡易工具。LINGO 內置了一種建立最優(yōu)化模型的語言,可以簡便地表達大規(guī)模問題,利用 LINGO 高效的求解器可快速求解并分析結果。§1§2LINGO快速入門2LINGO中的集32.12.22.3為什么使用集3什么是集4模型的集部分42.3.1 定義原始集42.3.2 定義派生集5§3模型的數(shù)據(jù)部分和初始部分73.1 模型的數(shù)據(jù)部分73.1.13.1.23.1.33.1.43.1.5數(shù)據(jù)部分入門7參數(shù)8實時數(shù)據(jù)處理8指定屬性為一個值9數(shù)據(jù)部
2、分的未知數(shù)值93.2 模型的初始部分10LINGO函數(shù)10§44.1基本運算符104.1.14.1.24.1.3算術運算符11邏輯運算符11運算符114.24.34.44.54.64.74.84.9數(shù)學函數(shù)12金融函數(shù)13概率函數(shù)13變量界定函數(shù)15集操作函數(shù)15集循環(huán)函數(shù)16輸入和輸出函數(shù)18輔助函數(shù)21§5LINGO WINDOWS命令225.1 文件菜單(File5.2 編輯菜單(Edit) .22) .235.3 LINGO菜單235.4 窗口菜單(Windows5.5 幫助菜單(Help) .35) .37§6§7LINGO令行命令37綜合舉例
3、411該文檔來自:LINGO簡明-數(shù)學模型培訓(Security Matrix)§1LINGO 快速入門當你在 windows 下開始運行 LINGO 系統(tǒng)時,會得到類似下面的一個窗口:外層是主框架窗口,包含了所有菜單命令和工具條,其它所有的窗口將被包含在主窗口之下。在主窗口內的標題為 LINGO M LINGO1 的窗口是 LINGO 的默認模型窗口,建立的模型都都要在該窗口內編碼實現(xiàn)。下面舉兩個例子。例 1.1 如何在 LINGO 中求解如下的 LP 問題:min2x1 + 3x2s.t.x1 + x2 ³ 350³ 100x12x1 + x2 £
4、600x1 , x2 ³ 0在模型窗口中輸入如下代碼: min=2*x1+3*x2; x1+x2>=350;x1>=100; 2*x1+x2<=600;然后點擊工具條上的按鈕即可。例 1.2 使用 LINGO下表。計算 6 個發(fā)點 8 個收點的最小費用問題。產銷運價如2該文檔來自:單位銷地運價產地B1B2B3B4B5B6B7B8產量AA24953858255A35219743351A47673927143A52395726541A65522814352LINGO簡明-數(shù)學模型培訓(SecurityMatrix)使用 LINGO,編制程序如下::m!6 發(fā)點 8 收點
5、sets:問題;waouses/wh1.wh6/: capacity;vendors/v1.v8/: demand;links(wa endsets!目標函數(shù);ouses,vendors): cost, volume;min=sum(links: cost*volume);!需求約束; for(vendors(J):sum(waouses(I): volume(I,J)=demand(J);!產量約束;for(waouses(I):sum(vendors(J): volume(I,J)<=capacity(I);!這里是數(shù)據(jù); data:capacity=60 55 51 43 41 5
6、2;demand=35 3722 3241 32 43 38;52cost=6452926573482598221764153;25enddata end35925278然后點擊工具條上的按鈕即可。為了能夠使用 LINGO 的強大功能,接著第二節(jié)的學習吧。§2LINGO 中的集對實際問題建模的時候,總會遇到一群或多群相的對象,比如工廠、消費者群體、交通工具和雇工等等。LINGO把這些相的對象聚集(sets)。一旦把對象聚合成集,就可以利用集來最大限度的發(fā)揮 LINGO 建模語言的優(yōu)勢?,F(xiàn)在深入如何創(chuàng)建集,并用數(shù)據(jù)初始化集的屬性。節(jié)后,你對基于建模技術的集如何引入模型會有一個基本的理解
7、。2.1 為什么使用集集是 LINGO 建模語言的基礎,是程序設計最強的基本構件。借助于集,能夠用一個單一的、長的、簡明的復合公式表示一系列相似的約束,從而可以快速方便地表達規(guī)模較大的模型。3該文檔來自:銷量3537223241324338LINGO簡明-數(shù)學模型培訓(Security Matrix)2.2 什么是集集是一群相的對象,這些對象也稱為集的成員。一個集可能是一系列、卡車或雇員。每個集成員可能有一個或多個與之有關聯(lián)的特征,我們把這些特征稱為屬性。屬性值可以預先給定,也可以是未知的,有待于 LINGO 求解。例如,集中的每個可以有一個價格屬性;卡車集中的每輛卡車可以有一個牽引力屬性;雇
8、員集中的每位雇員可以有一個薪水屬性,也可以有一個生日屬性等等。LINGO 有兩種類型的集:原始集(primitive set)和派生集(derived set)。一個原始集是由一些最基本的對象組成的。一個派生集是用一個或多個其它集來定義的,也就是說,它的成員來自于其它已集。的2.3 模型的集部分集部分是LINGO 模型的一個可選部分。在 LINGO 模型中使用集之前,必須在集部分事先定義。集部分以關鍵字“sets:”開始,以“endsets”結束。一個模型可以沒有集部分,或有一個簡單的集部分,或有多個集部分。一個集部分可以放置于模型的任何地方,但是一個集及其屬性在模型約束中被之前必須定義了它們
9、。2.3.1 定義原始集為了定義一個原始集,必須詳細:·集的名字·可選,集的成員·可選,集成員的屬性定義一個原始集,用下面的語法:setname/member_list/:attribute_list;注意:用“”表示該部分內容可選。下同,不再贅述。Setname 是你選擇的來標記集的名字,最好具有較強的可讀性。集名字必須嚴格符合標準命名規(guī)則:以拉丁字母或下劃線(_)為首字符,其后由拉丁字母(AZ)、下劃線、阿拉伯數(shù)字(0,1,9)組成的總長度不超過 32 個字符的字符串,且不區(qū)分大小寫。注意:該命名規(guī)則同樣適用于集成員名和屬性名等名。Member_list 是集
10、成員列表。如果集成員放在集定義中,那么對它們可采取顯式羅列和隱式羅列兩種方式。如果集成員不放在集定義中,那么可以在隨后的數(shù)據(jù)部分定義它們。 當顯式羅列成員時,必須為每個成員輸入一個不同的名字,中間用空格或逗號擱開, 混合使用。例 2.1 可以定義一個名為屬性有 sex 和 age:sets:s 的原始集,它具有成員 John、Jill、Rose 和Mike,s/John Jill, Rose Mike/: sex, age;endsets 當隱式羅列成員時,不必羅列出每個集成員??刹捎萌缦抡Z法: setname/member1.memberN/: attribute_list;這里的 memb
11、er1 是集的第一個成員名,memberN 是集的最末一個成員名。LINGO 將自動產生中間的所有成員名。LINGO 也接受一些特定的首成員名和末成員名,用于創(chuàng)建一些特殊的集。列表如下:4該文檔來自:隱式成員列表格式示例所產生集成員LINGO簡明-數(shù)學模型培訓(SecurityMatrix) 集成員不放在集定義中,而在隨后的數(shù)據(jù)部分來定義。例 2.2!集部分; sets:s:sex,age;endsets!數(shù)據(jù)部分; data:s,sex,age= JohnJill Rose Mike100116141713;enddata注意:開頭用感嘆號(!),末尾用分號(;)表示注釋,可跨多行。在集部分
12、只定義了一個集s,并未指定成員。在數(shù)據(jù)部分羅列了集成員 John、Jill、Rose 和 Mike,并對屬性 sex 和 age 分別給出了值。集成員無論用何種字符標記,它的索引都是從 1 開始連續(xù)計數(shù)。在 attribute_ list 可以指定一個或多個集成員的屬性,屬性之間必須用逗號隔開??梢园鸭⒓蓡T和集屬性同 C 語言中的結構體作個類比。如下圖:集集成員集屬性結構體結構體的域結構體實例LINGO 內置的建模語言是一種描述性語言,用它可以描述現(xiàn)實世界中的一些問題,然后再借助于 LINGO 求解器求解。因此,集屬性的值一旦在模型中被確定,就不可能再更改。在LINGO 中,只有在初始部分
13、中給出的集屬性值在以后的求可更改。這與前面并不,初始部分是 LINGO 求解器的需要,并不是描述問題所必須的。2.3.2 定義派生集為了定義一個派生集,必須詳細:·集的名字·父集的名字·可選,集成員·可選,集成員的屬性可用下面的語法定義一個派生集: setname(parent_set_list)/member_list/:attribute_list;setname 是集的名字。parent_set_list 是已定義的集的列表,多個時必須用逗號隔開。如果沒有指定成員列表,那么 LINGO 會自動創(chuàng)建父集成員的所有組合作為派生集的成員。派生集的父集既可
14、以是原始集,也可以是其它的派生集。例 2.3sets:product/A B/; machine/M N/;5該文檔來自: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,Jan2002LINGO簡明-數(shù)學模型培訓(Security Matrix)week/1.2/;
15、allowed(product,machine,week):x;endsetsLINGO 生成了三個父集的所有組合共八組作為 allowed 集的成員。列表如下:編號12345678成員(A,M,1)2345678(A,M,2)(A,N,1)(A,N,2)(B,M,1)(B,M,2)(B,N,1)(B,N,2),這樣的派生集成為稠密集。成員列表被忽略時,派生集成員由父集成員所有的組合如果限制派生集的成員,使它成為父集成員所有組合的集合的一個子集,這樣的派生集成為稀。同原始集一樣,派生集成員的也可以放在數(shù)據(jù)部分。一個派生集的成員列表有兩種方式生成:顯式羅列;設置成員資格過濾器。當采用,必須顯式羅
16、列出所有要包含在派生集中的成員,并且羅列的每個成員必須屬于稠密集。使用前面的例子, 顯式羅列派生集的成員:allowed(product,machine,week)/A M 1,A N 2,B N 1/;如果需要生成一個大的、稀疏的集,那么顯式羅列就很討厭。幸運地是許多稀的成員都滿足一些條件以和非成員相區(qū)分。我們可以把這些邏輯條件看作過濾器,在 LINGO 生成派生集的成員時把使邏輯條件為例 2.4sets:成員從稠密集中過濾掉。!學生集:屬性 sex,1 表示男性,0 表示女性;屬性 age. ;s/John,Jill,Rose,Mike/:sex,age;!男學生和女學生的集:友好程度屬性
17、 friend,0,1之間的數(shù)。 ; s)|sex(&1) #eq# 1 #and# sex(&2) #eq# 0: friend;linkmf(s,!男學生和女學生的友好程度大于 0.5 的集; linkmf2(linkmf) | friend(&1,&2) #ge# 0.5 : x;endsets data:sex,age = 1;friend = 0.3 0.5 0.6; enddata用豎線(|)來標記一個成員資格過濾器的開始。#eq#是邏輯運算符,用來是否“相等”,可參考§4. &1 可看作派生集的第 1 個原始父集的索引,它取遍該原
18、始父集的所有成員;&2 可看作派生集的第 2 個原始父集的索引,它取遍該原始父集的所有成員;&3,&4,以此類推。注意如果派生集 B 的父集是另外的派生集 A,那么上面所說的原始父集是集 A 向前回溯到最終的原始集,其順序保持不變,并且派生集 A 的過濾器對派生集 B 仍然有效。因此,派生集的索引個數(shù)是最終原始父集的個數(shù),索引的取值是從原始父集到當前派生集所作限制的總和??偟膩碚f,LINGO 可識別的集只有兩種類型:原始集和派生集。在一個模型中,原始集是基本的對象,不能再被拆分成更小的組分。原始集可以由顯式羅列和隱式羅列兩種方式來定義。當用顯式羅列,需在集成員列表中逐個
19、輸入每個成員。當用隱式羅列產生。,只需在集成員列表中輸入首成員和末成員,而中間的成員由 LINGO另一方面,派生集是由其它的集來創(chuàng)建。這些集被稱為該派生集的父集(原始集或其它6該文檔來自:LINGO簡明-數(shù)學模型培訓(Security Matrix)的派生集)。一個派生集既可以是稀疏的,也可以是稠密的。稠密集包含了父集成員的所有組合(有稱為父集的笛卡爾乘積)。稀僅包含了父集的笛卡爾乘積的一個子集,可通過顯式羅列和成員資格過濾器這兩種方式來定義。顯式羅列就是逐個羅列稀的成員。成員資格過濾器通過使用稀成員必須滿足的邏輯條件從稠密集成員中過濾出稀的成員。不同集類型的見下圖。派生集原始集稀稠密集顯式羅
20、列過濾器LINGO 集類型§3模型的數(shù)據(jù)部分和初始部分在處理模型的數(shù)據(jù)時,需要為集指派一些成員并且在 LINGO 求解模型之前為集的某些屬性指。為此,LINGO 為用戶提供了兩個可選部分:輸入集成員和數(shù)據(jù)的數(shù)據(jù)部分(DataSection)和為決策變量設置初始值的初始部分(Init Section)。3.1 模型的數(shù)據(jù)部分3.1.1 數(shù)據(jù)部分入門數(shù)據(jù)部分提供了模型相對靜止部分和數(shù)據(jù)分離的可能性。顯然,這對模型的維護和維數(shù)的縮放非常便利。數(shù)據(jù)部分以關鍵字“data:”開始,以關鍵字“enddata”結束。在這里,可以指定集成員、集的屬性。其語法如下:object_list = valu
21、e_list;對象列(object_list)包含要指的屬性名、要設置集成員的集名,用逗號或空格隔開。一個對象列中至多有一個集名,而屬性名可以有任意多。如果對象列中有多個屬性名, 那么它們的類型必須一致。如果對象列中有一個集名,那么對象列中所有的屬性的類型就是這個集。7該文檔來自:LINGO簡明-數(shù)學模型培訓(Security Matrix)數(shù)值列(value_list)包含要分配給對象列中的對象的值,用逗號或空格隔開。注意屬性值的個數(shù)必須等于集成員的個數(shù)??聪旅娴睦?。例 3.1sets:set1/A,B,C/: X,Y; endsetsdata:X=1,2,3;Y=4,5,6;enddat
22、a在集 set1 中定義了兩個屬性 X 和Y。X 的三個值是 1、2 和 3,Y 的三個值是 4、5 和 6。也可采用如下例子中的復合數(shù)據(jù)例 3.2sets:set1/A,B,C/: X,Y; endsetsdata:(data statement)實現(xiàn)同樣的功能。X,Y=123enddata456;看到這個例子,可能會認為 X 被指定了 1、4 和 2 三個值,因為它們是數(shù)值列中前三個,而正確的是 1、2 和 3。假設對象列有 n 個對象,LINGO 在為對象指時,首先在 n個對象的第 1 個索引處依次分配數(shù)值列中的前 n 個對象,然后在 n 個對象的第 2 個索引處依次分配數(shù)值列中緊接著的
23、 n 個對象,以此類推。模型的所有數(shù)據(jù)屬性值和集成員被單獨放在數(shù)據(jù)部分,這可能是最規(guī)范的數(shù)據(jù)輸入方式。3.1.2 參數(shù)在數(shù)據(jù)部分也可以指定一些標量變量(scalar variables)。當一個標量變量在數(shù)據(jù)部分確定時,稱之為參數(shù)??匆焕僭O模型中用利率 8.5%作為一個參數(shù),就可以象下面一樣輸入一個利率作為參數(shù)。例 3.3data:interest_rate = .085; enddata也可以同時指定多個參數(shù)。例 3.4data:interest_rate,inflation_rate = .085 .03; enddata3.1.3 實時數(shù)據(jù)處理在某些情況,對于模型中的某些數(shù)據(jù)并不是。
24、譬如模型中有一個通貨膨脹率的參數(shù),我們想在 2%至 6%范圍內,對不同的值求解模型,來觀察模型的結果對通貨膨脹的依賴有多么敏感。我們把這種情況稱為實時數(shù)據(jù)處理(what if analysis)。LINGO 有一個特征可方便地做到這件事。8該文檔來自:LINGO簡明-數(shù)學模型培訓(Security Matrix)在本該放數(shù)的地方輸入一個問號(?)。例 3.5data:interest_rate,inflation_rate = .085 ?; enddata每一次求解模型時,LINGO 都會提示為參數(shù) inflation_rate 輸入一個值。在 WINDOWS 操作系統(tǒng)下,將會接收到一個類似
25、下面的框:直接輸入一個值再點擊 OK 按鈕,LINGO 就會把輸入的值指定給 inflation_rate,然后繼續(xù)求解模型。除了參數(shù)之外,也可以實時輸入集的屬性值,但不實時輸入集成員名。3.1.4 指定屬性為一個值可以在數(shù)據(jù)子。例 3.6sets:的右邊輸入一個值來把所有的成員的該屬性指定為一個值。看下面的例days /MO,TU,WE,TH,FR,SA,SU/:needs; endsetsdata:needs = 20; enddataLINGO 將用 20 指定 days 集的所有成員的 needs 屬性。對于多個屬性的情形,見下例。例 3.7sets:days /MO,TU,WE,TH
26、,FR,SA,SU/:needs,cost; endsetsdata:needs cost = 20 100; enddata3.1.5 數(shù)據(jù)部分的未知數(shù)值有時只想為一個集的部分成員的某個屬性指,而讓其余成員的該屬性保持未知,以便讓 LINGO 去求出它們的最優(yōu)值。在數(shù)據(jù)中輸入兩個相連的逗號表示該位置對應的集成員的屬性值未知。兩個逗號間可以有空格。例 3.8sets:years/1.5/: capacity;9該文檔來自:LINGO簡明-數(shù)學模型培訓(Security Matrix)endsets data:capacity = ,34,20,; enddata屬性 capacity 的第 2
27、 個和第 3 個值分別為 34 和 20,其余的未知。3.2 模型的初始部分初始部分是 LINGO 提供的另一個可選部分。在初始部分中,可以輸入初始(initialization statement),和數(shù)據(jù)部分中的數(shù)據(jù)相同。對實際問題的建模時,初始部分并不起到描述模型的作用,在初始部分輸入的值僅被 LINGO 求解器當作初始點來用,并且僅僅對非線性模型有用。和數(shù)據(jù)部分指定變量的值不同,LINGO 求解器可以始部分初始化的變量的值。改變初一個初始部分以“init:”開始,以“endinit”結束。初始部分的初始規(guī)則和數(shù)據(jù)部分的數(shù)據(jù)規(guī)則相同。也就是說,我們可以在的左邊同時初始化多個集屬性,可以把
28、集屬性初始化為一個值,可以用問號實現(xiàn)實時數(shù)據(jù)處理,還可以用逗號指定未知數(shù)值。例 3.9init:X, Y = 0, .1;endinit Y=log(X); X2+Y2<=1;初始點會減少模型的求解時間。在這一節(jié)中,我們僅帶大家接觸了一些基本的數(shù)據(jù)輸入和初始化概念,不過現(xiàn)在你應該可以輕松的為的模型加入原始數(shù)據(jù)和初始部分啦。§4LINGO 函數(shù)有了前幾節(jié)的基礎知識,再加上本節(jié)的內容,你就能夠借助于 LINGO 建立并求解復雜的優(yōu)化模型了。LINGO 有 9 種類型的函數(shù):12345678 出9基本運算符:算術運算符、邏輯運算符和運算符數(shù)學函數(shù):三角函數(shù)和常規(guī)的數(shù)學函數(shù)金融函數(shù):L
29、INGO 提供的兩種金融函數(shù)概率函數(shù):LINGO 提供了大量概率相關的函數(shù)變量界定函數(shù):這類函數(shù)用來定義變量的取值范圍集操作函數(shù):這類函數(shù)為對集的操作提供幫助集循環(huán)函數(shù):遍歷集的元素,執(zhí)行一定的操作的函數(shù)數(shù)據(jù)輸入輸出函數(shù):這類函數(shù)模型和外部數(shù)據(jù)源相,進行數(shù)據(jù)的輸入輸輔助函數(shù):各種雜類函數(shù)4.1 基本運算符這些運算符是非?;镜?,甚至可以不認為它們是一類函數(shù)。事實上,在 LINGO 中它們是非常重要的。10該文檔來自:LINGO簡明-數(shù)學模型培訓(Security Matrix)4.1.1 算術運算符算術運算符是數(shù)值進行操作的。LINGO 提供了 5 種二元運算符:乘方乘 除 加 減LINGO
30、唯一的一元算術運算符是取反函數(shù)“”。這些運算符的優(yōu)先級由高到底為:高(取反)低運算符的運算次序為從左到右按優(yōu)先級高低來執(zhí)行。運算的次序可以用圓括號“()”來改變。例 4.1 算術運算符示例。253,(24)5 等等。4.1.2 邏輯運算符在 LINGO 中,邏輯運算符主要用于集循環(huán)函數(shù)的條件表中,來在函數(shù)中哪些集成員被包含,哪些被排斥。在創(chuàng)建稀LINGO 具有種邏輯運算符:在成員資格過濾器中。#not# #eq# #ne# #gt# #ge# #lt# #le# #and# #or#該操作數(shù)的邏輯值,not是一個一元運算符若兩個運算數(shù)相等,則為 true;否則為 flase若兩個運算符不相等,
31、則為 true;否則為 flase若左邊的運算符嚴格大于右邊的運算符,則為 true;否則為 flase 若左邊的運算符大于或等于右邊的運算符,則為 true;否則為 flase 若左邊的運算符嚴格小于右邊的運算符,則為true;否則為 flase 若左邊的運算符小于或等于右邊的運算符,則為 true;否則為 flase 僅當兩個參數(shù)都為 true 時,結果為 true;否則為 flase僅當兩個參數(shù)都為 false 時,結果為 false;否則為 true這些運算符的優(yōu)先級由高到低為: 高 #not#eq# #ne# #gt# #ge# #lt# #le# 低 #and# #or#例 4.2
32、 邏輯運算符示例2 #gt# 3 #and# 4 #gt# 2,其結果為假(0)。4.1.3運算符在 LINGO 中,運算符主要是被用在模型中,來指定一個表的左邊是否等于、小于等于、或者大于等于右邊,形成模型的一個約束條件運算符與邏輯運算符#eq#、#le#、#ge#截然不同,前者是模型中該運算符所指定的為真描述,而后者僅僅一個該是否被滿足:滿足為真,不滿足為假。LINGO 有三種運算符:“=”、“<=”和“>=”。LINGO 中還能用“<”表示小于等11該文檔來自:LINGO簡明-數(shù)學模型培訓(Security Matrix)于,“>”表示大于等于。LINGO 并不支
33、持嚴格小于和嚴格大于運算符。,如果需要嚴格小于和嚴格大于,比如讓 A 嚴格小于 B:A<B,那么可以把它變成如下的小于等于表: A+<=B,這里是一個小的正數(shù),它的值依賴于模型中 A 小于 B 多少才算不等。下面給出以上三類操作符的優(yōu)先級:高 #not#* #eq# #and#低 <= =(取反)#ne# #gt# #ge# #lt# #le# #or#>=4.2 數(shù)學函數(shù)LINGO 提供了大量的標準數(shù)學函數(shù):abs(x) sin(x) cos(x) tan(x) exp(x) log(x) lgm(x) sign(x) floor(x)返回 x 的絕對值返回 x 的正
34、弦值,x 采用弧度制返回 x 的余弦值返回 x 的正切值返回e 的 x 次方返回 x 的自然對數(shù)返回 x 的 gamma 函數(shù)的自然對數(shù)如果 x<0 返回-1;否則,返回 1返回 x 的整數(shù)部分。當 x>=0 時,返回不超過 x 的最大整數(shù);當x<0 時,返回不低于 x 的最大整數(shù)。smax(x1,x2,xn) 返回 x1,x2,xn 中的最大值smin(x1,x2,xn) 返回 x1,x2,xn 中的最小值例 4.3 給定一個直角三角形,求包含該三角形的最小正方形。解:。CE = a sin x,AD = b cos x,DE = a cos x + b sin x,求最小
35、的正方形就相當于求如下的最優(yōu)化問題:CEmin maxCE, AD, DE0£ x£ p2LINGO 代碼如下:m sets:Bobject/1.3/: endsetsdata:f;DAa, b = enddata3, 4; !兩個直角邊長,修改很方便;f(1)f(2)f(3)=a b a*sin(x);cos(x);cos(x) + b * sin(x);min = smax(f(1),f(2),f(3); bnd(0,x,1.57);end12該文檔來自:axbLINGO簡明-數(shù)學模型培訓(Security Matrix)在上面的代碼中用到了函數(shù)bnd,見 4.5 節(jié)。
36、4.3 金融函數(shù)目前 LINGO 提供了兩個金融函數(shù)。1fpa(I,n)返回如下情形的凈現(xiàn)值:時段利率為 I,連續(xù) n 個時段支付,每個時段支付費用。若每個時段支付 x 為的費用,則凈現(xiàn)值可用 x 乘以fpa(I,n)算得。fpa 的計算公式 1= 1 - (1 + I )-nnåk=1 (1 + I )kI在該時期。凈現(xiàn)值就是在一定時期內為了獲得一定支付的實際費用。例 4.4 貸款買房問題 貸款金額 50000 元,貸款年利率 5.31%,采取分期付款方式(每年年末還固定金額,直至還清)。問擬貸款 10 年,每年需償還多少元?LINGO 代碼如下:50000 = x * fpa(.
37、0531,10);是 x=6573.069 元。2fpl(I,n)返回如下情形的凈現(xiàn)值: 計算公式為時段利率為 I,第 n 個時段支付費用。fpl(I,n)的(1 + I )-n 。細心的讀者可以發(fā)現(xiàn)這兩個函數(shù)間的:n fpa(I , n) = å fpl(I , k )k =1。4.4 概率函數(shù)1pbn(p,n,x)二項分布的累積分布函數(shù)。當 n 和(或)x 不是整數(shù)2pcx(n,x)度為n的2分布的累積分布函數(shù)。3peb(a,x)線性插值法進行計算。當?shù)竭_負荷為 a,服務系統(tǒng)有 x 個服務器且無窮排隊時的 Erlang 繁忙概率。4pel(a,x)當?shù)竭_負荷為 a,服務系統(tǒng)有 x
38、 個服務器且不5pfd(n,d,x)度為 n 和 d 的 F 分布的累積分布函數(shù)。6pfs(a,x,c)排隊時的 Erlang 繁忙概率。當負荷上限為 a,顧客數(shù)為 c,平行服務器數(shù)量為 x 時,有限源的 Poisson 服務系統(tǒng)的等待或返修顧客數(shù)的期望值。a 是顧客數(shù)乘以平均服務時間,再除以平均返修時間。當 c 和(或)x 不是整數(shù)時,采用線性插值進行計算。7phg(pop,g,n,x)超幾何(Hypergeometric)分布的累積分布函數(shù)。pop 表示總數(shù),g 是正品數(shù)。從所有中任意取出 n(npop)件。pop,g,n 和 x 都可以是非整數(shù),這時采用線性插值進行計算。8ppl(a,x
39、)13該文檔來自:LINGO簡明-數(shù)學模型培訓(Security Matrix)Poisson 分布的線性損失函數(shù),即返回 max(0,z-x)的期望值,其中隨為 a 的 Poisson 分布。9pps(a,x)量 z 服從均值均值為 a 的Poisson 分布的累積分布函數(shù)。當 x 不是整數(shù)時,采用線性插值進行計算。10psl(x)正態(tài)線性損失函數(shù),即返回 max(0,z-x)的期望值,其中隨量 z 服從標準正態(tài)分布。11psn(x)標準正態(tài)分布的累積分布函數(shù)。12ptd(n,x)度為 n 的 t 分布的累積分布函數(shù)。13qrand(seed)產生服從(0,1)區(qū)間的擬隨機數(shù)。qrand 只
40、在模型的數(shù)據(jù)部分使用,它將用擬隨機數(shù)填滿集屬性。通常,一個 m×n 的二維表,m 表示運行實驗的次數(shù),n 表示每次實驗所需的隨機數(shù)的個數(shù)。在行內,隨機數(shù)是機數(shù)是用“分層取樣”的產生的。例 4.5分布的;在行間,隨機數(shù)是非常均勻的。這些隨m data:M=4; N=2; seed=1234567;enddata sets:rows/1.M/; cols/1.N/; table(rows,cols): x;endsets data:X=qrand(seed); enddataend如果沒有為函數(shù)指定14rand(seed),那么 LINGO 將用系統(tǒng)時間構造。返回 0 和 1 間的偽隨機
41、數(shù),依賴于指定的意如果 seed 不變,那么產生的隨機數(shù)也不變。典型用法是 U(I+1)=rand(U(I)。注例 4.6 利用rand 產生 15 個標準正態(tài)分布的隨機數(shù)和:度為 2 的 t 分布的隨機數(shù)。m!產生一列正態(tài)分布和 t 分布的隨機數(shù); sets:series/1.15/: u, znorm, zt; endsets!第一個均勻分布隨機數(shù)是任意的; u( 1) = rand( .1234);!產生其余的均勻分布的隨機數(shù);for(series( I)| I #GT# u( I) = rand( u( I -);1:1)for( series( I):!正態(tài)分布隨機數(shù); psn( z
42、norm( I) = u(I);14該文檔來自:LINGO簡明-數(shù)學模型培訓(Security Matrix)!和度為 2 的 t 分布隨機數(shù); ptd( 2, zt( I) = u( I);!ZNORM 和 ZT 可以是負數(shù);( znorm( I); );end( zt( I);4.5 變量界定函數(shù)變量界定函數(shù)實現(xiàn)對變量取值范圍的附加限制,共 4 種:bin(x) bnd(L,x,U)限制 x 為 0 或 1 限制 LxU取消對變量 x 的默認下界為 0 的限制,即 x 可以取任意實數(shù)限制 x 為整數(shù)(x)gin(x)在默認情況下,LINGO 規(guī)定變量是非負的,也就是說下界為 0,上界為+。
43、取消了默認的下界為 0 的限制,使變量也可以取負值。bnd 用于設定一個變量的上下界,它也可以取消默認下界為 0 的約束。4.6 集操作函數(shù)LINGO 提供了幾個函數(shù)幫助處理集。1in(set_name,primitive_index_1 ,primitive_index_2,) 如果元素在指定集中,返回 1;否則返回 0。例 4.7 全集為 I,B 是 I 的一個子集,C 是 B 的補集。sets:I/x1.x4/;B(I)/x2/;C(I)|#not#in(B,&1):; endsets2index(set_name, primitive_set_element)該函數(shù)返回在集 s
44、et_name 中原始集成員 primitive_set_element 的索引。如果 set_name 被忽略,那么 LINGO 將返回與 primitive_set_element 匹配的第一個原始集成員的索引。如果找不到,則產生一個錯誤。例 4.8 如何確定集成員(B,Y)屬于派生集 S3。sets:S1/A B C/;S2/X Y Z/;S3(S1,S2)/A X, A Z, B Y, C X/;endsetsX=in(S3,index(S1,B),index(S2,Y);看下面的例子,表明有時為index 指定集是必要的。例 4.9sets:girls/debble,sue,/;bo
45、ys/bob,joe,sue,fred/; endsetsI1=index(sue); I2=index(boys,sue);I1 的值是 2,I2 的值是 3。我們建議在使用index 函數(shù)時最好指定集。15該文檔來自:LINGO簡明-數(shù)學模型培訓(Security Matrix)3wrap(index,limit)該函數(shù)返回 j=index-k*limit,其中 k 是一個整數(shù),取適當值保證 j 落在區(qū)間1,limit內。該函數(shù)相當于 index 模 limit 再加 1。該函數(shù)在循環(huán)、多階段計劃編制中特別有用。4size(set_name)該函數(shù)返回集 set_name 的成員個數(shù)。在模
46、型中明確給出集大小時最好使用該函數(shù)。它的使用使模型更加數(shù)據(jù)中立,集大小改變更易維護。4.7 集循環(huán)函數(shù)集循環(huán)函數(shù)遍歷整個集進行操作。其語法為function(setname(set_index_list)|conditional_qualifier:expression_list);function 相應于下面羅列的四個集循環(huán)函數(shù)之一;setname 是要遍歷的集;set_ index_list 是集索引列表;conditional_qualifier 是用來限制集循環(huán)函數(shù)的范圍,當集循環(huán)函數(shù)遍歷集的每個成員時,LINGO 都要對 conditional_qualifier 進行評價,若結果為
47、真, 則對該成員執(zhí)行function 操作,否則跳過,繼續(xù)執(zhí)行下一次循環(huán)。expression_list 是被應用到每個集成員的表列表,當用的是for 函數(shù)時,expression_list 可以包含多個表,其間用逗號隔開。這些表將被作為約束加到模型中。當使用其余的三個集循環(huán)函數(shù)時, expression_list 只能有一個表 。如果省略 set_index_list,那么在 expression_list 中1for的所有屬性的類型都是 setname 集。該函數(shù)用來產生對集成員的約束。基于建模語言的標量需要顯式輸入每個約束,不過for 函數(shù)只輸入一個約束,然后 LINGO 自動產生每個集
48、成員的約束。例 4.10 產生序列1,4,9,16,25m sets:number/1.5/:x; endsetsfor(number(I): x(I)=I2); end2sum該函數(shù)返回遍歷指定的集成員的一個表的和。例 4.11 求向量5,1,3,4,6,10前 5 個數(shù)的和。:mdata:N=6;enddata sets:number/1.N/:x; endsetsdata:x = 5 1 3 4 6 10;enddatas=sum(number(I) | I #le# 5: x); end3min 和max返回指定的集成員的一個表的最小值或最大值。例 4.12 求向量5,1,3,4,6,
49、10前 5 個數(shù)的最小值,后 3 個數(shù)的最大值。:mdata:N=6;16該文檔來自:LINGO簡明-數(shù)學模型培訓(Security Matrix)enddata sets:number/1.N/:x; endsetsdata:x = 5 1 3 4 6 10;enddata minv=min(number(I) |I #le# 5: x);maxv=max(number(I) | I #ge# N-2: x); end下面看一個稍微復雜一點兒的例子。例 4.13 職員時序安排模型 一項工作一周 7 天都需要有人(比如護士工作),每天(周一至周日)所需的最少職員數(shù)為 20、16、13、16、1
50、9、14 和 12,并要求每個職員一周連續(xù)工作 5 天,試求每周所需最少職員數(shù),并給出安排。注意這里我們考慮后的情況。m sets:days/mon.sun/: required,start; endsetsdata:!每天所需的最少職員數(shù);required = 20 16 13 16 19 14 12; enddata!最小化每周所需職員數(shù); min=sum(days: start); for(days(J):sum(days(I) | I #le# 5: start(wrap(J+I+2,7) >= required(J);end計算的部分結果為Global optimal solu
51、tion found at Objective value:iteration:022.00000VariableValue 20.0000016.0000013.0000016.0000019.0000014.0000012.000008.0000002.0000000.0000006.0000003.0000003.0000000.000000Reduced Cost0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.33333330.0000000.0000000.0000000.000000REQUIRED( REQUIRED( REQUIRED( REQUIRED( REQUIRED( REQUIRED( REQUIRED(START( START( START( STA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024山東豆類的種植市場前景及投資研究報告
- 2025至2030年中國菱形提花布數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國砂仁油數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國尼龍拉鏈頭數(shù)據(jù)監(jiān)測研究報告
- 2025年庭院場地租賃合同(附帶園藝設計與管理條款)3篇
- 2025年度專業(yè)園藝設計施工合同3篇
- 2024年金融科技服務平臺委托合同
- 2025年度餐飲企業(yè)食品安全管理體系建設合同范本3篇
- 二零二五年度租賃鏟車附帶工程驗收合同3篇
- 二零二五版企業(yè)社會責任LOGO設計合同3篇
- 2025年工程合作協(xié)議書
- 2025年山東省東營市東營區(qū)融媒體中心招聘全媒體采編播專業(yè)技術人員10人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年宜賓人才限公司招聘高頻重點提升(共500題)附帶答案詳解
- KAT1-2023井下探放水技術規(guī)范
- 垃圾處理廠工程施工組織設計
- 天皰瘡患者護理
- 駕駛證學法減分(學法免分)題庫及答案200題完整版
- 2024年四川省瀘州市中考英語試題含解析
- 2025屆河南省九師聯(lián)盟商開大聯(lián)考高一數(shù)學第一學期期末學業(yè)質量監(jiān)測模擬試題含解析
- 撫養(yǎng)權起訴狀(31篇)
- 2024年“一崗雙責”制度(五篇)
評論
0/150
提交評論