孫建英
(青島理工大學(xué) 琴島學(xué)院,山東 青島266106)
整數(shù)規(guī)劃模型是數(shù)學(xué)建模中一種常見的很重要的模型,它在汽車生產(chǎn)、鋼管下料、指派問題及高校學(xué)生選課策略[1]等方面都有廣泛的應(yīng)用,對于一般的整數(shù)規(guī)劃模型,可以利用Lingo 軟件求解,但是掌握起來比較困難.隨著Matlab 版本的提高,可以直接調(diào)用Matlab 優(yōu)化工具箱(Optimization Toolbox)中的bintprog 或者intlinrog 函數(shù)求解0-1整數(shù)規(guī)劃問題,本文通過投資項目的選擇問題進(jìn)行仿真實(shí)驗.
0-1 整數(shù)規(guī)劃的數(shù)學(xué)模型的一般形式為:
亦可寫成矩陣形式
為了能直接調(diào)用Matlab 優(yōu)化工具箱中的函數(shù),0-1 整數(shù)規(guī)劃模型要改為如下標(biāo)準(zhǔn)形式:
Matlab 優(yōu)化工具箱中可以用來求解0-1 整數(shù)規(guī)劃問題的函數(shù)有兩個bintprog 或intlinprog,調(diào)用格式如下:
1)函數(shù)bintprog 的調(diào)用格式
返回的是0-1 整數(shù)決策變量和相應(yīng)的最小目標(biāo)函數(shù)值,f 是由目標(biāo)函數(shù)的系數(shù)構(gòu)成的向量,A,b分別是不等式約束的系數(shù)矩陣和右端項,Aeq,beq分別是等式約束的系數(shù)矩陣和右端項,X0是整數(shù)變量的初始值,options 是控制規(guī)劃過程的參數(shù)系列,調(diào)用時要注意參數(shù)的位置,如果缺少的話,應(yīng)該用[]補(bǔ)位.
2)函數(shù)intlinprog 的調(diào)用格式
intcon 表示整數(shù)決策變量的位置,lb,ub 分別表示決策變量的上下限.其它參數(shù)的意義不變.
兩個函數(shù)雖然都能求解0-1 整數(shù)規(guī)劃問題,但是在具體應(yīng)用過程中發(fā)現(xiàn)有三個需要注意的問題,一是對Matlab 版本的要求,前者適用于Matlab7.0 以上,后者適用于Matlab2014A 以上版本;二是對整數(shù)變量的個數(shù)有要求,當(dāng)變量的個數(shù)比較多時,像文獻(xiàn)[2]中需要100*1000 個整數(shù)變量的時候,只能用后者求解;三是intlinprog 函數(shù)也可以求解一般的整數(shù)規(guī)劃問題,但是bintprog 函數(shù)不能.考慮到以上種種,本文實(shí)例采用intlinprog 函數(shù)為例.
某單位在年初有15 萬的資金,有5 個可以投資的項目,每個項目需要的投資額和期望收益如表1,問應(yīng)投資哪幾個項目,期望收益才能保證最大?
表1
(1)甲、丙、戊三個項目需且僅需選擇一項;
(2)乙和丁兩個項目需且僅需選擇一項;
(3)丙和丁項目密切關(guān)聯(lián),必須先實(shí)施丁之后才能實(shí)施丙,
設(shè)決策變量x1,x2,x3,x4,x5分別表示甲、乙、丙、丁、戊項目,并且規(guī)定xj=1 表示j 項目被選中,xj=0 表示j 項目不被選中,(j=1,2,3,4,5),Z 表示期望收益
目標(biāo)函數(shù)為最大期望收益:maxZ=10x1+8x2+7x3+6x4+9x5,為了能直接調(diào)用intlinprog 命令,把目標(biāo)函數(shù)轉(zhuǎn)化為min(-Z)=-10x1-8x2-7x3-6x4-9x5
約束條件有兩類,一類是資金總額的限制;一類是項目之間互斥或者先后關(guān)系的限制
Matlab 程序如下:
故只需選擇甲項目和乙項目,期望收益為18萬元.
intlinprog 命令也可以求解一般的整數(shù)線性規(guī)劃模型,只要把上述程序中的參數(shù)ub 也就是整數(shù)決策變量的上限不限制為1 就可以了,操作起來非常簡單.并且該命令也可以求解混合整數(shù)線性規(guī)劃問題,這時候需要用intcon 來指明哪一個決策變量是整數(shù)即可.
[1] 姜啟源,謝金星,葉俊.數(shù)學(xué)模型(第四版)[M].北京:高等教育出版社,2011.
[2] 王穎,高德宏,施恒.DVD 租賃優(yōu)化方案[J].工程數(shù)學(xué)學(xué)報,2005,22(7):76-84.