陳諾凡
(福州第二中學,福建 福州 350001)
線性規劃問題是指在線性約束條件下求線性目標函數的最值問題。利用平面區域只能求解含有兩個變量的線性規劃模型,當線性規劃模型包含的變量多于兩個時,就需要借助各類數學計算軟件來高效求解。復雜的線性規劃模型可以用哪些計算軟件來求解?各種軟件的應用又各有哪些優勢?為回答這些問題,以下對三種數學計算軟件在線性規劃模型求解中的應用進行研究,并結合實例加以分析。
求解線性規劃問題建立的數學模型簡稱線性規劃模型。求解線性規劃問題一般步驟是:把實際問題轉化為線性規劃模型→求解數學模型→求解結果的解釋與應用。線性規劃模型由目標函數、約束條件、決策變量三要素構成。在建立線性規劃模型時,首先要假設決策變量,并將目標函數與約束條件分別表示為決策變量的線性函數。模型求解結果中決策變量的取值即為線性規劃問題的最優解,亦稱為最優決策方案。
由于生產、生活中遇到的多數線性規劃問題對應的模型包含的決策變量個數一般較多,當決策變量個數多于兩個,即目標函數與約束條件為n(n≧3)元函數時,最簡單、便捷且實用的方法莫過于利用數學計算軟件進行求解的方法。當然,能夠簡捷地利用數學軟件求解線性規劃模型的前提是:理解線性規劃模型構造、熟悉數學軟件的特點。求解線性規劃模型的計算軟件比較多,文章主要重點對Excel規劃求解工具、Matlab軟件、Lingo軟件等的使用特點進行歸納與比較,以便選擇使用。
Excel可以進行各種數據的處理、統計分析和輔助決策[1],加載“規劃求解”功能項的Excel能夠簡單、方便地用于較小規模線性規劃問題的求解。
例1.營養學家指出,成人良好的日常飲食應該每天至少提供0.075千克的碳水化合物,0.06千克的蛋白質,0.06千克的脂肪。現有兩種食物A、B可提供此三種物質,每千克食物A、B分別含有碳水化合物、蛋白質、脂肪的數量及每千克食物A、B的分別費用如表1所示。為了滿足營養學家指出的飲食要求,同時使花費最低,成人每天同時食用食物A和食物B各為多少?

表1 食物A、B物質含量及費用數據表
解:設成人每天食用食物A、B的數量分別為x1千克,x2千克,根據題意建立如下線性規劃模型 (1):

利用Excel2010求解模型(1)的具體過程如下述表2、圖1所示。

表2 例1求解數據表及項目設定

圖1 規劃求解過程參數及設定
根據模型(1),在表2、圖1中設置好“目標”“可變單元格”“約束”,且在圖1中選定“使無約束變量為非負數”及“單純線性規劃”后,點“求解”即可得求解結果:決策變量值x1=0.1429,x2=0.5714;目標函數值z=16.0000。從而得到該線性規劃問題的最優解與最優值,即成人食用食物A、B分別為0.143千克、0.571千克,相應的最低花費為16元。
利用Excel“規劃求解”工具求解線性規劃模型盡管步驟較多,但讀者在熟悉了Excel規劃求解過程后,會感受到其友好的界面,較易理解并掌握其操作過程,因而Excel規劃求解工具是求解線性規劃問題較常用的辦法。但從表2、圖1也發現,當決策變量的個數較多或者約束條件的個數較多時,求解過程要輸入的數據等各類信息量比較大,且在Excel表中占用的空間較大,給求解過程的操作造成一定麻煩。因此,在線性規劃模型的規模較大(變量較多或約束條件較多)時,考慮利用其他軟件求解模型。
Matlab是一種用于科學計算的、高效率的高級計算機編程語言[2],是求解線性規劃模型常用、高效的計算軟件。利用Matlab求解線性規劃模型時,規定了線性規劃模型的標準形式,設定了特定的程序命令。Matlab運用中規定的線性規劃模型的標準形式為[3]:

其中,f為目標函數中價值系數組成的列向量,也稱價值向量;x為決策變量組成的列向量;A是約束不等式的系數矩陣,Aeq是約束等式的系數矩陣;b是約束不等式的資源向量,beq是約束等式的資源向量(為列向量);lb、ub分別為決策變量上、下界組成的列向量。
Matlab中求解線性規劃模型的命令為:
[x,f val]=linprog(f,A,b,Aeq,beq,lb,ub)
在具體的線性規劃問題求解時,只要根據模型中目標函數與約束條件的系數與常數,對程序中的數字進行相應的更改即可。
例如,求解例1所示線性規劃問題的Matlab程序如下:

