




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、目標函數以“max”或“min”開頭,max(或min)與目標函數表達式之間不能有“=”。lindo常用的基本語法
2、變量名的長度不超過8個字符,并且必須以英文字母開頭。英文字母不區分大小寫。3、目標函數與約束條件之間必須用“st”分開,并且“st”單獨一行。4、目標函數、各約束條件都必須以“回車鍵”結束,并且都應該是經過化簡后的表達式,所有字符必須是英文狀態下輸入的。5、lindo軟件已規定所有的決策變量均為非負數。6、變量與其系數之間可以有空格,乘號必須省略,式中不能有括號;約束條件的右端不能有決策變量,
左端不能有常數項;沒有下標,式中不能有分母,式中不能有“逗號”和“句號”等(說明語句除外)。常用的基本語法
7、約束條件中的符號“≥”用“>=”表示,
“≤”用“<=”表示,并且可以分別用“>”和“<”表示。8、輸入文件中的第一行默認為目標函數,可以用2),3)等標明各約束條件,便于從輸出結果中查找信息。以感嘆號“!”開始的是說明語句.9、程序最后以end結束,對于小型的規劃問題,end可以省略。
常用的基本語法
整數變量(例如:ginx1)和0-1變量(例如intx3)的約束放在end之后,此時end不能省略。10、如果所有的決策變量都是整數變量(假如有6個變量),則可以在end之后寫命令:
gin6
如果不是所有的決策變量都是整數變量,則不能采用此方法。
此時,如果省略end的話,整數變量、0-1變量等限制將不起作用。11、如果x1是整數變量,則應在end之后寫上命令:ginx1如果x1是0-1變量,則應在end之后寫上命令:intx1
如果所有的決策變量共有6個,并且所有的決策變量都是整數,則可以在end之后寫命令:gin6
如果x1,x2都是整數變量,但并不是所有的變量都是整數變量,則要寫成ginx1ginx2不能寫成ginx1,x2或ginx1;x24.2.1LINGO軟件使用格式(1)目標函數以“max=”或“min=”開頭,其后面是目標函數的表達式。(2)模型以“model:”開始,以“end”結束,
對簡單的模型,“model:”及“end”也可以省略。
lingo中的語句順序不重要,目標函數與約束條件有明顯的標志,不用加其它的符號。
lingo總是根據“max=”或“min=”語句尋找目標函數,而其它的語句都是約束語句和說明語句。
除了首行和末行外,每行以“;”結束。所有字符必須是英文狀態下輸入的。
1、LINGO使用規則LINGO軟件的使用規則(2)(3)乘號“*”不能省略,式中可以有括號,約束條件的右端可以有決策變量,沒有下標,式中不能有分母,式中不能有“逗號”和“句號”(說明語句和函數中的內容除外)
,故目標函數和各約束約束條件都可以是沒有經過化簡后的表達式。(4)英文字母不區分大小寫字母,
lingo中的變量名和行名可以超過8個字符,但不能超過32個字符,并且變量名必須以字母開頭,后面跟數字或字母。(5)lingo軟件已規定所有的決策變量均為非負數,(除非用限定變量取值范圍的函數@free或@bnd等另行說明)。LINGO軟件的使用規則(3)(6)約束條件中的符號“≥”用“>=”或“>”表示,“≤”用“<=”或“<”表示。(7)計算機把輸入程序中的第一行默認為目標函數,其它各約束條件可以用[_1],[_2]標明它的行號。
(8)雖然決策變量可以放在約束條件的右端,但為了提高Lingo的求解效率,應盡可能采用線性表達式定義目標函數和約束條件。(9)在lingo中以感嘆號“!”開始的是說明語句,并且說明語句也需要以分號“;”結束,并且除了“!”和“;”之外,說明語句中的其它字符可以是任何字符。LINGO軟件的使用規則(4)(10)lingo模型是由一系列語句組成的,即每個語句是組成lingo模型的基本部分,每個語句(目標、約束、說明語句等)都是以分號“;”結尾的,編寫程序時應注意保持模型的可讀性。例如:雖然lingo允許每行寫多個語句,也允許一個語句寫成幾行,但最好一行只寫一個語句,并且按照語句的嵌套關系對語句安排適當的縮進,增強層次感。LINGO軟件的使用規則(5)(11)在lingo中,以“@”開頭的都是函數調用,其中有:整型變量函數(@bin表示0-1變量,@gin表示整數變量)和上下界限定等函數(@free表示去掉非負限制,@bnd限定變量的上限、下限)。這些變量的限制要放在“end”之前,否則這些變量的限制將不起作用
。如果x1是整數變量,則應在end之前寫命令:@gin(x1);如果x1是0-1變量,則應在end之前寫命令:@bin(x1);如果所有的決策變量共有6個,并且所有的決策變量都是整數,不能寫命令:
@bin(6);等其它的命令如果x1,x2都是整數變量,并且不是所有的變量都是整數變量,則要寫成@gin(x1);@gin(x2);不能寫成@gin(x1,x2)或其它的命令練習:分別用lindo、lingo編寫下列數學模型的程序(1)可以用于求線性規劃及非線性規劃問題,包括非線性整數規劃問題。2、lingo的優點(2)lingo包含內置的建模語言(常稱矩陣生成器),允許以簡練、直觀的方式描述較大規模的優化模型(成千萬個約束條件和變量),
模型中所需的數據可以用一定格式保存在獨立的文件中,需要時再讀取數據。
在lindo中的目標函數最優值、最優解與靈敏度分析是一起顯示出來,
3、lingo中的靈敏度分析而在lingo中,最優解、最
優值與靈敏度分析是分別用不同的命令顯示出來。
lingo中的靈敏度分析的數據輸出結果與lindo中的靈敏性分析中輸出結果是相同的。
因為lingo的求解結果中是沒有靈敏度分析的,所以如果需要靈敏度分析的數據,可以通過修改選項來實現。
①先修改系統選項,啟動靈敏度分析通過修改選項得到靈敏度分析數據的步驟:執行“LINGO/options”菜單命令彈出“選項”對話框,在“General
solver”選項卡中,將其中左邊列的第二個選項“Dualcompulations”(對偶計算)選項的默認設置“prices”改為“pricesandRanges”(價格及范圍)后,先對規劃問題求解一次。②執行“LINGO/Range”菜單命令,運行后計算機則顯示只有靈敏度分析的數據。一般情況下,lingo得到的都是局部最優解,要得到全局最優解,
激活全局最優求解程序的步驟
則要激活全局最優求解程序,方法如下:執行“LINGO/Options”菜單命令彈出“選項框”對話框,在“GlobalSolver”選項卡上選擇“UseGlobalSolver”點確定即可。
由于全局最優求解程序花費的時間可能是很長的,所以為了減少計算工作量,我們應該盡量對變量等做進一步的限制。
1、運算符4.2.2
運算符及優先級(1)算術運算符:
+加-減*乘/除^乘方(開方)(2)邏輯運算符:邏輯運算結果只有真與假,在lingo中用1和0表示,邏輯運算符(表達式)通常作為過濾條件使用。
①#and#與,#or#或,#not#非②#eq#等于,#ne#不等于,#gt#大于,#ge#大于等于,#lt#小于,#le#小于等于
即:g—大于,e—等于,l—小于,t—不等于(3)關系運算符2、運算符的優先級<(或<=)=>(或>=)
#not#(負號)^
*/
+(減法)
#eq#,#ne#,#gt#,#ge#,#lt#,#le##and#與,#or#>=<
高
低
@sqrt(x)
4.2.3常用的函數在Lingo中,所有的系統函數都必須是以“@”開頭。1、數學函數@abs(x)
求絕對值函數,返回x的絕對值
@cos(x)
求余弦函數,返回x的余弦值,
x的單位是弧度@exp(x)
計算ex的值@log(x)
計算lnx
的值@pow(x,y)
計算xy的值@sqr(x)
計算x的平方計算x的平方根@size(A)
求矩陣A的元素個數2、集合循環函數集合循環函數是指對集合中的所有元素(下標)進行循環操作的函數,如@sum,@for等。
具體的使用格式:@循環函數名(循環變量所在的集(循環變量)│過濾條件:循環表達式)其中,如果在操作過程中沒有過濾條件,可以省略過濾條件;如果表達式是對集合的所有循環變量進行操作,循環變量也可以省略。集合循環函數:@for
是對集合的每個元素獨立地操作一次表達式,通常用于優化問題的約束條件;
@sum是求集合中表達式的和;
@prod是求集合中表達式的乘積;@max是求集合中表達式的最大值;
@min是求集合中表達式的最小值;
但如果是求目標函數的最大、最小值,則是用
“max=目標函數表達式”,“min=目標函數表達式”,
而不用寫@。
(1)@for
該函數用來產生對集成員的約束。@for函數允許只輸入一個約束條件,然后由lingo自動產生每個集成員的約束條件。例4-2
產生序列{1,4,9,16,25}model:
sets:
number/1..5/:x;!此命令產生一個變量x,是單下標變量,其下標有5個取值;
endsets
@for(number(i):x(i)=i^2);!此命令是對所有的下標i,分別求i2;
end(2)@sum
該函數返回遍歷指定的集成員的一個表達式的和。
例4-3
求向量[5,1,3,4,6,10]前5個數的和。model:
sets:
number/1..6/:x;
endsets
data:
x=5134610;!此命令給變量x具體的取值;
enddata
s=@sum(number(i)|i#le#5:x(i));
end3、變量定界函數變量定界函數是對變量的取值范圍附加限制。@bnd(A,x,B):
是指限定變量x的取值為
A≤x≤B(在LINDO中無此函數)
@gin(x):
限定變量x
的取值為整數;
@bin(x):
限定變量x為0-1變量,@free(x):
取消變量x的非負限制,即x可以取負數、0或正數,因為lingo原來默認所有的變量非負取值。
在lindo是用命令int,而在lingo中沒有@int(x)
;
4.2.4lingo計算輸出的結果
lingo計算的輸出結果與lindo計算的輸出結果是完全相同的,只是輸出的命令不相同。在lindo中,最優值、最優解,影子價格與靈敏度分析的數據可以同時輸出。而在lingo
中,靈敏度分析的數據只有通過修改選項才能輸出。lingo計算輸出結果例4-1的數學模型:model:
max=32*x1+30*x2;
3*x1+4*x2<=36;
5*x1+4*x2<=40;
9*x1+8*x2<=76;
end
輸出結果:Globaloptimalsolutionfound.
Objectivevalue:282.6667
Totalsolveriterations:3
VariableValueReducedCost
X11.3333330.000000
X28.0000000.000000
RowSlackorSurplusDualPrice
1282.66671.000000
20.0000001.166667
31.3333330.000000
40.0000003.1666674.2.5關于lingo程序中的段一般來說,lingo中建立的優化模型可以由五部分來組成,或稱為五段。下面介紹常用的三段:集合段,數據段,目標和約束段
1、集合段(sets):這部分要以“sets:”開始,以“endsets”結束。作用在于定義必要的集合及其元素。
屬性相當于變量或數組,集合的成員相當于下標。
1、集合段(sets):具體使用格式是:集合名/集的成員/:屬性;ABD/1,2,3,4,5,6/:x,y;顯式羅列所有的成員ABD/1..6/:x,y;
隱式羅列所有的成員,中間的成員系統自動產生,只要列出集合的第一個和最后一個成員就行,但所有的成員必須是有規律的。不同的成員及不同的屬性之間,用“,”分隔。
集合的屬性相當于以集合的元素為下標的數組,
即屬性相當于變量,成員相當于下標。具體來說,ABD/1,2,3,4,5,6/:x,y;其集合名為ABD,屬性為x,y
成員為1,2,3,4,5,6定義以x,y為變量,下標分別為1,2,3,4,5,6的變量,即x1,
x2,x3,x4,x5,x6
y1,y2,y3,y4,y5,y6
屬性(變量)的具體值如果是常數,則應在數據段中輸入具體數據;如果是未知數(即決策變量),則在數據段中不能輸入數據,但可以在初始段輸入初值。集合的成員和屬性可以在定義時省略,隨后在數據段中輸入。關于集合的一些說明:
myfile/1..5/:a;
定義原始集合myfile,屬性a的成員有5個元素,即定義a是單下標變量,下標有5個取值,即a1,a2,a3,a4,a5。
myfoes/1..6/:b;
定義原始集合myfoes,屬性b的成員有6個元素,即定義b是單下標變量,下標有6個取值,即b1,b2,b3,b4,b5,b6。
myido(myfoes,myfile):x,c;
定義派生集合myido,屬性x和c的成員有30個元素,即定義x和c是雙下標變量,第1個下標有6個取值,第2個下標有5個取值。其中myfoes和myfile稱為派生集合的父集。例4-4model:
sets:
myfile/1..5/:a;
myfoes/1..6/:b;
myido(myfile,myfoes):x,c;
endsets
data:
c=1,2,-2,5,6,-4
2,3,-4,6,9,3
2,5,-1,5,-2,0
-5,6,7,9,10,-10
33,4,6,6,7,9;
a=100,200,100,100,400;
b=100,200,100,150,150,200;
enddatamin=@sum(myido(i,j):c(i,j)*x(i,j));
!產銷平衡運輸問題的目標函數;
@for(myfile(i):@sum(myfoes(j):x(i,j))=a(i));
!產銷平衡運輸問題產地的產量約束;
@for(myfoes(j):@sum(myfile(i):x(i,j))=b(j));
!產銷平衡運輸問題銷地的銷量約束;
end
2、數據段(data):以“data:”開始,以“enddata”結束,作用在于對集合的屬性(數組或變量)輸入必要的常數數據。具體的使用格式為:
屬性(或變量)=常數列表;在常數列表中,數據之間用“,”分隔,也可以空格分開(“ctrl+回車”的作用也等價于一個空格),即變量(或屬性)是取等號右邊的常數.model:
sets:
ABD/1,2,3,4,5,6/:x,y;
endsets
data:
x=1,3,0,5,6,-7;
y=-3,4,29,58,3,10;
enddata
end在數據段中輸入數據時,可以分別輸入每個變量對應的數據,也可以同時輸入多個同維的變量的數據值。兩種輸入方法得到的結果相同例4-5等同于x,y=1,-3,3,4,0,29,5,58,6,3,-7,10;
3、目標和約束段:這部分實際上是定義目標函數、約束條件等,但這部分并沒有段的開始及結束的標記。
lingo的目標函數和約束條件,一般要用到循環函數:如求和函數@sum和循環函數@for等。
目標函數是求最大值或最小值.
max=目標函數;
或
min=目標函數;
約束條件的標志是:@for(約束條件);目標函數的標志是:
例如:
sets:
ABD/1,2,3,4,5,6/:X;
AB/1..3/:Y,D;
endsets(1)如程序中有約束條件:
在lingo程序中應該表示為:
@for(AB(j):@sum(ABD(i):x(i)*y(j))<=d(j));(2)如程序中有約束條件:
在lingo程序中應該表示為:
@for(AB(i):@sum(ABD(j):x(i)*y(j))<=d(i));循環變量:循環變量:先計算變量j
,再計算變量i.
先計算變量i,再計算變量j.
model:
sets:
myfile/1..5/:a;myfoes/1..6/:b;myido(myfile,myfoes):x,c;
endsets
data:
c=1,2,-2,5,6,-4
2,3,-4,6,9,3
2,5,-1,5,-2,0
-5,6,7,9,10,-10
33,4,6,6,7,9;
a=100,200,100,100,400;b=100,200,100,150,150,200;
enddata
min=@sum(myido(i,j):c(i,j)*x(i,j));
@for(myfile(i):@sum(myfoes(j):x(i,j))=a(i));@for(myfoes(j):@sum(myfile(i):x(i,j))=b(j));
end分析用lingo編寫的程序例4-6寫出下面規劃問題的lingo中用集合編寫的求解程序。如果線性規劃問題有最優解,請寫出最優解。
解:要寫出用lingo中集合的方法求解的程序,則應該先把規劃模型化為用求和形式表示的模型,
其中:
則該規劃問題的用求和形式表示的模型為:用求和形式表示的模型討論用集合表示的模型:其中:(1)變量c,x是單
下標,下標有3
個取值;變量b是單下標,下標有4個取值。對于單下標的變量,只要直接定義集合即可,即要定義兩個集合,一個有3個取值的,另一個有4個取值的。由于變量c,b,a已經有具體的數值,故必須在數據段中給出具體的取值;變量x沒有具體的數值,它是決策變量,故不能在數據段中給出具體的取值。討論用集合表示的模型:(2)變量a是雙
下標變量,下標共有4×3個取值,第1個i下標有4個取值,第2個下標j有3個取值。
對于雙下標的變量,必須定義派生集合。
它第1個父集是有4個取值,第2個父集是有3個取值。
變量a已經有具體的數值,它不是決
策變量,故必須在數據段中給出具體的取值。
上述數學模型用集合編寫的求解程序為:集合段
sets:
endsets
ab/1,2,3/:x,c;
abc/1,2,3,4/:b;
abcd(abc,ab):a;數據段
data:
enddata
c=8,10,2;
b=70,80,15,50;
a=2,1,3
4,2,2
3,0,1
2,2,0;目標函數
max=@sum(ab(j):c(j)*x(j));約束條件@for(abc(i):@sum(ab(j):a(i,j)*x(j))<=b(i));
ab/1,2,3/:x,c;
abc/1,2,3,4/:b;
abcd(abc,ab):a;用集合表示的程序為:model:
sets:
ab/1,2,3/:x,c;
abc/1,2,3,4/:b;
abcd(abc,ab):a;
endsets
data:
c=8,10,2;
b=70,80,15,50;
a=2,1,34,2,23,0,12,2,0;
enddata
max=@sum(ab(j):c(j)*x(j));
@for(abc(i):@sum(ab(j):a(i,j)*x(j))<=b(i));
endmodel:
sets:
ab/1,2,3/:x,c;
abc/1,2,3,4/:b;
abcd(abc,ab):a;
endsets
data:
c=8,10,2;
b=70,80,15,50;
a=2,1,34,2,23,0,12,2,0;
enddata
max=@sum(ab(j):c(j)*x(j));
@for(abc(i):@sum(ab(j):a(i,j)*x(j))<=b(i));
end
Globaloptimalsolutionfound.Objectivevalue:280.0000Totalsolveriterations:2VariableValueReducedCostX(1)0.0000002.666667X(2)25.000000.000000X(3)15.000000.000000利用軟件計算,可知:該數學規劃模型的最優解為最優值為:
(2)把規劃問題化為用求和形式表示的模型,其中:
該規劃問題用求和形式表示的模型為:該規劃問題用集合編寫的程序為:集合段
sets:
endsets
ab/1,2,3,4,5/:x,c;
abc/1,2,3/:b;
abcd(abc,ab):a;數據段
data:
enddata
c=3,-1,-1,0,0;
b=11,3,1;
a=1,-2,1,1,0
-4,1,2,0,-1
-2,0,1,0,0;目標函數
max=@sum(ab(j):c(j)*x(j));約束條件
@for(abc(i):@sum(ab(j):a(i,j)*x(j))=b(i));
ab/1,2,3,4,5/:x,c;
abc/1,2,3/:b;
abcd(abc,ab):a;model:
sets:
ab/1,2,3/:b;
abc/1,2,3,4,5/:c,x;
abcd(ab,abc):a;
endsets
data:
c=3,-1,-1,0,0;
b=11,3,1;
a=1,-2,1,1,0
-4,1,2,0,-1-2,0,1,0,0;
enddata
max=@sum(ab(j):c(j)*x(j));
@for(abc(i):@sum(ab(j):a(i,j)*x(j))=b(i));
end用集合表示的程序為:model:
sets:
ab/1,2,3/:b;
abc/1,2,3,4,5/:c,x;
abcd(ab,abc):a;
endsets
data:
c=3,-1,-1,0,0;
b=11,3,1;
a=1,-2,1,1,0
-4,1,2,0,-1
-2,0,1,0,0;
enddata
max=@sum(abc(j):c(j)*x(j));
@for(ab(i):@sum(abc(j):a(i,j)*x(j))=b(i));
end
Globaloptimalsolutionfound.Objectivevalue:2.000000Totalsolveriterations:0VariableValueReducedCostX(1)4.0000000.000000X(2)1.0000000.000000X(3)9.0000000.000000X(4)0.0000000.3333333X(5)0.0000000.3333333利用軟件計算可知:該數學規劃模型的最優解為最優值為:
2
用LINGO求解運輸問題:某產品有5個產地A1,A2,A3,A4,A5,它的產品供應6個銷地B1,B2,B3,B4,B5,B6,產地的產量、銷地的銷
量及產品從各產地運往各銷地的單位運價如下表:產地銷地B
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國兩個一分十分配器行業投資前景及策略咨詢研究報告
- 2024年度寧夏回族自治區護師類之主管護師通關提分題庫及完整答案
- 2024年度寧夏回族自治區護師類之外科護理主管護師全真模擬考試試卷B卷含答案
- 2024年度寧夏回族自治區護師類之兒科護理主管護師提升訓練試卷A卷附答案
- 2025年山東無棣經濟開發發展集團有限公司招聘筆試參考題庫含答案解析
- 2025年山東青島西海之光投資發展有限公司招聘筆試參考題庫含答案解析
- 2025年安徽亳州城建發展控股集團有限公司招聘筆試參考題庫含答案解析
- 艾滋病防范教育
- 2025年一建機電工程管理與實務考試易錯知識點專項突破試卷
- 2025年一建《機電工程管理與實務》考試合同管理與索賠題庫真題解析
- 生產經理轉正述職報告課件
- 空調清洗施工方案
- 濟青高速涵洞定期檢查報告模版
- Commvault數據庫備份恢復功能介紹
- 《錢的旅行》課堂 課件
- 部編版語文一年級下冊第一單元教材分析及教學建議
- 《數據庫驗收規定》word版
- 雙胎妊娠 PPT課件
- 盛唐氣象ppt課件
- 應聘人員面試評分表
- 毛坪角隧道溶洞處理方案(共32頁)
評論
0/150
提交評論