LINDOLINGO簡介及使用方法

2021-03-04 09:32:20 字數 7915 閱讀 6310

歡迎訪問華中數學建模網 class="txt">1.lindo、lingo

一、軟體簡介

lindo是一種專門用於求解數學規劃問題的軟體包。由於lindo執行速度很快、易於方便輸入、求解和分析數學規劃問題。因此在數學、科研和工業界得到廣泛應用。

lindo主要用於解線性規劃、非線性規劃、二次規劃和整數規劃等問題。也可以用於一些非線性和線性方程組的求解以及代數方程求根等。lindo中包含了一種建模語言和許多常用的數學函式(包括大量概論函式),可供使用者建立規劃問題時呼叫。

一般用lindo(linear interactive and discrete optimizer)解決線性規劃(lp—linear programming)。整數規劃(ip—integer programming)問題。其中lindo 6 .

1 學生版至多可求解多達300個變數和150個約束的規劃問題。其正式版(標準版)則可求解的變數和約束在1量級以上。

lindo則用於求解非線性規劃(nlp—non—linear programming)和二次規則(qp —quaratic programing)其中lingo 6.0學生版最多可版最多達300個變數和150個約束的規則問題,其標準版的求解能力亦再10^4量級以上。雖然lindo

和lingo不能直接求解目標規劃問題,但用序貫式演算法可分解成乙個個lindo和lingo能解決的規劃問題。

要學好用這兩個軟體最好的辦法就是學習他們自帶的help檔案。

下面擬舉數例以說明這兩個軟體的最基本用法。(例子均選自張瑩《運籌學基礎》)

例1.(選自《運籌學基礎》p54.汽油混合問題,線性規劃問題)

一種汽油的特性可用兩個指標描述:其點火性用「辛烷數」描述,其揮發性用「蒸汽壓力」描述。某煉油廠有四種標準汽油,設其標號分別為1,2,3,4,其特性及庫存量列於下表1中,將上述標準汽油適量混合,可得兩種飛機汽油,某標號為1,2,這兩種飛機汽油的效能指標及產量需求列於表2中。

問應如何根據庫存情況適量混合各種標準汽油,使既滿足飛機汽油的效能指標,而產量又為最高。

表1標準汽油辛烷數蒸汽壓力(g/cm^2) 庫存量

1107.57.11*10^(-2)380000

293.011.38*10^(-2)262200

387.0 5.69*10^(-2)408100

4108.028.45*10^(-2)130100

(1 g/cm^2=98pa)

表2飛機汽油辛烷數蒸汽壓力(g/cm^2) 產量需求(l)

越多越好1>=91<=9.96*10

^(-2)

>=2500002>=100<=9.96*10

^(-2)

建模過程略(詳見《運籌學基礎》p54—55)

目標函式:max z=x1+x2+x3+x4

約束條件:x5+x6+x7+x8>=250000

x1+x5<=380000

x2+x6<=265200

x3+x7<=408100

x4+x8<=130100

2.85x1-1.42x2+4.27x3-18.49x4>=0

2.85x5-1.42x6+4.27x7-18.49x8>=0

16.5x1+2.0x2-4.0x3+17x4>=0

7.5x5-7.0x6-13.0x7+8.0x8>=0

xj>=0(j=1,2 (8)

下面我們就用lindo來解這一優化問題。

輸入語句:

max(不區分大小寫) x1+x2+x3+x4

st(大寫或寫subject to)

x5+x6+x7+x8>=250000

x1+x5<=380000

x2+x6<=265200

x3+x7<=408100

x4+x8<=130100

2.85x1-1.42x2+4.27x3-18.49x4>=0

2.85x5-1.42x6+4.27x7-18.49x8>=0

16.5x1+2.0x2-4.0x3+17x4>=0

7.5x5-7.0x6-13.0x7+8.0x8>=0

end然後再按運算子鍵即可得結果。

lindo是規定xj非負的,我們可發現輸入方式與我們的數學書寫的形式基本一致,運算後,計算機會問您是否需要靈敏度分析,我們選擇是,結果如下:

lp optimum found at step 6

objective function value

1) 933400.0

variable valuereduced cost

x1 161351.7343750.000000

x2 265200.0000000.000000

x3 408100.0000000.000000

x4 98748.2656250.000000

x5 218648.2656250.000000

x6 0.0000000.000000

x7 0.0000000.000000

x8 31351.7343750.000000

row slack or surplus dual prices

20.0000001.000000

30.0000001.000000

