




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、LINGO軟件的求解過程分析 LP QP NLP IP 全局優(yōu)化(選) ILP IQP INLP LINGO預處理程序線性優(yōu)化求解程序非線性優(yōu)化求解程序分枝定界管理程序1. 確定常數(shù)2. 識別類型1. 單純形算法2. 內(nèi)點算法(選)1、順序線性規(guī)劃法(SLP) 2、廣義既約梯度法(GRG) (選) 3、多點搜索(Multistart) (選) 三、 LINGO軟件的基本使用方法1、Lingo入門2、在Lingo中使用集合3、運算符和函數(shù)4、Lingo的主要菜單命令1、Lingo入門LINGO的界面LINGO軟件的主窗口(用戶界面),所有其他窗口都在這個窗口之內(nèi)。 模型窗口(Model Wind
2、ow),用于輸入LINGO優(yōu)化模型(即LINGO程序)。 狀態(tài)行(最左邊顯示“Ready”,表示 “準備就緒”)當前時間 當前光標的位置 簡單程序舉例:Lindo程序 :max 2x+3yst4x+3y103x+5y12endLingo 程序:MODEL: max =2*x+3*y; 4*x+3*y10; 3*x+5*y12;end請大家仔細區(qū)分它們的不同。求z=2x+3y在約束條件4x+3y=10,3x+5y=12下的最大值這是lingo程序最基本的格式之一在lingo模型窗口中輸入右框中的程序,并保存為LG4 格式文件,這是LINGO格式的模型文件,保存了模型窗口中所能夠看到的所有文本和其
3、他對象及其格式信息; 在LINGO中使用LINDO模型 運行程序 : 點“LINGO菜單Solve 命令” 或 按ctrl+s運行 或 用鼠標點在LINGO中使用LINDO模型運行狀態(tài)窗口求解器(求解程序)狀態(tài)框當前解的狀態(tài) : Global Optimum, Local Optimum, Feasible, Infeasible“(不可行), Unbounded“(無界), Interrupted“(中斷), Undetermined“(未確定) 解的目標函數(shù)值 運行程序的LINGO報告窗口(如下圖) 在LINGO中使用LINDO模型注:LINGO不詢問是否進行敏感性分析,敏感性分析需要將來
4、通過修改系統(tǒng)選項啟動敏感性分析后,再調(diào)用“REPORT|RANGE”菜單命令來實現(xiàn)?,F(xiàn)在同樣可以把模型和結(jié)果報告保存在文件中。 一個簡單的LINGO程序例 直接用LINGO來解如下二次規(guī)劃問題:輸入窗口如下:程序語句輸入的備注:max=98*x1+277*x2-x12-0.3*x1*x2-2*x22;LINGO總是根據(jù)“MAX=”或“MIN=”尋找目標函數(shù)。gin(x1);gin(x2);限定變量取整數(shù)值的語句為“GIN(X1)”和“GIN(X2)”LINGO中函數(shù)一律需要以“”開頭。BIN(x)限定變量x為0/1變量函數(shù)FREE(x)設(shè)定變量x的取值范圍為實數(shù)。注意:如果0/1變量的個數(shù)很多
5、,還可以采用循環(huán)語句設(shè)定。選擇全局求解的方法:點 Lindo菜單optionsGlobal Solver,在use Global Solver前打鉤。點 save,應用,ok.然后運行這個程序輸出結(jié)果:最優(yōu)整數(shù)解X=(35,65)最大利潤=11077.5 一個簡單的LINGO程序LINGO的基本用法的幾點注意事項 LINGO中不區(qū)分大小寫字母;變量和行名可以超過8個字符,但不能超過32個字符,且必須以字母開頭。用LINGO解優(yōu)化模型時已假定所有變量非負(除非用限定變量取值范圍的函數(shù)free或sub或slb另行說明)。變量可以放在約束條件的右端(同時數(shù)字也可放在約束條件的左端)。但為了提高LIN
6、GO求解時的效率,應盡可能采用線性表達式定義目標和約束(如果可能的話)。語句是組成LINGO模型的基本單位,每個語句都以分號結(jié)尾,編寫程序時應注意模型的可讀性。例如:一行只寫一個語句,按照語句之間的嵌套關(guān)系對語句安排適當?shù)目s進,增強層次感。以感嘆號開始的是說明語句(說明語句也需要以分號結(jié)束))。課堂練習: 求解下列模型二、集合的基本用法和LINGO模型的基本要素 理解LINGO建模語言最重要的是理解集合(Set)及其屬性(Attribute)的概念。 例 SAILCO公司需要決定下四個季度的帆船生產(chǎn)量。下四個季度的帆船需求量分別是40條,60條,75條,25條,這些需求必須按時滿足。每個季度正
7、常的生產(chǎn)能力是40條帆船,每條船的生產(chǎn)費用為400美元。如果加班生產(chǎn),每條船的生產(chǎn)費用為450美元。每個季度末,每條船的庫存費用為20美元。假定生產(chǎn)提前期為0,初始庫存為10條船。如何安排生產(chǎn)可使總費用最???DEM,RP,OP,INV對每個季度都應該有一個對應的值,也就說他們都應該是一個由4個元素組成的數(shù)組,其中DEM是已知的,而RP,OP,INV是未知數(shù)。 第一季度 第二季度 第三季度 第四季度DEM: 需求量(為已知) 40 60 75 25RP: 正常生產(chǎn)的產(chǎn)量 OP: 加班生產(chǎn)的產(chǎn)量 INV: 庫存量總費用:四個季度的(生產(chǎn)費用+加班費用+庫存費用)設(shè)問題的模型(可以看出是LP模型 )
8、目標函數(shù)是所有費用的和 約束條件主要有兩個:1)能力限制:2)產(chǎn)品數(shù)量的平衡方程:加上變量的非負約束正常生產(chǎn)的產(chǎn)量加班產(chǎn)量庫存量注:LINDO中沒有數(shù)組,只能對每個季度分別定義變量,如正常產(chǎn)量就要有RP1,RP2,RP3,RP4 4個變量等。寫起來就比較麻煩,尤其是更多(如1000個季度)的時候。 記四個季度組成的集合QUARTERS=1,2,3,4,它們就是上面數(shù)組的下標集合,而數(shù)組DEM,RP,OP, INV對集合QUARTERS中的每個元素1,2,3,4分別對應于一個值。LINGO正是充分利用了這種數(shù)組及其下標的關(guān)系,引入了“集合”及其“屬性”的概念,把QUARTERS=1,2,3,4稱
9、為集合,把DEM,RP,OP, INV稱為該集合的屬性(即定義在該集合上的屬性)。QUARTERS集合的屬性DEM RPOP INVQUARTERS集合2341 集合及其屬性 集合元素及集合的屬性確定的所有變量集合QUARTERS的元素1234定義在集合QUARTERS上的屬性DEMDEM(1)DEM(2)DEM(3)DEM(4)RPRP(1)RP(2)RP(3)RP(4)OPOP(1)OP(2)OP(3)OP(4)INVINV(1)INV(2)INV(3)INV(4)LINGO中定義集合及其屬性 LP模型在LINGO中的一個典型輸入方式 以“MODEL:”開始 以“END”結(jié)束集合定義部分從
10、(“SETS:”到“ENDSETS” ):定義集合及其屬性集合定義部分從(“DATA:”到“ENDDATA” )給出優(yōu)化目標和約束 目標函數(shù)的定義方式對語句中冒號“:”后面的表達式,按照“:”前面的集合指定的下標(元素)進行求和。 本例中目標函數(shù)也可以等價地寫成SUM(QUARTERS(i): 400*RP(i) +450*OP(i) +20*INV(i) ),“SUM”相當于求和符號“”,由于本例中目標函數(shù)對集合QUARTERS的所有元素(下標) 都要求和,所以可以將下標i省去。 min=sum(Quarters:400*RP+450*OP+20*INV);SUM(集合(下標):關(guān)于集合的屬
11、性的表達式)約束的定義方式循環(huán)函數(shù)FOR(集合(下標):關(guān)于集合的屬性的約束關(guān)系式) 對冒號“:”前面的集合的每個元素(下標),冒號“:”后面的約束關(guān)系式都要成立 本例中,每個季度正常的生產(chǎn)能力是40條帆船,這正是語句“FOR(QUARTERS(I):RP(I)40);”的含義。這個語句可以簡化成“FOR(QUARTERS:RP40);” 。 for(quarters(I):RP(I)1;“#GT#”是邏輯運算符號,意思是“大于(Greater Than的字首字母縮寫)” 。約束的定義方式問題的求解:運行菜單命令“LINGO|Solve” 全局最優(yōu)解RP=(40,40,40,25),OP=(0
12、,10,35,0) 最小成本=78450 Lingo模型的基本結(jié)構(gòu)(1)集合段(SETS): sets: Quarters/1,2,3,4/:DEM,RP,OP,INV,I; endsets或者 sets: Quarters/1.4/:DEM,RP,OP,INV,I; endsets(2)目標與約束段: min=sum(Quarters:400*RP+450*OP+20*INV); For(quarters(I):RP(I)40); For(Quarters(I)|I#GT#1: INV(I)=INV(I-1)+RP(I)+OP(I)-DEM(I);); INV(1)=10+RP(1)+OP(
13、1)-DEM(1);(3)數(shù)據(jù)段(DATA):DATA: DEM=40,60,75,25; (或?qū)懗蒁EM=40 60 75 25;)Enddata(4)初始段(INIT):以“INIT: ”開始, “ENDINIT”結(jié)束,對集合的屬性(數(shù)組)定義初值(因為求解算法一般是迭代算法,所以用戶如果能給出一個比較好的迭代初值,對提高算法的計算效果是有益的)。如果有一個接近最優(yōu)解的初值,對LINGO求解模型是有幫助的。定義初值的格式為:“attribute(屬性) = value_list(常數(shù)列表);”這與數(shù)據(jù)段中的用法是類似的。上例中沒有初始化部分,我們將在下一個例子中舉例說明。(5)計算段(CA
14、LC):以“CALC: ”開始, “ENDCALC”結(jié)束,對一些原始數(shù)據(jù)進行計算處理。在實際問題中,輸入的數(shù)據(jù)通常是原始數(shù)據(jù),不一定能在模型中直接使用,可以在這個段對這些原始數(shù)據(jù)進行一定的“預處理”,得到模型中真正需要的數(shù)據(jù)。例如上例,如果希望得到全年的總需求和季度平均需求,可以增加這個段:CALC: T_DEM = SUM(quarters: DEM); !總需求; A_DEM = T_DEM / size(quarters); !平均需求;ENDCALC在計算段中也可以使用集合函數(shù)(其中函數(shù)size(quarters)表示集合quarters的元素個數(shù),這里也就是4)。這時,變量T_DEM
15、的值就是總需求,A_DEM的值就是平均需求(如果需要的話,這兩個變量就可以在程序的其它地方作為常數(shù)使用了)。注:上面的兩個語句不能交換順序,因為計算A_DEM必須要用到T_DEM的值。此外,在計算段中只能直接使用賦值語句,而不能包含需要經(jīng)過解方程或經(jīng)過求解優(yōu)化問題以后才能決定的變量。基本集合與派生集合 例3.4 建筑工地的位置(用平面坐標a, b表示,距離單位:公里)及水泥日用量d(噸)下表給出。有兩個臨時料場位于P (5,1), Q (2, 7),日儲量各有20噸。從A, B兩料場分別向各工地運送多少噸水泥,使總的噸公里數(shù)最小。兩個新的料場應建在何處,節(jié)省的噸公里數(shù)有多大?a1.258.75
16、0.55.7537.25b1.250.754.7556.57.75d3547611建立模型記工地的位置為 ,水泥日用量為 ;料場位置為 ,日儲量為 ;從料場 向工地 的運送量為 。 使用現(xiàn)有臨時料場時,決策變量只有 (非負),所以這是LP模型;當為新建料場選址時決策變量為 和 ,由于目標函數(shù) 對 是非線性的,所以在新建料場時是NLP模型。先解NLP模型,而把現(xiàn)有臨時料場的位置作為初始解告訴LINGO。 輸入程序 定義了三個集合,其中LINK在前兩個集合DEMAND 和SUPPLY的基礎(chǔ)上定義表示集合LINK中的元素就是集合DEMAND 和SUPPLY的元素組合成的有序二元組,從數(shù)學上看LINK
17、是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ù)是按列賦值的
18、語句的實際賦值順序是X=(5,2), Y=(1,7), 而不是X=(5,1), Y=(2,7) 等價寫法:“X=5,2; Y=1,7;”同理,數(shù)據(jù)段中對常數(shù)數(shù)組A,B的賦值語句也可以寫成;輸入程序 解答:運行菜單命令“LINGO|Solve” 局部最優(yōu)解, , ,C(略),最小運量=89.8835(噸公里)。 問題:最小運量是不是全局最優(yōu) 是用“LINGO|Options”菜單命令打開選項對話框,在“Global Solver”選項卡上選擇“Use Global Solver”, 激活全局最優(yōu)求解程序。稠密集合與稀疏集合 包含了兩個基本集合構(gòu)成的所有二元有序?qū)Φ呐缮戏Q為稠密集合(簡稱稠集)
19、。有時候,在實際問題中,一些屬性(數(shù)組) 只在笛卡兒積的一個真子集合上定義,這種派生集合稱為稀疏集合(簡稱疏集)。例 (最短路問題) 在縱橫交錯的公路網(wǎng)中,貨車司機希望找到一條從一個城市到另一個城市的最短路. 下圖表示的是公路網(wǎng), 節(jié)點表示貨車可以停靠的城市,弧上的權(quán)表示兩個城市之間的距離(百公里). 那么,貨車從城市S出發(fā)到達城市T,如何選擇行駛路線,使所經(jīng)過的路程最短?STA1 A2 A3 B1 B2 C1 C2 633665874678956STA1 A2 A3 B1 B2 C1 C2 633665874678956分析 假設(shè)從S到T的最優(yōu)行駛路線 P 經(jīng)過城市C1, 則P中從S到C1的
20、子路也一定是從S到C1的最優(yōu)行駛路線; 假設(shè) 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)只有唯一的道路) 分
21、析 STA1 A2 A3 B1 B2 C1 C2 633665874678956此例中可把從S到T的行駛過程分成4個階段,即 SAi (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)行駛路線的路長: 本例的計算STA1 A2 A3 B1 B2 C1 C2 633665874678956所以, 從S到T的最優(yōu)行駛路線的路長為20. 進一步分析以上求解過程, 可以得到從S到T的最優(yōu)行駛路線為S A3 B2 C1 T.這種
22、計算方法在數(shù)學上稱為動態(tài)規(guī)劃(Dynamic Programming) 本例的LINGO求解“CITIES”(城市):一個基本集合(元素通過枚舉給出)L:CITIES對應的屬性變量(我們要求的最短路長) “ROADS”(道路):由CITIES導出的一個派生集合(請?zhí)貏e注意其用法),由于只有一部分城市之間有道路相連,所以不應該把它定義成稠密集合,將其元素通過枚舉給出,這就是一個稀疏集合。 D:稀疏集合ROADS對應的屬性變量(給定的距離)本例的LINGO求解從模型中還可以看出:這個LINGO程序可以沒有目標函數(shù),這在LINGO中,可以用來找可行解(解方程組和不等式組)。在數(shù)據(jù)段對L進行賦值,只有
23、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),所以邏輯關(guān)系式“I#GT#inde
24、x(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名同學兩兩之間組隊的效率如下表所示(由于對稱性,只列出了嚴格上
25、三角部分),問如何組隊可以使總效率最高?學生S1S2S3S4S5S6S7S8S1-9342156S2-173521S3-44292S4-1552S5-876S6-23S7-4分析 這是一個匹配(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之和。 約束條件是每
26、個同學只能(而且必須在)某一組,即對于任意i有:只要屬性MATCH的某個下標為i就加起來,此和應該等于1。 由上面的分析,因此,完整的數(shù)學模型如下(顯然,這是一個0-1線性規(guī)劃):問題的LINGO求解“S1.S8”等價于寫成“S1 S2 S3 S4 S5 S6 S7 S8”, 它沒有相關(guān)的屬性列表,只用于表示是一個下標集合 在派生集合PAIRS定義中增加了過濾條件 “&2#GT#&1”,意思是第2個父集合的元素的索引值(用“&2”表示)大于第1個父集合的元素的索引值(用“&1”表示)。PAIRS中的元素對應于上表中的嚴格上三角部分的二維下標(共28個元素)。BENEFIT和MATCH是PAIR
27、S的屬性。 注意數(shù)據(jù)段對BENEFIT的賦值方式,“LINGO按照列的順序?qū)傩宰兞康脑剡M行賦值。在約束部分,過濾條件“J #EQ# I #OR# K #EQ# I”是由邏輯運算符“#OR#(或者)”連接的一個復合的邏輯關(guān)系式,連接由“#EQ#(等于)”表示的兩個邏輯關(guān)系。由于“#OR#”的運算級別低于“#EQ#”,所以這個邏輯式中沒有必要使用括號指定運算次序。 LINGO求解結(jié)果“LINGO|SOLVE”運行這個程序,可以得到全局最優(yōu)值為30 MATCH變量中多數(shù)為0,可以更清晰地瀏覽最優(yōu)解解。選擇菜單命令“LINGO|SOLUTION”,可以看到圖示對話框。選擇屬性MATCH(變量)選擇
28、Text(文本格式)選擇Nonzeros Only(只顯示非零值)點擊“OK”按鈕,得到關(guān)于最優(yōu)解的非零分量的報告學生最佳的組隊方式是(1,8),(2,4),(3,7),(5,6).集合的使用小結(jié) 集合的不同類型及其關(guān)系 集合派生集合稀疏集合稠密集合基本集合元素列表法 元素過濾法 直接列舉法 隱式列舉法 基本集合的定義語法 基本集合的定義格式為(方括號“ ”中的內(nèi)容是可選項, 可以沒有):setname /member_list/ : attribute_list;其中setname為定義的集合名,member_list為元素列表,attribute_list為屬性列表。元素列表可以采用顯式列
29、舉法(即直接將所有元素全部列出,元素之間用逗號或空格分開),也可以采用隱式列舉法。隱式列舉法可以有幾種不同格式,類型隱式列舉格式示例示例集合表示的元素數(shù)字型1.n1.51, 2, 3, 4, 5字符-數(shù)字型stringM.stringNCar101.car208Car101, car102, , car208日期(星期)型dayM.dayNMON.FRIMON, TUE, WED, THU, FRI月份型monthM.monthNOCT.JANOCT, NOV, DEC, JAN年份-月份型monthYearM.monthYearNOCT2001.JAN2002OCT2001, NOV2001
30、, DEC2001, JAN2002 元素列表和屬性列表都是可選的。 當屬性列表不在集合定義中出現(xiàn)時,這樣的集合往往只是為了將來在程序中作為一個循環(huán)變量來使用,或者作為構(gòu)造更復雜的派生集合的父集合使用(匹配問題中的集合STUDENTS沒有屬性列表)。 而當元素列表不在基本集合的定義中出現(xiàn)時,則必須在程序的數(shù)據(jù)段以賦值語句的方式直接給出元素列表。 例如,前例中SAILCO公司決定四個季度的帆船生產(chǎn)量模型的集合段和數(shù)據(jù)段可以分別改為:SETS: QUARTERS:DEM,RP,OP,INV; !注意沒有給出集合的元素列表;ENDSETSDATA: QUARTERS DEM=1 40 2 60 3
31、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ù)段以賦值語句的方
32、式給出元素列表;若在程序的數(shù)據(jù)段也不以賦值語句的方式給出元素列表,則認為定義的是稠密集合,即父集合中所有元素的有序組合(笛卡兒積)都是setname的元素。當元素列表在集合定義中出現(xiàn)時,又有“元素列表法”(直接列出元素)和“元素過濾法”(利用過濾條件)兩種不同方式。3.運算符和函數(shù) LINGO入門2.在LINGO中使用集合3. 運算符和函數(shù)4. LINGO的主要菜單命令5. LINGO命令窗口 6.習題運算符及其優(yōu)先級 算術(shù)運算符加、減、乘、除、乘方等數(shù)學運算(即數(shù)與數(shù)之間的運算,運算結(jié)果也是數(shù))。LINGO中的算術(shù)運算符有以下5種:+(加法),(減法或負號),*(乘法),/(除法), (求冪
33、)。邏輯運算符運算結(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é)果是邏輯值。關(guān)系運算
34、符表示是“數(shù)與數(shù)之間”的大小關(guān)系,在LINGO中用來表示優(yōu)化模型的約束條件。LINGO中關(guān)系運算符有3種:(即(即=,大于等于)(在優(yōu)化模型中約束一般沒有嚴格小于、嚴格大于關(guān)系)運算符的優(yōu)先級 優(yōu)先級最高 最低運算符#NOT#(負號)* /+(減法)#EQ# #NE# #GT# #GE# #LT# #LE#AND# #OR#基本的數(shù)學函數(shù) 在LINGO中建立優(yōu)化模型時可以引用大量的內(nèi)部函數(shù),這些函數(shù)以” 打頭。LINGO中包括相當豐富的數(shù)學函數(shù),這些函數(shù)的用法非常簡單,下面一一列出。ABS(X):絕對值函數(shù),返回X的絕對值。COS(X):余弦函數(shù),返回X的余弦值(X的單位是弧度)。EXP(X)
35、:指數(shù)函數(shù),返回FLOOR(X):取整函數(shù),返回X的整數(shù)部分(向最靠近0的方向取整)。LGM(X) :返回X的伽瑪(gamma)函數(shù)的自然對數(shù)值(當X為整數(shù)時LGM(X) = LOG(X-1)??;當X不為整數(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(
36、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 集合名;se
37、t_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ù)): 返回集合s
38、etname上的表達式的積。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 /
39、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 .所對應元素,則返回
40、1(邏輯值“真”),否則返回0(邏輯值“假”)。索引用“&1”、“&2”或INDEX函數(shù)等形式給出,這里“&1”表示對應于第1個父集合的元素的索引值,“&2”表示對應于第2個父集合的元素的索引值。 例:定義一個集合STUDENTS(基本集合),派生出集合PASSED和FAILED,定義: SETS: STUDENTS / ZHAO, QIAN, SUN, LI/:; PASSED( STUDENTS) /QIAN,SUN/:; FAILED( STUDENTS) | #NOT# IN( PASSED, &1):; ENDSETS 如果集合C是由集合A,B派生的,例如: SETS: A / 1.
41、3/:; 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中這種表達是允許的,因為前者是集合的元素,后者是變量,邏輯上沒有關(guān)系(除了同名外),所以不會出現(xiàn)混淆。集合操作函數(shù) IN( set_name, primitive_index_1 , primitive_index_2 .)WRAP(I,N) 此函數(shù)對N1無定義 當I位于區(qū)間1
42、, 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 1的正整數(shù)):N點求解5. LINGO命令窗口 LINGO入門2.在LINGO中使用集合3
43、. 運算符和函數(shù)4. LINGO的主要菜單命令5. LINGO命令窗口 6.習題 LINGO命令行 模式LINGO有兩種命令模式:Windows模式, 命令行 (Command-Line) 模式。這里簡單介紹一下命令行模式下的主要行命令??梢酝ㄟ^菜單命令“Window|Command Window (Ctrl+1)”打開命令窗口,在命令窗口下操作。在命令窗口下的提示符 “:”后面鍵入 COMMANDS(COM)可以看到LINGO的所有行命令 部分行命令的基本功能在LINGO中不再支持LINDO的部分行命令,如DATE,TABL,SDBC,F(xiàn)BS,F(xiàn)PUN,SMPN等。LINGO也增加了一些與L
44、INDO不同的命令(見下表)。LINGO行命令功能簡介MEM顯示矩陣生成器(建模語言)的內(nèi)存使用情況(不包括求解程序使用的內(nèi)存)MODEL開始輸入LINGO模型FRMPS讀出自由格式的MPS文件(而RMPS命令讀出固定格式的MPS文件)GEN編譯并以代數(shù)形式生成展開的模型,參見“LINGO|Generate”菜單命令LINGO行命令功能簡介HIDE用戶對模型設(shè)定密碼,隱藏模型文本的內(nèi)容(如:為了保護你的知識產(chǎn)權(quán)時)SMPI以MPI文件格式保存模型(該文件主要供LINDO API軟件閱讀,提供接口)FREEZE凍結(jié)(即保存)系統(tǒng)參數(shù)(包括SET命令可以設(shè)定的所有參數(shù)),下次啟動LINGO這些參數(shù)
45、仍然有效;實際上,這些參數(shù)保存在LINGO目錄下的LINGO.CNF文件中;用戶隨時可以運行“SET DEFAUT”和“FREEZE”兩條命令恢復缺省設(shè)置。DBUID設(shè)定數(shù)據(jù)庫的用戶名,該用戶名在ODBC()函數(shù)存取數(shù)據(jù)庫時使用DBPWD設(shè)定數(shù)據(jù)庫的使用密碼,該密碼在ODBC()函數(shù)存取數(shù)據(jù)庫時使用APISET該命令用于設(shè)定LINDO API所需要的參數(shù)(當然,只有當某個參數(shù)不能通過LINGO的前端命令“SET”來修改時才需要使用APISET命令)。因此,這是比較專業(yè)的參數(shù)選項,具體請參見LINDO API的使用手冊。 部分行命令的基本功能 LINGO中的SET命令相同的命令,LINGO中與在
46、LINDO中也不完全相同。LINGO中的SET命令能設(shè)定的參數(shù)比LINDO中多。凡是用戶能夠控制的LINGO系統(tǒng)參數(shù), SET命令都能夠?qū)λM行設(shè)置. SET 命令的使用格式為:SET parameter_name | parameter_index parameter_value parameter_name是參數(shù)名,parameter_index是參數(shù)索引(編號),parameter_value是參數(shù)值。當不寫出參數(shù)值時,則SET命令的功能是顯示該參數(shù)當前的值?!癝ET DEFAULT”命令用于將所有參數(shù)恢復為系統(tǒng)的默認值(缺省值)。這些設(shè)置如果不用“FREEZE”命令保存到配置文件中,退
47、出LINGO后這些設(shè)置失效。 SET 可設(shè)置的參數(shù)及簡要功能參數(shù)名缺省值簡要說明ILFTOL0.3e-5初始線性可行誤差限FLFTOL0.1e-6最終線性可行誤差限INFTOL0.1e-2初始非線性可行誤差限FNFTOL0.1e-5最終非線性可行誤差限RELINT0.8e-5相對整性誤差限NOPTOL0.2e-6非線性規(guī)劃(NLP)的最優(yōu)性誤差限ITRSLW5緩慢改進的迭代次數(shù)的上限D(zhuǎn)ERCMP0導數(shù) (0:數(shù)值導數(shù), 1:解析導數(shù))ITRLIM0迭代次數(shù)上限 (0:無限制) SET 可設(shè)置的參數(shù)及簡要功能參數(shù)名缺省值簡要說明TIMLIM0求解時間的上限(秒) (0:無限制)OBJCTS1是否
48、采用目標割平面法 (1:是, 0:否)MXMEMB32模型生成器的內(nèi)存上限(兆字節(jié))(對某些機器,可能無意義)CUTAPP2割平面法的應用范圍(0:根節(jié)點, 1:所有節(jié)點, 2:LINGO自動決定)ABSINT.000001整性絕對誤差限HEURIS3整數(shù)規(guī)劃(IP)啟發(fā)式求解次數(shù) (0:無, 可設(shè)定為0100) SET 可設(shè)置的參數(shù)及簡要功能參數(shù)名缺省值簡要說明HURDLEnone整數(shù)規(guī)劃(IP)的“籬笆”值(none:無, 可設(shè)定為任意實數(shù)值)IPTOLA.8e-7整數(shù)規(guī)劃(IP)的絕對最優(yōu)性誤差限IPTOLR.5e-7整數(shù)規(guī)劃(IP)的相對最優(yōu)性誤差限TIM2RL100采用IPTOLR作
49、為判斷標準之前,程序必須求解的時間(秒)NODESL0分枝節(jié)點的選擇策略(0: LINGO自動選擇;1:深度優(yōu)先;2: 最壞界的節(jié)點優(yōu)先;3: 最好界的節(jié)點優(yōu)先) SET 可設(shè)置的參數(shù)及簡要功能參數(shù)名缺省值簡要說明LENPAG0終端的頁長限制 (0:沒有限制;可設(shè)定任意非負整數(shù))LINLEN76終端的行寬限制(0:沒有限制;可設(shè)定為64-200)TERSEO0輸出級別 (0:詳細型, 1:簡潔型)STAWIN1是否顯示狀態(tài)窗口 (1:是, 0:否, Windows系統(tǒng)才能使用)SPLASH1彈出版本和版權(quán)信息 (1:是, 0:否, Windows系統(tǒng)才能使用) SET 可設(shè)置的參數(shù)及簡要功能參
50、數(shù)名缺省值簡要說明OROUTE0將輸出定向到命令窗口 (1:是, 0:否, Windows系統(tǒng)才能使用)WNLINE800命令窗口的最大顯示行數(shù)(Windows系統(tǒng)才能使用)WNTRIM400每次從命令窗口滾動刪除的最小行數(shù) (Windows系統(tǒng)才能使用)STABAR1顯示狀態(tài)欄(1:是, 0:否, Windows系統(tǒng)才能使用)FILFMT1文件格式(0:lng格式, 1:lg4格式, Windows系統(tǒng)才能使用) SET 可設(shè)置的參數(shù)及簡要功能參數(shù)名缺省值簡要說明TOOLBR1顯示工具欄(1:是, 0:否, Windows系統(tǒng)才能使用)CHKDUP0檢查數(shù)據(jù)與模型中變量是否重名 (1:是,
51、0:否)ECHOIN0腳本命令反饋到命令窗口(1:是, 0:否) ERRDLG1錯誤信息以對話框顯示 (1:是, 0:否, Windows系統(tǒng)才能使用)USEPNM0允許無限制地使用基本集合的成員名(1:是, 0:否) SET 可設(shè)置的參數(shù)及簡要功能參數(shù)名缺省值簡要說明NSTEEP0在非線性求解程序中使用最陡邊策略選擇變量(1:是, 0:否)NCRASH0在非線性求解程序中使用啟發(fā)式方法生成初始解(1:是, 0:否)NSLPDR1在非線性求解程序中用SLP法尋找搜索方向 (1:是, 0:否) SELCON0在非線性求解程序中有選擇地檢查約束(1:是, 0:否) PRBLVL0對混合整數(shù)線性規(guī)劃
52、(MILP)模型,采用探測(Probing)技術(shù)的級別(0:LINGO自動決定;1:無;2-7:探測級別逐步升高) SET 可設(shè)置的參數(shù)及簡要功能參數(shù)名缺省值簡要說明SOLVEL0線性求解程序(0: LINGO自動選擇, 1: 原始單純形法, 2: 對偶單純形法, 3: 障礙法 (即內(nèi)點法)REDUCE2模型降維(2:LINGO決定, 1:是, 0:否)SCALEM1變換模型中的數(shù)據(jù)的尺度 (1:是, 0:否)PRIMPR0原始單純形法決定出基變量的策略(0: LINGO自動決定, 1: 對部分出基變量嘗試, 2: 用最陡邊法對所有變量進行嘗試) SET 可設(shè)置的參數(shù)及簡要功能參數(shù)名缺省值簡要
53、說明DUALPR0對偶單純形法決定出基變量的策略(0: LINGO自動決定, 1:按最大下降比例法確定, 2: 用最陡邊法對所有變量進行嘗試)DUALCO1指定對偶計算的級別 (0: 不計算任何對偶信息;1:計算對偶價格;2:計算對偶價格并分析敏感性)RCMPSN0Use RC format names for MPS I/O (1:yes, 0:no)MREGEN1重新生成模型的頻率(0:當模型的文本修改后;1:當模型的文本修改或模型含有外部引用時;3:每當有需要時) SET 可設(shè)置的參數(shù)及簡要功能參數(shù)名缺省值簡要說明BRANDR0分枝時對變量取整的優(yōu)先方向(0:LINGO自動決定;1:向上取整優(yōu)先;2:向下取整優(yōu)先)BRANPR0分枝時變量的優(yōu)先級 (0:LINGO自動決定, 1:二進制(0-1)變量)CUTOFF.1e-8解的截斷誤差限STRONG10指定強分枝的層次級別REOPTB0IP熱啟動時的LP算法 (0: LINGO自動選擇;1:障礙法 (即內(nèi)點法);2:原
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 辦公室的管理規(guī)范
- 急性膿胸的健康宣教
- 胸部挫傷的健康宣教
- 圍產(chǎn)期心肌病的健康宣教
- 華為關(guān)鍵崗位群能力模型
- 產(chǎn)褥期各個階段護理要點
- 2025江蘇大豐和順電子有限公司閑置資產(chǎn)轉(zhuǎn)讓合同
- 2025簡易汽車購銷合同
- 父親樹林和鳥課件
- 2025家教中介服務合同模板
- 山東省青島市市南區(qū)2024-2025學年上學期九年級期末質(zhì)量監(jiān)測九年級數(shù)學試題 (原卷版+解析版)
- 中央2025年中國日報社及所屬事業(yè)單位招聘國內(nèi)高校應屆生筆試歷年參考題庫附帶答案詳解
- GB/T 20972.2-2025石油天然氣工業(yè)油氣開采中用于含硫化氫環(huán)境的材料第2部分:抗開裂碳鋼、低合金鋼和鑄鐵
- 2022年陜西省普通高校職業(yè)教育單獨招生統(tǒng)一考試英語試題及答案
- 大健康特色產(chǎn)業(yè)園項目商業(yè)計劃書
- 水泥混凝土路面翻修施工方案詳解
- 護理感動案例
- 2024年10月自考04851產(chǎn)品設(shè)計程序與方法試題及答案含評分參考
- 養(yǎng)老項目案例研究-泰康之家北京燕園市場調(diào)研報告
- 美國租房合同中文
- 科室一級護理質(zhì)控匯報
評論
0/150
提交評論