劉 森,劉 琳
(1. 黑龍江省水利水電勘測(cè)設(shè)計(jì)研究院,哈爾濱150080;2. 山東省泗水縣水利局,山東 泗水273200)
中國(guó)地域遼闊、河流眾多。洪澇災(zāi)害自古以來不僅對(duì)人民生活的安全造成嚴(yán)重威脅,而且對(duì)于沿線農(nóng)牧、漁業(yè)等生產(chǎn)造成危害,致使人民生命安全、財(cái)產(chǎn)得不到保障。人們對(duì)待洪澇災(zāi)害最有利的方法之一便是修建堤防工程。
堤防工程較樞紐、除險(xiǎn)加固、灌區(qū)等工程最明顯的特點(diǎn)便是沿線較長(zhǎng),工程呈線性分布。堤防工程的料場(chǎng)規(guī)劃,尤其是沿線集中料場(chǎng),一直是施工組織設(shè)計(jì)中的重點(diǎn)和難點(diǎn)。目前部分設(shè)計(jì)師對(duì)于堤防工程沿線集中料場(chǎng)的規(guī)劃仍然是采用經(jīng)驗(yàn)估算的方法。這種方法對(duì)于沿線較短的堤防或者料場(chǎng)單一的情況還能受用,但是對(duì)于沿線較長(zhǎng)和料場(chǎng)較多的情況就大不一樣。這不僅耗費(fèi)大量時(shí)間、精力,而且對(duì)于計(jì)算的精度不能保證,對(duì)于投資控制不能給予更好的指導(dǎo),造成資源的浪費(fèi)和能源的消耗。目前解決堤防工程料場(chǎng)規(guī)劃最有效的方法之一就是線性規(guī)劃模型。
對(duì)于沿線較短和料場(chǎng)較少的情況,目前解法較多,比如單純形法,Matlab 軟件,Excel 自帶的規(guī)劃求解等。然而這些方法,對(duì)于沿線較長(zhǎng)和料場(chǎng)較多的情況,由于決策變量較多(一般約有上百個(gè)),上述方法顯然比較困難[1-2]。
文章討論的主要問題就是針對(duì)沿線較長(zhǎng)并且沿線集中料場(chǎng)較多的堤防的線性規(guī)劃模型求解,即利用Matlab 自帶的Excel-link 宏將數(shù)據(jù)輸入至Matlab程序,然后利用Matlab 程序的linprog 函數(shù)來求解。本文所用的方法仍然適用于堤防工程沿線較短和料場(chǎng)較少情況。
線性規(guī)劃理論與方法目前已比較成熟,其一般形式為:
其中,式(1)為目標(biāo)函數(shù),有max 和min 兩種形式;式(2)稱為約束條件,它們表示問題受到各種約束,一般有三種形式:“≥”、“≤”(這兩種約束又稱不等式約束)或“等于”(又稱等式約束);式(3)稱為非負(fù)約束,很多情況下決策變量都蘊(yùn)含了這個(gè)假設(shè)。
線性規(guī)劃的模型還可以表示為下列矩陣形式:
在上述模型中,x 為決策變量;c 為目標(biāo)函數(shù)系數(shù)向量或價(jià)值系數(shù)向量或費(fèi)用系數(shù)向量;b 為約束右端常數(shù)向量或簡(jiǎn)稱右端項(xiàng),也稱資源常數(shù)向量;A 為約束系數(shù)矩陣或技術(shù)系數(shù)矩陣。
Mat lab 是近來年得到快速發(fā)展的數(shù)學(xué)軟件,它將高性能的數(shù)值計(jì)算和可視化集成在一起,并提供了大量的內(nèi)置函數(shù),被廣泛的應(yīng)用于科學(xué)計(jì)算、控制系統(tǒng)、信息處理等領(lǐng)域的分析、仿真和設(shè)計(jì)工作[3]。
文章所用到的函數(shù)為Mat lab 自帶的linprog 函數(shù),其數(shù)學(xué)模型為:
式中:f 為目標(biāo)函數(shù);A 為不等式約束的系數(shù)矩陣;b為不等數(shù)約束的右端項(xiàng);Aeq 為等數(shù)約束的系數(shù)矩陣;beq 為等式約束的右端項(xiàng);lb 為變量的下界;ub為變量的上界。
Excel-link 宏是Matlab 軟件提供的能與Excel互動(dòng)操作的宏,它使得數(shù)據(jù)在Mat lab 和excel 之間隨意交換,以及在Excel 下調(diào)用Mat lab 的函數(shù)[4]。
若Excel 程序未加載Excel-link 宏,可在Excel工具上→加載宏→瀏覽(Mat lab 的安裝路徑)→toolbox 文件夾→exlink 文件夾→excllink. xla 文件(打開),即可使用此宏。如圖1 所示:
在Excel 工具條中出現(xiàn)startmatlab、putmatrix、getmatrix、evalstring,說明Excel-link 說明加載成功。
putmatrix:向Mat lab 中輸入數(shù)據(jù);getmatrix:從Mat lab 中獲取數(shù)據(jù)。文章主要用到這兩個(gè)命令。
黑龍江省某堤防填筑工程,沿線長(zhǎng)110 km,堤防每5 km分一段,共22 段各段需土量見表1。沿線共有13個(gè)料場(chǎng),編號(hào)為1 ~13,儲(chǔ)量見表2。各個(gè)料場(chǎng)到各個(gè)堤防段的平均運(yùn)距見表3。
本項(xiàng)目決策變量較多為22 ×13 =284個(gè),命名采用堤防段(行)與料場(chǎng)(列)編號(hào)進(jìn)行。比如堤防編號(hào)01 與料場(chǎng)編號(hào)01,表示從料場(chǎng)01 向堤防01 的供料量,用x0101表示,依此類推,x0102表示從料場(chǎng)02號(hào)向堤防段01 號(hào)的供料量。
根據(jù)模型1,建立數(shù)學(xué)模型如下:
表1 堤防沿線分段需土量 萬m3
為了方便Mat lab 計(jì)算,改用模型3 如下:
式中各含義與本文第三節(jié)“Matlab 程序簡(jiǎn)介”相同。
由于系數(shù)矩陣A 與Aeq 自變量個(gè)數(shù)較多為284個(gè),而excel2003 版本以前,表格行數(shù)僅有256 行,因此數(shù)據(jù)在輸入Mat lab 之前,需要將A 矩陣、Aeq 矩陣轉(zhuǎn)置,等輸入至Mat lab 之后再進(jìn)行轉(zhuǎn)置運(yùn)算即可。A 矩陣與Aeq 矩陣變?yōu)?
首先選中要輸入Mat lab 的數(shù)據(jù)源,如圖2 所示。然后點(diǎn)擊命令putmatrix,會(huì)彈出輸入至Mat lab變量名稱對(duì)話框,如圖3 所示,可以鍵入任意名稱,為了便于理解和下一步運(yùn)算,建議輸入A。接下來分別輸入Aeq,f,b,beq,lb 至Mat lab。
圖2 AT在excel 中的部分?jǐn)?shù)據(jù)源
圖3 數(shù)據(jù)輸入Mat lab 數(shù)據(jù)的對(duì)話框
在Mat lab 命令窗口中鍵入[x,fval,exitflag,output,lambda]=linprog(f,A,b,Aeq,beq,lb,ub)
運(yùn)算結(jié)果為:整理后數(shù)據(jù)見表4。
圖1 加載宏示意圖
表2 料場(chǎng)儲(chǔ)量表 萬m3
表3 各個(gè)料場(chǎng)至堤防段的平均運(yùn)距 km
表4 運(yùn)算結(jié)果整理數(shù)據(jù)列表 萬m3
1)堤防工程沿線較長(zhǎng),線性規(guī)劃模型能很好的解決多決策變量下的堤防工程料場(chǎng)規(guī)劃問題,利用現(xiàn)代計(jì)算機(jī)運(yùn)算速度快的特點(diǎn),只要給Mat lab 給予準(zhǔn)確的模型,就能很快的得出運(yùn)算結(jié)果。
2)利用Mat lab 與Excel 聯(lián)合求解多決策變量,看似步驟繁瑣,但是利用Excel 強(qiáng)大的表格處理功能(本文沒有介紹)能很快的將數(shù)據(jù)輸入Excel 表格中,從而很容易將數(shù)據(jù)輸入至Mat lab 程序中,思路清晰,便于理解,運(yùn)算結(jié)果能較好的指導(dǎo)施工。
3)由表4 可以看出,運(yùn)算結(jié)果一目了然,非常實(shí)用,對(duì)于更長(zhǎng)堤防或者更多沿線料場(chǎng)的求解,效果更是明顯。
[1]吳祈宗.運(yùn)籌學(xué)與最優(yōu)化方法[M]. 北京:機(jī)械工業(yè)出版社,2003:8.
[2]焦樹鋒. 線性規(guī)劃的Excel 解法[J]. 濱州職業(yè)學(xué)院學(xué)報(bào),2007(12):12 -16.
[3]王家文.Matlab7.0 編程基礎(chǔ)[M]. 北京:機(jī)械工業(yè)出版社,2005:7.
[4]吳祈宗.運(yùn)籌學(xué)與最優(yōu)化MAT LAB 編程[M]. 北京:機(jī)械工業(yè)出版社,2003:8.