義欣
【摘 要】在日常生活中,為了取得最大化的利益,經(jīng)常會需要利用現(xiàn)有的資源條件進行科學適當?shù)陌才牛@就離不開數(shù)學規(guī)劃,即從基礎(chǔ)的應(yīng)用數(shù)學角度進行分析問題,依據(jù)數(shù)字來判斷最佳方案。其中最重要的就是數(shù)學建模,是屬優(yōu)化管理模型的一種,最為常見的就是利用線性規(guī)劃的手段進行構(gòu)建,而Matlab和Lingo同作為可用于數(shù)值計算分析的軟件,在進行線性規(guī)劃問題求解時都有著重要的應(yīng)用。本文主要就線性規(guī)劃與非線性規(guī)劃問題進行分析討論,并利用Matlab和Lingo進行求解,分析兩款軟件的計算過程,并做出總結(jié)。
【關(guān)鍵詞】數(shù)學建模;非線性規(guī)劃;Matlab;Lingo
中圖分類號: G642;O141.4-4 文獻標識碼: A 文章編號: 2095-2457(2019)17-0094-003
DOI:10.19694/j.cnki.issn2095-2457.2019.17.045
Analysis and Comparison of Solving Process of Linear Programming Based on Matlab and Lingo
YI Xin
(Northeastern University at Qinhuangdao
【Abstract】In daily life, in order to maximize the benefits, often need to use the existing resource conditions for scientific and appropriate arrangements, which is inseparable from mathematical programming, namely from the basic applied mathematics perspective to analyze the problem, according to the number to judge the best plan.Among them, the most important one is mathematical modeling, which is a kind of optimal management model. The most common one is to construct by means of linear programming. Matlab and Lingo, both of which can be used for numerical calculation and analysis, have important applications in solving linear programming problems.This paper mainly analyzes and discusses the problems of linear programming and nonlinear programming, and USES Matlab and Lingo to solve them, analyzes the calculation process of the two software, and makes a summary.
【Key words】Mathematical modeling; Nonlinear programming; Matlab; Lingo
1 緒論
對于普通的數(shù)學規(guī)劃問題,其基本理論已經(jīng)較為完善,可以使用多種手段進行最佳方案的求解,其中利用計算機進行則最為簡便,在保證準確率的同時,可以將人力解放出來,而Matlab和Lingo作為用于數(shù)學分析計算的專業(yè)軟件,在進行線性規(guī)劃問題求解時,都極為簡潔方便,在現(xiàn)代社會已經(jīng)都被廣泛用于工程建設(shè)、金融預(yù)算、智慧城市、信號處理、教育等等領(lǐng)域[1-2],就線性規(guī)劃問題,將進行詳細的分析比。
1.1 線性規(guī)劃問題
線性規(guī)劃問題是目標函數(shù)和約束條件均為線性函數(shù)的問題,利用線性規(guī)劃可以解決很多問題。如:在不違反一定資源限制下,組織安排生產(chǎn),獲得最好的經(jīng)濟效益(產(chǎn)量最多、利潤最大、效用最高);也可以在滿足一定需求條件下,進行合理配置,使成本最小。同時還可以在任務(wù)或目標確定后,統(tǒng)籌兼顧,合理安排,用最少的資源(如資金、設(shè)備、原材料、人工、時間等)去完成任務(wù)[3]。
1.2 結(jié)構(gòu)安排
本文主要研究是對兩款軟件Matlab和Lingo就線性規(guī)劃問題求解過程進行分析對比,結(jié)構(gòu)安排如下:
第一部分為緒論,主要包括線性規(guī)劃問題簡介,應(yīng)用計算機軟件進行處理的優(yōu)勢和應(yīng)用。
第二部分為利用Matlab和Lingo進行求解的分析對比。
第三部分為結(jié)論,就此次使用Matlab和Lingo解決線性規(guī)劃問題的進行總結(jié),以及對兩款軟件應(yīng)用優(yōu)勢領(lǐng)域進行延伸分析。
2 線性規(guī)劃問題求解
一般的線性規(guī)劃問題標準式為:
max(min)f=cTX
s.t.AX≤baeqX≤beqlb≤X≤ub
線性規(guī)劃關(guān)于解可能存在四種情況:
(1)無解,即不存在滿足條件的解;
(2)有唯一解,即在眾多的可行解中有唯一的最優(yōu)解;
(3)無窮解,即在可行解中的無窮解都可以作為最優(yōu)解;
(4)有解,有可行解,但由于值無界所以沒有最優(yōu)解。
一般的求解思路是先求一個可行解,然后檢驗,如若不是,則用迭代的方法找到更優(yōu)解,反復(fù)有限次迭代,直至找到最優(yōu)解或者判定無解[4]。
2.1 求線性規(guī)劃最小最優(yōu)解
例如求
minf=5x1+9x2-3x3+8x4-7x5;
s.t.-5x1-4x2-6x3-x5≥-6-2x1+3x2-x3+x4-3x5≤70≤xi≤21
2.1.1 基于Matlab求線性規(guī)劃最優(yōu)解
在Matlab中求線性規(guī)劃問題,可直接調(diào)用linprog函數(shù),其原理即為簡單的迭代檢驗,偽代碼格式如下:
[x,fval]=linprog(f,A,b,aeq,beq,lb,ub)
[x,fval]=linprog(f,A,b,aeq,beq,lb,ub,x0)
A:約束條件矩陣b:目標函數(shù)的系數(shù)向量c:約束條件最右邊的數(shù)值向量
lb、ub:解向量的下、上界 ?x0:初始解向量
可在Matlab中輸入代碼:
>>f=[5 9 -3 8 -7];
>>A=[-2 3 -1 1 -3;5 4 6 0 1];
>>b=[7 6];
>>lb=[0 0 0 0 0];
>>ub=[21 21 21 21 21];
>>[x,fval]=linprog(f , A, b, [ ], [ ], lb, ub)
Optimization terminated.
則會輸出結(jié)果為:
x=0.0000
0.0000
0.0000
0.0000
6.0000
fval==-42.0000
即在該規(guī)劃問題上x1=x2=x3=x4=0,x5=6時符合取值要求,且取最小值-42.
2.1.2 基于Lingo求線性規(guī)劃最優(yōu)解
Lingo的原理也是迭代取值檢驗法,在Lingo軟件中需要先輸入一個模型[5],以MIN開始,按線性規(guī)劃問題的自然形式輸入即可,在模型窗口輸入以下代碼:
min=5*x1+9*x2-3*x3+8*x4-7*x5;
5*x1+4*x2+6*x3+x5<=6;
-2*x1+3*x2-x3-x4-3*x5<=7;
@bnd(0,x,21);
代碼中:@bnd指的是x的取值范圍。
點擊Solve即可得到代碼運行結(jié)果如圖1。
其中很明顯看到當x1=x2=x3=x4=0,x5=6時可以取得最優(yōu)值-42,同時可以看到一些其它的變量值,得到總變量為6,非線性變量為0,也可以看到松弛或盈余量等等[5]。
2.2 求線性規(guī)劃最大最優(yōu)解
例如:max f=3x1+3x2
2.2.1 基于Matlab求線性規(guī)劃最優(yōu)解
在Matlab中沒有求最大值函數(shù),因此需要先將目標轉(zhuǎn)化為最小值問題:
然后進行轉(zhuǎn)換即可。
Matlab中代碼設(shè)計如下:
>>f=[-3,-7];
>>A=[1,0;0,1;1,2];
>>b=[7,6,17];
>>lb=[0,0];
>>[x,fval]=linprog(f, A, b,[ ],[ ], lb)
Optimization terminated.
可得到x=5.0000 ? ? ?fval=-57.0000
6.0000
可以發(fā)現(xiàn)x1和x2取值都符合要求,即maxf=fval*(-1),則maxf=57.0000。
2.2.2 基于Lingo求線性規(guī)劃最優(yōu)解
在Lingo中先輸入模型,然后以max輸入即可,在模型窗口中設(shè)計的代碼如下:
max=3*x1+7*x2;
x1<=7;
x2<=6;
x1+2*x2<=17;
其代碼運行結(jié)果如圖2。
可以得到最優(yōu)解值結(jié)果當x1=5;x2=6時取得最優(yōu)值(最大值)為57。
在圖中其中可以得到總變量為2,非線性變量為0,還有經(jīng)過迭代后松弛或盈余的量。
3 結(jié)論
通過以上的基于兩種軟件的求最優(yōu)值的過程對比可以得出,不管是使用Matlab還是Lingo,兩種方法一樣,但求解的程序形式有著較大的差異。
Matlab中,需要用到數(shù)組(矩陣)的知識點,所以可能需要前期的學習過程作為鋪墊。同時,也可以明顯知道,Matlab中的程序接口是已經(jīng)寫好的,即linprog的使用格式是固定的,就線性規(guī)劃而言,在日常生活中,需要使用的整數(shù)性的線性規(guī)劃時就會受到一定的限制,一般的情況下,整數(shù)情況可能較少,所以關(guān)于小數(shù)化整數(shù)的過程需要自己進行編譯,因此,這一過程可能對初學者很不友善,受到一定的制約。但Matlab在進行規(guī)模龐大的變量運算時具有很大的優(yōu)勢,在非線性規(guī)劃時較為方便,同時它在數(shù)據(jù)可視化方面也有很大應(yīng)用,也支持其他的如C、JAVA等語言。
相比較而言,利用Lingo進行線性規(guī)劃整體使用體驗較為流暢,中間不涉及其他的知識框架,可以直接按照原始的書寫習慣進行,符合大部分人的習慣,較為容易掌握,實用性比較強,且在使用中可以與excel表格進行對接調(diào)用,但整個框架較為嚴格,大于等于與大于以及小于等于與小于等價,忽略掉了邊界的影響,同時在程序中每個變量、約束條件都要輸入,由此當變量很多是就會造成一定難度。
拿本文的規(guī)劃問題求解的過程來說,Matlab需要將最大值的求解轉(zhuǎn)變?yōu)樽钚≈抵笤偾蠼?,而Lingo則不需要,可以直接求,這一方面Lingo比Matlab方便且易懂。
綜上所述,Matlab在各自領(lǐng)域都有一定優(yōu)勢,對于初學者而言,比較推崇使用Lingo進行線性規(guī)劃,而入門后,關(guān)于各種問題的求解Matlab是更好選擇。
【參考文獻】
[1]燕浩.淺談高中數(shù)學線性規(guī)劃問題的軟件實現(xiàn)——以Lingo環(huán)境下多決策變量為例[J].數(shù)學學習與研究:教研版, 2015(23):143-144.
[2]盛仲飆.基于Matlab的線性規(guī)劃問題求解[J].計算機與數(shù)字工程,2012,40(10).
[3]揭逸飛.運用MATLAB軟件求解高中數(shù)學中的線性和非線性規(guī)劃問題[J].科技視界,2016(21):164-164.
[4]龍松.大學數(shù)學MATLAB應(yīng)用教程[M].武漢:武漢大學出版社,2014.7.
[5]吳拿達.基于Lingo軟件的“線性規(guī)劃”應(yīng)用性教學[J]. 科教文匯,2017(32).