本人開發了壹個“混合(非)線性規劃軟件包”,其說明如下:(恕Word中有些顯示不出)
本軟件包的主程序有兩個,壹個是處理混合的線性規劃,壹個是處理非線性的。
1. 混合的線性規劃(MixIntDiscLineProg.m)
2.混合的非線性規劃問題(MixIntDiscNLProg)
其中 為自變量, 為向量 的上下界, 分別為線性約束條件中等式約束條件的系數矩陣和常數項, 分別為線性約束條件中不等式約束條件的系數矩陣和常數項, 和 分別為非線性約束條件中等式約束條件和不等式約束條件。 為離散非整數變量,取值範圍為 , 為整數變量,其余為連續變量。
我們可以用壹個xstatus 的數組 來設定離散或者整數變量的狀態,其中xstatus(1,:) 是自變量中離散或整數變量的下標;xstatus(2,:) 中的每個元素取值為1或2,若為1則表示 中對應列的自變量為整數型變量,若為2則表示 中對應列的變量為離散變量; 是 中對應列的離散變量的取值範圍的序號,若變量為整數則為零。於是 就可以表示為:
茲舉4個例子以示說明,其余參見後面的說明。
例1 . 所有變量都是整數.
兩個程序中分別修改
isAllInteger=1;
其余離散變量取值範圍及 不必設置。
例2 . x2,x4,x7是整數,其余都是連續變量。
兩個程序中分別修改
isAllInteger=0;
修改如下:
主程序中凡調用“checkIntDisc“的格式都變為“checkIntDisc(...,xstatus)”
例3 . x2,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環境下,使用“File/set path…”添加路徑“\...” 根據妳的實際問題,修改壹系列的參數和文件如下6步1) the parameters are given by the requirement of the function 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]; % discrete requirement of x(1),x(2),x(3)
D2=[2.5,3,4,6,8,10,12.2,16.6]; % discrete requirement
若需要,修改“checkIntDisc(...,xstatus,D1)” to “checkIntDisc(...,xstatus,D1,..,Dm)“
6) 修改 的數組
欲知詳情:可發:spjin@whut.edu.cn