40.0000001.000000

50.0000001.000000

60.0000001.000000

70.0000000.000000

8) 43454.0000000.000000

9) 3239024.2500000.000000

10) 1890675.8750000.000000

no. iterations= 6

ranges in which the basis is unchanged:

obj coefficient ranges

variable current allowable allowablecoefincrease decrease x1 1.000000 0.000000 1.

154137 x2 1.000000 infinity 0.000000 x3 1.

000000 infinity 0.000000 x4 1.000000 0.

000000 0.000000 x5 0.000000 1.

154137 0.000000 x6 0.000000 0.

000000 infinity x7 0.000000 0.000000 infinity x8 0.

000000 0.000000 0.000000righthand side ranges

row current allowable allowable

rhsincrease decrease

2 250000.000000 186222.062500 234752.984375

3 380000.000000 234752.984375 15247.017578

4 265200.000000 30601.410156 265200.000000

5 408100.000000 156685.250000 10176.581055

6 130100.000000 2350.135254 36184.207031

7 0.000000 43454.000000 669046.000000

8 0.000000 43454.000000 infinity

9 0.000000 3239024.250000 infinity

10 0.000000 1890675.875000 infinity

下面給出其結果的一般解釋:

「lp optimum found at step 6」表示lindo在(用單純形法)6次迭代或旋轉後得到最優解。

「objective function value 1)933400.0」表示最優目標值為933400。

「value」給出最優解中各變數的值。

「slack or surplus」給出鬆弛變數的值。上例中slk 2= 第二行鬆弛變數=0(模型第一行表示目標函式,所以第二行對應第乙個約束)

「reduce cost」列出最優單純形表中判別數所在行的變數的係數,表示當變數有微小變動時,目標函式的變化率,其中基變數的reduce cost 值應為0,對於非基變數xj相應的reduce cost值表示xj增加乙個單位(此時假定其他非基變數保持不變)時目標函式減小的量(max 型問題)。上例中:x1 對應的 reduce cost 值為0,表示當x1=1 時,目標函式值不變。

「dual price」(對偶**)列出最優單純形表中判別數所在行的鬆弛變數的係數,表示當對應約束有微小變動時,目標函式的變化率,輸出結果中對應每乙個約束有乙個對偶**。若其數值為x,表示對應約束中不等式右端項若增加乙個單位,目標函式將增加x個單位(max 型問題)。上例中:

第二行對應的對偶**值應為-1表示當約束 2)x5 + x6 + x7 + x8>250000變為 2)x5 + x6 + x7 + x8>250001時,

目標函式值=933400-1=933399

當reduce cost 或dual price 的值為0。表示當微小擾動不影響目標函式。有時,通過分析dual price,也可對產生不可行問題的原因有所了解。

靈敏度分析:如果做敏感性分析,則系統報告當目標函式的費用係數和約束右端項在什麼範圍變化(此時假定其他係數保持不變)時,最優基保持不變。報告中infinity表示正無窮,如上例:

目標函式中x1的變數係數為1,當它在

[1-1.154137,1-0]=

[-0.154137,1] 變化時,最優基保持不變 。

第乙個約束右端項為250000,當它在

[250000-234752.984375,250000+186222.0625]=[15247.015625,436222.0625] 範圍變化時,最優基保持不變 。

當您要判斷表示式輸入是否有錯誤時,也可以使用選單「reports「的」picture 「選項。

若想獲得靈敏度分析,可用「reports「的」rang「選項。

若需顯示單純形表,可執行「reports「的」tab lean「選項。

注意事項:

1) 目標函式及各約束條件之間一定要有「subject to (st) 」分開。

2) 變數名不能超過8個字元。

3) 變數與其係數間可以有空格,單不能有任何運算符號(如乘號「*」等)。

4) 要輸入<=或》=約束,相應以《或》代替即可。

5) 一般lindo中不能接受括號「()「和逗號「,「,例:400(x1+x2) 需寫成400x1+400x2;10,000需寫成10000。

6) 表示式應當已經過簡化。不能出現 2 x1+3 x2-4 x1,而應寫成-2x1+3 x2。

例2.(選自《運》p94習題2.4;整數規則)

有四個工人,要分別指派他們完成四項不同的工作,每個人做各項工作所消耗的時間如表。問應該如何指派,才能使總的消耗時間為最小?

a b c d工作

所耗時間

工人甲 15 18 21 24

乙 19 23 22 18

丙 26 17 16 19

丁 19 21 23 17

