lingo入門教程.ppt
《lingo入門教程.ppt》由會員分享,可在線閱讀,更多相關《lingo入門教程.ppt(55頁珍藏版)》請在裝配圖網(wǎng)上搜索。
LINGO軟件的基本使用方法,1 . LINGO入門,LINGO的界面,LINGO軟件的主窗口(用戶界面),所有其他窗口都在這個窗口之內(nèi)。,模型窗口(Model Window),用于輸入LINGO優(yōu)化模型(即LINGO程序)。,狀態(tài)行(最左邊顯示“Ready”,表示 “準備就緒”),當前時間,當前光標的位置,一個簡單的LINGO程序,例 直接用LINGO來解如下二次規(guī)劃問題:,,輸入窗口如下:,程序語句輸入的備注:,LINGO總是根據(jù)“MAX=”或“MIN=”尋找目標函數(shù),而除注釋語句和TITLE語句外的其他語句都是約束條件,因此語句的順序并不重要 。 限定變量取整數(shù)值的語句為“@GIN(X1)”和“@GIN(X2)”,不可以寫成“@GIN(2)”,否則LINGO將把這個模型看成沒有整數(shù)變量。 LINGO中函數(shù)一律需要以“@”開頭,其中整型變量函數(shù)(@BIN、@GIN)和上下界限定函數(shù)(@FREE、@SUB、@SLB),@BIN函數(shù)在0-1規(guī)劃中有廣泛應用@BND( L,X,U)表示L=X=U,輸出結(jié)果:,運行菜單命令“LINGO|Solve”,最優(yōu)整數(shù)解 X=(35,65),最大利潤=11077.5,一個簡單的LINGO程序,LINGO的基本用法的幾點注意事項,LINGO中不區(qū)分大小寫字母;變量和行名可以超過8個字符,但不能超過32個字符,且必須以字母開頭。 用LINGO解優(yōu)化模型時已假定所有變量非負(除非用限定變量取值范圍的函數(shù)@free或@sub或@slb另行說明)。 變量可以放在約束條件的右端(同時數(shù)字也可放在約束條件的左端)。但為了提高LINGO求解時的效率,應盡可能采用線性表達式定義目標和約束(如果可能的話)。 語句是組成LINGO模型的基本單位,每個語句都以分號結(jié)尾,編寫程序時應注意模型的可讀性。例如:一行只寫一個語句,按照語句之間的嵌套關系對語句安排適當?shù)目s進,增強層次感。 以感嘆號開始的是說明語句(說明語句也需要以分號結(jié)束))。,2 . 在LINGO中使用集合,基本集合與派生集合,例 建筑工地的位置(用平面坐標a, b表示,距離單位:公里)及水泥日用量d(噸)下表給出。有兩個臨時料場位于P (5,1), Q (2, 7),日儲量各有20噸。從A, B兩料場分別向各工地運送多少噸水泥,使總的噸公里數(shù)最小。兩個新的料場應建在何處,節(jié)省的噸公里數(shù)有多大?,建立模型,記工地的位置為 ,水泥日用量為 ;料場位置為 ,日儲量為 ;從料場 向工地 的運送量為 。,使用現(xiàn)有臨時料場時,決策變量只有 (非負),所以這是LP模型;當為新建料場選址時決策變量為 和 ,由于目標函數(shù) 對 是非線性的,所以在新建料場時是NLP模型。先解NLP模型,而把現(xiàn)有臨時料場的位置作為初始解告訴LINGO。,本例中集合的概念,利用集合的概念,可以定義需求點DEMAND和供應點SUPPLY兩個集合,分別有6個和2個元素(下標)。但決策變量(運送量) 與集合DEMAND和集合SUPPLY都有關系的。該如何定義這樣的屬性?,集合的屬性相當于以集合的元素為下標的數(shù)組。這里的 相當于二維數(shù)組。它的兩個下標分別來自集合DEMAND和SUPPLY,因此可以定義一個由二元對組成的新的集合,然后將 定義成這個新集合的屬性。,輸入程序,定義了三個集合,其中LINK在前兩個集合DEMAND 和SUPPLY的基礎上定義,表示集合LINK中的元素就是集合DEMAND 和SUPPLY的元素組合成的有序二元組, 從數(shù)學上看LINK是DEMAND 和SUPPLY的笛卡兒積,也就是說 LINK={(S,T)|SDEMAND,TSUPPLY} 因此,其屬性C也就是一個6*2的矩陣(或者說是含有12個元素的二維數(shù)組)。,LINGO建模語言也稱為矩陣生成器(MATRIX GENERATOR)。類似DEMAND 和SUPPLY直接把元素列舉出來的集合,稱為基本集合(primary set),而把LINK這種基于其它集合而派生出來的二維或多維集合稱為派生集合(derived set)。由于是DEMAND 和SUPPLY生成了派生集合LINK,所以DEMAND 和SUPPLY 稱為LINK的父集合。,輸入程序,初始段,INGO對數(shù)據(jù)是按列賦值的 語句的實際賦值順序是X=(5,2), Y=(1,7), 而不是X=(5,1), Y=(2,7) 等價寫法: “X=5,2; Y=1,7;”,同理,數(shù)據(jù)段中對常數(shù)數(shù)組A,B的賦值語句也可以寫成 A, B=1.25 1.25 8.75 0.75 0.5 4.75 5.75 5 3 6.5 7.25 7.75;,輸入程序,解答:運行菜單命令“LINGO|Solve”,局部最優(yōu)解X(1)=7.249997, X(2)=5.695940,Y(1)=7.749998, Y(2)=4.928524,C(略), 最小運量=89.8835(噸公里)。,問題:最小運量89.8835是不是全局最優(yōu),是用“LINGO|Options”菜單命令打開選項對話框,在“Global Solver”選項卡上選擇“Use Global Solver”, 激活全局最優(yōu)求解程序。,問題:最小運量89.8835是不是全局最優(yōu),此時目標函數(shù)值的下界(Obj Bound=85.2638)與目前得到的最好的可行解的目標函數(shù)值(Best Obj=85.2661)相差已經(jīng)非常小,可以認為已經(jīng)得到了全局最優(yōu)解。,計算結(jié)果,工地與料場示意圖 : “*”表示料場,“+”表示工地,可以認為是模型的最后結(jié)果,附注:如果要把料廠P(5, 1), Q (2, 7)的位置看成是已知并且固定的,這時是LP模型。只需要把初始段的“X Y =5,1,2,7;”語句移到數(shù)據(jù)段就可以了。此時,運行結(jié)果告訴我們得到全局最優(yōu)解(變量C的取值這里略去),最小運量136.2275(噸公里)。,稠密集合與稀疏集合,包含了兩個基本集合構成的所有二元有序?qū)Φ呐缮戏Q為稠密集合(簡稱稠集)。有時候,在實際問題中,一些屬性(數(shù)組) 只在笛卡兒積的一個真子集合上定義,這種派生集合稱為稀疏集合(簡稱疏集)。,例 (最短路問題) 在縱橫交錯的公路網(wǎng)中,貨車司機希望找到一條從一個城市到另一個城市的最短路. 下圖表示的是公路網(wǎng), 節(jié)點表示貨車可以停靠的城市,弧上的權表示兩個城市之間的距離(百公里). 那么,貨車從城市S出發(fā)到達城市T,如何選擇行駛路線,使所經(jīng)過的路程最短?,分析,假設從S到T的最優(yōu)行駛路線 P 經(jīng)過城市C1, 則P中從S到C1的子路也一定是從S到C1的最優(yōu)行駛路線; 假設 P 經(jīng)過城市C2, 則P中從S到C2的子路也一定是從S到C2的最優(yōu)行駛路線. 因此, 為得到從S到T的最優(yōu)行駛路線, 只需要先求出從S到Ck(k=1,2)的最優(yōu)行駛路線, 就可以方便地得到從S到T的最優(yōu)行駛路線. 同樣,為了求出從S到Ck(k=1,2)的最優(yōu)行駛路線, 只需要先求出從S到Bj(j=1,2)的最優(yōu)行駛路線; 為了求出從S到Bj(j=1,2)的最優(yōu)行駛路線, 只需要先求出從S到Ai (i=1,2,3)的最優(yōu)行駛路線. 而S到Ai(i=1,2,3)的最優(yōu)行駛路線是很容易得到的(實際上, 此例中S到Ai(i=1,2,3)只有唯一的道路),分析,此例中可把從S到T的行駛過程分成4個階段,即 S→Ai (i=1,2或3), Ai → Bj(j=1或2), Bj → Ck(k=1或2), Ck → T. 記d(Y,X)為城市Y與城市X之間的直接距離(若這兩個城市之間沒有道路直接相連,則可以認為直接距離為∞),用L(X)表示城市S到城市X的最優(yōu)行駛路線的路長:,,本例的LINGO求解,“CITIES”(城市):一個基本集合(元素通過枚舉給出),L:CITIES對應的屬性變量(我們要求的最短路長),“ROADS”(道路):由CITIES導出的一個派生集合(請?zhí)貏e注意其用法),由于只有一部分城市之間有道路相連,所以不應該把它定義成稠密集合,將其元素通過枚舉給出,這就是一個稀疏集合。,D:稀疏集合ROADS對應的屬性變量(給定的距離),本例的計算,,所以, 從S到T的最優(yōu)行駛路線的路長為20. 進一步分析以上求解過程, 可以得到從S到T的最優(yōu)行駛路線為 S→ A3→ B2→ C1 → T.,這種計算方法在數(shù)學上稱為動態(tài)規(guī)劃(Dynamic Programming),本例的LINGO求解,“CITIES”(城市):一個基本集合(元素通過枚舉給出),L:CITIES對應的屬性變量(我們要求的最短路長),“ROADS”(道路):由CITIES導出的一個派生集合(請?zhí)貏e注意其用法),由于只有一部分城市之間有道路相連,所以不應該把它定義成稠密集合,將其元素通過枚舉給出,這就是一個稀疏集合。,D:稀疏集合ROADS對應的屬性變量(給定的距離),本例的LINGO求解,從模型中還可以看出:這個LINGO程序可以沒有目標函數(shù),這在LINGO中,可以用來找可行解(解方程組和不等式組)。,在數(shù)據(jù)段對L進行賦值,只有L(S)=0已知,后面的值為空(但位置必須留出來,即逗號“,”一個也不能少,否則會出錯)。如果這個語句直接寫成“L=0;”,語法上看也是對的,但其含義是L所有元素的取值全部為0,所以也會與題意不符。,本例的LINGO求解,雖然集合CITIES中的元素不是數(shù)字,但當它以CITIES(I)的形式出現(xiàn)在循環(huán)中時,引用下標I卻實際上仍是正整數(shù),也就是說I指的正是元素在集合中的位置(順序),一般稱為元素的索引(INDEX)。,在@for循環(huán)中的過濾條件里用了一個函數(shù)“@index”, 其作用是返回一個元素在集合中的索引值,這里@index(S)=1(即元素S在集合中的索引值為1),所以邏輯關系式“I#GT#@index(S)”可以可以直接等價地寫成“I#GT#1” 。這里@index(S)實際上還是@index(CITIES,S)的簡寫,即返回S在集合CITIES中的索引值。,本例的LINGO求解結(jié)果,從S到T的最優(yōu)行駛路線的路長為20(進一步分析,可以得到最優(yōu)行駛路線為S→ A3→ B2→ C1 → T)。,本例中定義稀疏集合ROADS的方法是將其元素通過枚舉給出,有時如果元素比較多,用起來不方便。另一種定義稀疏集合的方法是“元素過濾”法,能夠從笛卡兒積中系統(tǒng)地過濾下來一些真正的元素。,例 某班8名同學準備分成4個調(diào)查隊(每隊兩人)前往4個地區(qū)進行社會調(diào)查。這8名同學兩兩之間組隊的效率如下表所示(由于對稱性,只列出了嚴格上三角部分),問如何組隊可以使總效率最高?,分析,這是一個匹配(MATCHING)問題。把上表的效率矩陣記為BENEFIT(由于對稱性,這個矩陣只有嚴格上三角部分共28個數(shù)取非零值)。 用MATCH(Si,Sj)=1表示同學Si,Sj組成一隊 ,而MATCH(Si,Sj)=0表示Si,Sj不組隊。由于對稱性,只需考慮ij共28個0-1變量(而不是全部32個變量)。 顯然,目標函數(shù)正好是BENEFIT(Si,Sj)*MATCH(Si,Sj)對I,j之和。 約束條件是每個同學只能(而且必須在)某一組,即對于任意i有:只要屬性MATCH的某個下標為i就加起來,此和應該等于1。,由上面的分析,因此,完整的數(shù)學模型如下(顯然,這是一個0-1線性規(guī)劃):,問題的LINGO求解,“S1S8”等價于寫成“S1 S2 S3 S4 S5 S6 S7 S8”, 它沒有相關的屬性列表,只用于表示是一個下標集合,在派生集合PAIRS定義中增加了過濾條件 “&2#GT#&1”,意思是第2個父集合的元素的索引值(用“&2”表示)大于第1個父集合的元素的索引值(用“&1”表示)。PAIRS中的元素對應于上表中的嚴格上三角部分的二維下標(共28個元素)。BENEFIT和MATCH是PAIRS的屬性。,注意數(shù)據(jù)段對BENEFIT的賦值方式,“LINGO按照列的順序?qū)傩宰兞康脑剡M行賦值。在約束部分,過濾條件“J #EQ# I #OR# K #EQ# I”是由邏輯運算符“#OR#(或者)”連接的一個復合的邏輯關系式,連接由“#EQ#(等于)”表示的兩個邏輯關系。由于“#OR#”的運算級別低于“#EQ#”,所以這個邏輯式中沒有必要使用括號指定運算次序。,LINGO求解結(jié)果,“LINGO|SOLVE”運行這個程序,可以得到全局最優(yōu)值為30,MATCH變量中多數(shù)為0,可以更清晰地瀏覽最優(yōu)解解。 選擇菜單命令“LINGO|SOLUTION”,可以看到圖示對話框。,選擇屬性MATCH(變量),選擇Text(文本格式),選擇Nonzeros Only(只顯示非零值),點擊“OK”按鈕,得到關于最優(yōu)解的非零分量的報告,學生最佳的組隊方式是(1,8),(2,4),(3,7),(5,6).,集合的使用小結(jié),集合的不同類型及其關系,元素列表和屬性列表都是可選的。 當屬性列表不在集合定義中出現(xiàn)時,這樣的集合往往只是為了將來在程序中作為一個循環(huán)變量來使用,或者作為構造更復雜的派生集合的父集合使用(匹配問題中的集合STUDENTS沒有屬性列表)。 而當元素列表不在基本集合的定義中出現(xiàn)時,則必須在程序的數(shù)據(jù)段以賦值語句的方式直接給出元素列表。 例如,前例中SAILCO公司決定四個季度的帆船生產(chǎn)量模型的集合段和數(shù)據(jù)段可以分別改為: SETS: QUARTERS:DEM,RP,OP,INV; !注意沒有給出集合的元素列表; ENDSETS DATA: QUARTERS DEM=1 40 2 60 3 75 4 25; !注意LINGO按列賦值的特點; ENDDATA,基本集合的定義語法,帆船生產(chǎn)量模型的源程序,匹配問題的源程序,派生集合的定義語法,派生集合的定義格式為(方括號“[ ]”中的內(nèi)容是可選項, 可以沒有): setname(parent_set_list) [/member_list/] [: attribute_list]; 與基本集合的定義相比較多了一個parent_set_list(父集合列表)。 父集合列表中的集合(如 set1,set2,…,等)稱為派生集合setname的父集合,它們本身也可以是派生集合。 當元素列表(member_list)不在集合定義中出現(xiàn)時,還可以在程序的數(shù)據(jù)段以賦值語句的方式給出元素列表; 若在程序的數(shù)據(jù)段也不以賦值語句的方式給出元素列表,則認為定義的是稠密集合,即父集合中所有元素的有序組合(笛卡兒積)都是setname的元素。 當元素列表在集合定義中出現(xiàn)時,又有“元素列表法”(直接列出元素)和“元素過濾法”(利用過濾條件)兩種不同方式。,加、減、乘、除、乘方等數(shù)學運算(即數(shù)與數(shù)之間的運算,運算結(jié)果也是數(shù))。 LINGO中的算術運算符有以下5種: +(加法), —(減法或負號), *(乘法), /(除法), ^ (求冪)。,3 . 運算符和函數(shù),邏輯運算符,運算結(jié)果只有“真”(TRUE)和“假”(FALSE)兩個值(稱為“邏輯值”),LINGO中用數(shù)字1代表TRUE,其他值(典型的值是0)都是FALSE。 在LINGO中,邏輯運算(表達式)通常作為過濾條件使用,邏輯運算符有9種,可以分成兩類: #AND#(與),#OR#(或),#NOT#(非):邏輯值之間的運算,它們操作的對象本身已經(jīng)是邏輯值或邏輯表達式,計算結(jié)果也是邏輯值。 #EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于):是“數(shù)與數(shù)之間”的比較,也就是它們操作的對象本身必須是兩個數(shù), 計算得到的結(jié)果是邏輯值。,關系運算符,表示是“數(shù)與數(shù)之間”的大小關系,在LINGO中用來表示優(yōu)化模型的約束條件。LINGO中關系運算符有3種: (即=,大于等于) (在優(yōu)化模型中約束一般沒有嚴格小于、嚴格大于關系),運算符的優(yōu)先級,基本的數(shù)學函數(shù),在LINGO中建立優(yōu)化模型時可以引用大量的內(nèi)部函數(shù),這些函數(shù)以”@” 打頭。LINGO中包括相當豐富的數(shù)學函數(shù),這些函數(shù)的用法非常簡單,下面一一列出。,@ABS(X):絕對值函數(shù),返回X的絕對值。 @COS(X):余弦函數(shù),返回X的余弦值(X的單位是弧度)。 @EXP(X):指數(shù)函數(shù),返回,@FLOOR(X):取整函數(shù),返回X的整數(shù)部分(向最靠近0的方向取整)。 @LGM(X) :返回X的伽瑪(gamma)函數(shù)的自然對數(shù)值(當X為整數(shù)時LGM(X) = LOG(X-1)?。划擷不為整數(shù)時,采用線性插值得到結(jié)果)。 @LOG(X):自然對數(shù)函數(shù),返回X的自然對數(shù)值。,的值(其中e=2.718281.)。,基本的數(shù)學函數(shù),@MOD(X,Y):模函數(shù),返回X對Y取模的結(jié)果,即X除以Y的余數(shù),這里X和Y應該是整數(shù)。 @POW(X,Y):指數(shù)函數(shù),返回XY的值。 @SIGN(X):符號函數(shù),返回X的符號值(X = 0時返回+1)。 @SIN(X):正弦函數(shù),返回X的正弦值(X的單位是弧度)。 @SMAX(list):最大值函數(shù),返回一列數(shù)(list)的最大值。 @SMIN(list):最小值函數(shù),返回一列數(shù)(list)的最小值。 @SQR(X):平方函數(shù),返回X的平方(即X*X)的值。 @SQRT(X):開平方函數(shù),返回X的正的平方根的值。 @TAN(X):正切函數(shù),返回X的正切值(X的單位是弧度)。,集合循環(huán)函數(shù),集合上的元素(下標)進行循環(huán)操作的函數(shù), 一般用法如下: @function(setname [ ( set_index_list)[ | condition]] : expression_list); 其中:,function 集合函數(shù)名,FOR、MAX、MIN、PROD、SUM之一; Setname 集合名; set_index_list 集合索引列表(不需使用索引時可以省略); Condition 用邏輯表達式描述的過濾條件(通常含有索引,無條件時可以省略); expression_list 一個表達式(對@FOR函數(shù),可以是一組表達式。,集合循環(huán)函數(shù),五個集合函數(shù)名的含義: @FOR(集合元素的循環(huán)函數(shù)): 對集合setname的每個元素獨立地生成表達式,表達式由expression_list描述(通常是優(yōu)化問題的約束)。 @MAX(集合屬性的最大值函數(shù)):返回集合setname上的表達式的最大值。 @MIN(集合屬性的最小值函數(shù)):返回集合setname上的表達式的最小值。 @PROD(集合屬性的乘積函數(shù)): 返回集合setname上的表達式的積。 @SUM(集合屬性的求和函數(shù)):返回集合setname上的表達式的和。,集合操作函數(shù),@INDEX( [set_name,] primitive_set_element) 給出元素primitive_set_element在集合set_name中的索引值(即按定義集合時元素出現(xiàn)順序的位置編號)。省略set_name,LINGO按模型中定義的集合順序找到第一個含有該元素的集合,并返回索引值。如果沒有找到該元素,則出錯。 注: Set_name的索引值是正整數(shù)且只能位于1和元素個數(shù)之間。例:定義一個女孩姓名集合(GIRLS)和男孩姓名集合(BOYS) : SETS: GIRLS /DEBBIE, SUE, ALICE/; BOYS /BOB, JOE, SUE, FRED/; ENDSETS 都有SUE, GIRLS在BOYS前定義,調(diào)用@INDEX(SUE)將返2,相當于@INDEX(GIRLS,SUE) 。要找男孩中名為SUE的小孩的索引,應該使用@INDEX(BOYS, SUE),返3。,集合操作函數(shù),@IN( set_name, primitive_index_1 [, primitive_index_2 .]) 判斷一個集合中是否含有某個索引值。如果集合set_name中包含由索引primitive_index_1 [, primitive_index_2 .]所對應元素,則返回1(邏輯值“真”),否則返回0(邏輯值“假”)。索引用“ ENDSETS,如果集合C是由集合A,B派生的,例如: SETS: A / 13/:; B / X Y Z/:; C( A, B) / 1,X 1,Z 2,Y 3,X/:; ENDSETS 判斷C中是否包含元素(2,Y),則可以利用以下語句: X = @IN( C, @INDEX( A, 2), @INDEX( B, Y)); 對本例,結(jié)果是X=1(真)。 注:X既是集合B的元素,又對X賦值1,在LINGO中這種表達是允許的,因為前者是集合的元素,后者是變量,邏輯上沒有關系(除了同名外),所以不會出現(xiàn)混淆。,集合操作函數(shù),@IN( set_name, primitive_index_1 [, primitive_index_2 .]),@WRAP(I,N) 此函數(shù)對N1無定義 當I位于區(qū)間[1, N]內(nèi)時直接返回I;一般地,返回 J = I - K *N , 其中J位于區(qū)間[1, N ], K為整數(shù)。即 @WRAP(I,N)= @MOD(I,N)。 但當@MOD(I,N)=0時@WRAP(I,N)=N. 此函數(shù)可以用來防止集合的索引值越界。 用戶在編寫LINGO程序時,應注意避免LINGO模型求解時出現(xiàn)集合的索引值越界的錯誤。,集合操作函數(shù),@SIZE (set_name) 返回數(shù)據(jù)集set_name中包含元素的個數(shù)。,變量定界函數(shù),對變量的取值范圍附加限制,共有以下四種: @BND(L, X, U) :限制L = X = U。 注意LINGO中沒有與LINDO命令SLB、SUB類似的函數(shù)@SLB和@SUB @BIN(X) :限制X為0或1。注意LINDO中的命令是INT,但LINGO中這個函數(shù)的名字卻不是@INT(X) @FREE(X):取消對X的符號限制(即可取負數(shù)、0或正數(shù)) @GIN(X):限制X為整數(shù),概率相關函數(shù),@PSN(X):標準正態(tài)分布函數(shù),即返回標準正態(tài)分布的分布函數(shù)在X點的取值。 @PSL(X):標準正態(tài)線性損失函數(shù),即返回 MAX(0, Z-X)的期望值, 其中 Z為標準正態(tài)隨機變量。 @PPS(A,X):Poisson分布函數(shù),即返回均值為A的Poisson分布的分布函數(shù)在X點的取值(當X不是整數(shù)時,采用線性插值進行計算)。 @PPL(A,X):Poisson分布的線性損失函數(shù),即返回 MAX(0, Z-X)的期望值, 其中 Z為均值為A的Poisson隨機變量。 @PBN(P,N,X):二項分布函數(shù),即返回參數(shù)為(N,P)的二項分布的分布函數(shù)在X點的取值(當N和(或)X不是整數(shù)時,采用線性插值進行計算) 。,@PHG(POP,G,N,X):超幾何(Hypergeometric)分布的分布函數(shù)。也就是說,返回如下概率:當總共有POP個球,其中G個是白球時,那么隨機地從中取出N個球,白球不超過X個的概率。當POP,G,N和(或)X不是整數(shù)時,采用線性插值進行計算。 @PEL(A,X) :當?shù)竭_負荷(強度)為A,服務系統(tǒng)有X個服務器且不允許排隊時的Erlang損失概率。 @PEB(A,X):當?shù)竭_負荷(強度)為A,服務系統(tǒng)有X個服務器且允許無窮排隊時的Erlang繁忙概率。 @PFS(A,X,C) :當負荷上限為A,顧客數(shù)為C,并行服務器數(shù)量為X時,有限源的Poisson服務系統(tǒng)的等待或返修顧客數(shù)的期望值。(A是顧客數(shù)乘以平均服務時間,再除以平均返修時間。當C和(或)X不是整數(shù)時,采用線性插值進行計算)。,概率相關函數(shù),@PFD(N,D,X):自由度為N和D的F分布的分布函數(shù)在X點的取值。 @PCX(N,X): 自由度為N的分布的分布函數(shù)在X點的取值。 @PTD(N,X): 自由度為N的t分布的分布函數(shù)在X點的取值。 @QRAND(SEED): 返回0與1之間的多個擬均勻隨機數(shù)(SEED為種子,缺省時取當前計算機時間為種子)。該函數(shù)只能用在數(shù)據(jù)段,擬均勻隨機數(shù)可以認為是“超均勻”的隨機數(shù),需要詳細了解“擬均勻隨機數(shù)(quasi-random uniform numbers)” 請進一步參閱LINGO的使用手冊。 @RAND(SEED) :返回0與1之間的一個偽均勻隨機數(shù)(SEED為種子)。,概率相關函數(shù),文件輸入輸出函數(shù),@FILE(filename) 當前模型引用其他ASCII碼文件中的數(shù)據(jù)或文本時可以采用該語句(但不允許嵌套使用),其中filename為存放數(shù)據(jù)的文件名,該文件中記錄之間用“~”分開。 @ODBC 提供LINGO與ODBC(Open Data Base Connection,開放式數(shù)據(jù)庫連接)的接口。 @OLE 提供LINGO與OLE(Object Linking and Embeding)接口。 @POINTER( N) 在Windows下使用LINGO的動態(tài)連接庫DLL ,直接從共享的內(nèi)存中傳送數(shù)據(jù)。 @TEXT(['filename']) 用于數(shù)據(jù)段中將解答結(jié)果送到文本文件filename中,當省略filename時,結(jié)果送到標準的輸出設備(通常就是屏幕)。filename中可以帶有文件路徑,沒有指定路徑時表示在當前目錄,如果這個文件已經(jīng)存在,將會被覆蓋。,結(jié)果報告函數(shù),@ITERS() 只能在程序的數(shù)據(jù)段使用,調(diào)用時不需要任何參數(shù),返回LINGO求解器計算所使用的總迭代次數(shù)。例如: @TEXT() = @ITERS(); 將迭代次數(shù)顯示在屏幕上。 @NEWLINE(n) 在輸出設備上輸出n個新行。 @STRLEN(string) 返回字串“string”的長度,如 @STRLEN(123)返回值為3。,@NAME(var_or_row_refernce) 返回變量名或行名。 例: SETS: WH/WH1WH3/;!WH表示倉庫的集合; C/C1C4/; ! C 表示顧客的集合; ROAD(WH,C):X; !ROAD表示倉庫到顧客的道路集合; !X表示某個倉庫對某個顧客供貨數(shù); ENDSETS DATA: @TEXT() = @WRITEFOR( ROAD( I, J) | X( I, J) #GT# 0: @NAME( X), ' ', X, @NEWLINE( 1)); ENDDATA,結(jié)果報告函數(shù),@NAME(var_or_row_refernce) 返回變量名或行名。 輸出結(jié)果示意如下(這里沒有詳細交待屬性X當前的取值): X( WH1, C1) 2 X( WH1, C2) 17 X( WH1, C3) 1 X( WH2, C1) 13 X( WH2, C4) 12 X( WH3, C3) 21 注: “變量”是指“數(shù)組元素”X( WH1, C1)、X( WH2, C4)等,即屬性加上相應的下標(集合元素)。 同理,約束名也是指模型展開后的約束名(用LINGO| Generate命令可以看到約束展開后的情況),即也應該是帶有相應的下標(集合元素)的。,結(jié)果報告函數(shù),結(jié)果報告函數(shù),@WRITE(obj1[, …, objn]) 只能在數(shù)據(jù)段中使用,輸出一系列結(jié)果(obj1, …, objn),其中obj1, …, objn 等可以是變量(但不能只是屬性),也可以是字符串(放在單引號中的為字符串)或換行(@NEWLINE)等。 結(jié)果可以輸出到一個文件,或電子表格(如EXCEL),或數(shù)據(jù)庫,這取決于@WRITE所在的輸出語句中左邊的定位函數(shù)。 例如: DATA: @TEXT() = @WRITE('A is', A, ', B is', B, ', A/B is', A/B); ENDDATA 其中A,B是該模型中的變量,在屏幕上輸出A,B以及A/B的值(增加了一些字符串,使結(jié)果讀起來更方便)。假設計算結(jié)束時A=10,B=5,則輸出為: A is 10,B is 5, A/B is 2,結(jié)果報告函數(shù),@STATUS() 返回LINGO求解模型結(jié)束后的最后狀態(tài): 0 Global Optimum (全局最優(yōu)) 1 Infeasible(不可行) 2 Unbounded (無界) 3 Undetermined (不確定) 4 Interrupted(用戶人為終止了程序的運行) 5 Infeasible or Unbounded (通常需要關閉“預處理”選項后重新求解模型,以確定究竟是不可行還是無界) 6 Local Optimum(局部最優(yōu)) 7 Locally Infeasible(局部不可行) 8 Cutoff(目標函數(shù)達到了指定的誤差水平) 9 Numeric Error (約束中遇到了無定義的數(shù)學操作),其他函數(shù),@IF(logical_condition, true_result, false_result) 當邏輯表達式logical_condition的結(jié)果為真時,返回true_result,否則返回false_result。 @WARN('text', logical_condition ) 如果邏輯表達式“l(fā)ogical_condition”的結(jié)果為真,顯示‘text’信息。 @USER(user_determined_arguments) 允許用戶自己編寫的函數(shù)(DLL或OBJ文件),可能應當用C或FORTRAN等其他語言編寫并編譯。,- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- lingo 入門教程
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
鏈接地址:http://www.3dchina-expo.com/p-1856146.html