其中[]表示所求解的模型無對應的限制項。
由此程序解得模型(1)最優解為:x1=0.1429,x2=0.5714;對應的最優值z=16.0000。因此,例1的線性規劃問題的最優決策方案是:成人每天食用食物A、B的數量分別為0.1429千克,0.5714千克;相應的最少費用為16元。
上述求解例1的程序是求解線性規劃問題的通用程序,在其它具體的線性規劃模型求解時只需把各矩陣(向量)的值進行重新輸入即可。由上述程序可知:求解線性規劃問題的Matlab程序可讀性強,直觀明了,且占用空間少,此優點使其更適合于求解規模較大(決策變量多或約束條件多)的線性規劃問題;若出現程序錯誤,會準確顯示錯誤的位置,利于程序錯誤的糾正或模型錯誤的糾正,此特點也更有利于其運用于大規模線性規劃問題的求解;在利用Matlab進行計算時,可以創建新文件或打開一個已存在的M文件,利用文件編輯器對文件進行編輯和修改,在已有的M文件上進行編輯和修改可使每次輸入的工作量大大減少,這也是利用Matlab求解線性規劃模型的突出優勢。
(三)利用Lingo軟件解線性規劃模型
Lingo是一套專門求解最優化問題的軟件包[2]。Lingo用于求解線性規劃這一類最優化問題時執行速度快;Lingo含有與其它數據文件的接口,因此在輸入、求解和分析大規模最優化問題時較為方便;Lingo本身就是最優化問題的建模語言,軟件可以將模型建立語言與求解引擎整合起來闡述和求解線性規劃等最優化模型,很多時候均是“模型即程序”,因此利用Lingo建立和求解線性規劃模型具有快捷、簡單、高效等特點[2]。
由于Lingo本身就是線性規劃問題等最優化問題的建模語言,因此,利用Lingo編寫線性規劃模型仍包含目標函數、決策變量、約束條件三個要素。例如,求解線性規劃模型(1)的Lingo程序命令(為后續比較研究,此處稱其為Lingo程序1(簡易程序)如下:

在Lingo中沒有嚴格的不等號,比如“>”仍表示大于等于。上述模型(1)的Lingo程序1的輸入是一種比較直接的輸入方式,基本上和模型的書寫一樣。如果線性規劃模型的規模不大(決策變量較少且約束條件較少),則對應的程序不大,這時使用程序1的輸入方式最簡便、直觀。但同時,從Lingo程序1觀察可知,這種方式的程序輸入需要將每個變量列出,如果模型規模較大,對應的程序較大,則這種方式的輸入就很麻煩,這時可利用改進的Lingo程序即如下列所示的Lingo程序2來求解線性規劃模型(1)。程序2是采用矩陣生成器編寫程序[3]。

由Lingo程序1、程序2均可得到線性規劃模型(1)的最優解為:x1=0.1429,x2=0.5714;最優值z=16.0000.
Lingo程序2將不等式約束全部轉化為小于等于約束,從而可以在一個循環語句中實現。如果程序中還有等式約束,可以再引入一個循環語句來控制。Lingo程序2模式用來處理大規模線性規劃模型輸入特別方便且求解速度快。
求解線性規劃模型所運用的Excel規劃求解工具、Matlab軟件、Lingo軟件等各有特點,適用性不同。總體來講:(1)Excel規劃求解工具、Lingo程序1模式表達直觀、可讀性較強、便于理解與應用,求解過程操作方便、直接,適合于規模較小(決策變量個數較少且約束條件個數較少)的線性規劃模型,同時也是初學運用數學軟件的讀者較易掌握的方法;(2)Matlab軟件、Lingo軟件的程序2模式含有與其它數據文件的接口,在輸入、求解和分析大規模線性規劃問題方面較為便捷;(3)Matlab軟件、Lingo軟件在點擊運行后如果輸入有錯會彈出錯誤提示,可根據提示對程序或模型做針對性的修改,對高效求解與模型的修正和完善非常有利;(4)Matlab軟件的安裝目前對于很多非專業使用人士而言有一定困難,不同Matlab版本在不同配置的計算機上的安裝操作也不同,相對Matlab軟件而言,具有免安裝版本的Lingo軟件使用更為便捷。
在生產、生活實際中遇到的線性規劃問題,是否能夠找到恰當的數學軟件高效地求解相應的線性規劃模型從很大程度上決定了線性規劃理論是否能得到廣泛應用。研究數學計算軟件在求解線性規劃模型中的多用與妙用,為線性規劃理論的廣泛應用提供了便捷、高效計算的保障。在理解線性規劃等最優化決策問題理論知識的基礎上,多了解各種數學計算軟件的應用優勢,可以更巧妙地運用好數學計算軟件,方便地解決生產、生活中的線性規劃等各種最優決策問題,使得數學知識的應用范圍越來越廣。
[1]黃少玲.探析Excel函數在數據處理中的應用[J].電腦編程技巧與維護,2017(5).
[2]汪曉銀,周保平,侯志敏.數學軟件與數學實驗(第三版)[M].北京:科學出版社,2015:1,34,36.
[3]司守奎,孫璽菁.數學建模算法與應用[M].北京:國防工業出版社,2016:2,3.