這是一道典型的整數規則問題。

我們記派第i去做工作記為xij

注意到每人只能做一項工作。每項工作一人做。我們得到目標函式為約束條件:

min15x11+19x21+26x31+19x41+18x12+23x22+17x32+21x42+24x13+22x23+16x33+23x 43+24x14+18x24+19x34+17x44

stx11+x12+x13+x14=1

x21+x22+x23+x24=1

x31+x32+x33+x34=1

x41+x42+x43+x44=1

x11+x21+x31+x41=1

x12+x22+x32+x42=1

x13+x23+x33+x43=1

x14+x24+x34+x44=1

endint 16

執行後我們可得到最優目標值為70

當 ,其餘為0時。(具體的reports 我們略去)

在用lindo解整數規劃(ip)問題時,只要在end後加上標識即可,其中解0/1規劃的用命令。

int name 或 int n (n 指前n 個變數標識為0/1型)解混合型整數規劃則用gin 來標識。

lindo解整數規劃對變數的限制為50個。(指lindo 6.1學生版)。

所以說,儘管lindo對整數規劃問題是很有威力。要有效地使用還是需要一定技術的。這是因為,人們很容易將乙個本質上很簡單的問題列成乙個輸入模型。

從而有可能會導致乙個冗長的分支定界計算。

例3用lindo解目標規劃

由於lindo不能直接求解目標規劃問題,這是否就意味著lindo失去了效力呢?不是的。

由求解目標規劃問題的有效演算法——序貫式演算法可知其實目標規劃我們常採取分解成前面二種辦法而已。

例如算:min a=((d1_+d1),(2d2+d3))

g1:x1-10x2+d1_-d1=50

g2:3x1+5x2+d2_-d2=20

g3:8x1+6x2+d3_-d3=100

xi(i=1,2),dj_,dj(j=1,2,3)>=0

先求目標函式的最優值

min d1_+d1

stx1-10x2+d1_-d1=50

3x1+5x2+d2_-d2=20

end求得d1_+d1 的最優值為0

然後再求

min 2d2+d3

stx1-10x2+d1_-d1=50

3x1+5x2+d2_-d2=20

8x1+6x2+d3_-d3=100

d1_+d1=0

end即可算得第二級最優值2d2+d3

例4lindo雖亦可求解二次規劃問題。(但我認為它在輸入對不如用lingo

方便,用lindo輸入時要先作偏導數計算不如lingo哪樣可直接輸入。(選自《運籌學基礎》p190.習題4.10

min f(x)=(x1-1)^2+(x2-2)^2

x2-x1=1

x1+x2<=2

x1>=0,x2>=0

先來說一說如何使用lingo

一般來說lingo多用於解決大規模數學規劃。

用時要注意以下幾點:

(1) 每條語句後必須使用分號「;」結束。問題模型必須由model命令開始,end結束。

(2) 用model命令來作為輸入問題模型的開始,格式為model:statement (語句)。

(3) 目標函式必須由「min =」或「max =」開頭。

則上面的例子的輸入就為

modul:

min=(x1-1)^2+(x2-2)^2;

x2-1=1;

x1+x2<=2;

end我們即可得到最優值0.5。當x1=0.5,x2=1.5,及靈敏度分析。我們還可得作圖分析。

對於大規模規劃求解請參見lingo的help檔案。

SPSS使用簡介

第一章 spss10.0 for windows簡介 spss軟體是由美國spss公司研製的。spss的全稱為statistical program for social sciences,即 社會科學統計程式 spss10.0 for windows是在windows作業系統下執行的社會科學統計軟...

自壓軟管微孔滴灌安裝及使用簡介

一 自壓軟管微孔滴灌技術簡介 自壓軟管微孔滴灌技術是利用渠道與田間地面的自然落差所產生的水壓,通過鋪設於地表的干支軟管輸水,分配到作物行間的毛管 多孔軟管 由毛管上的出水孔以微水流方式將水肥灌溉至作物根部附近地表,滲入根際土壤,供作物吸收利用的一項節水灌溉新技術。其主要特點如下 1.1投資成本低 自...

db2pd簡介及使用方法

簡介db2 udb v8.2 帶來了一種新工具稱為 db2pd,用於收集 db2 例項和資料庫的統計資訊。與 informix dynamic server 的 onstat 工具類似,db2pd 提供了 20 多個選項顯示關於資料庫事務 表空間 表統計資訊 動態 sql 資料庫配置和其他很多資料庫...