應該是混合整數規劃問題。目前matlab中還沒有解決這個問題的相關函數。
我開發了壹個“混合(非)線性規劃軟件包”,描述如下:(很抱歉有些不能在Word中顯示)
這個軟件包主要有兩個程序,壹個是處理混合線性規劃,壹個是處理非線性。
1.混合線性規劃
2.混合非線性規劃問題
其中自變量為向量的上下界,分別為線性約束條件的系數矩陣和常數項,線性約束條件中不等式約束條件的系數矩陣和常數項,非線性約束條件中等式約束條件和不等式約束條件。是離散的非整數變量,取值範圍為,是整數變量,其余為連續變量。
我們可以用xstatus的數組來設置離散或整數變量的狀態,其中xstatus(1,:)是自變量中離散或整數變量的下標;xstatus(2,:)中每個元素的值是1或2。如果是1,則xstatus中對應列的自變量是整數變量,如果是2,則xstatus中對應列的變量是離散變量。對應列中離散變量範圍的序列號,如果變量是整數,則該值為零。所以可以表示為:
這裏舉四個例子來說明,其余的後面再講。
示例1。所有變量都是整數。
在兩個程序中分別修改它們。
isAllInteger = 1;
沒有必要設置其他離散變量的範圍。
例2。X2、X4、X7為整數,其余為連續變量。
在兩個程序中分別修改它們。
isAllInteger = 0;
修改如下:
在主程序中調用“checkIntDisc”的格式變為“checkIntDisc(...,xstatus)”。
例3。x2,x4,X4為整數,x3,x7,x9取自D1集合,其余為連續變量。
在兩個程序中分別修改它們。
isAllInteger = 0;
修改如下:
在主程序中調用“checkIntDisc”的格式變為“checkintdisc(...,xstatus,d1)”。
例4。x2、x4為整數,x3、x9取自D1集合,x7取D2,其余為連續變量。
在兩個程序中分別修改它們。
isAllInteger = 0;
修改如下:
在主程序中調用“checkIntDisc”的格式變為“checkintdisc(...,xstatus,d1,d2)”。
使用兩個程序的具體步驟:
添加路徑“\ ...”使用“文件/設置路徑…”在Matlab環境下。
根據妳的實際問題,按照以下六個步驟修改壹系列參數和文件。
1)參數由函數fmincom.m的要求給出
a,B,Aeq,Beq,LB,UB,X0
2) 'obj_fun.m '是目標函數源文件。
3) 'nl_con_fun.m '是非線性約束(不包括整數或離散需求)的源文件。
4)設置所有組件是否為整數要求。
isAllInteger = 1;所有分量都是整數。
IsAllInteger=0並非所有的分量都是整數。
5)修改離散變量的範圍參數D1—Dm。
D1=[2.5,3,4,6,8,10,12,16];%離散需求x(1),x(2),x(3)
D2=[2.5,3,4,6,8,10,12.2,16.6];離散需求百分比
如有必要,修改“checkintdisc(...,xstatus,d1)"到" checkintdisc(...,xstatus,d1,..,dm)”。
6)修改後的數組
詳情:法法:spjin@whut.edu.cn。