MATLAB编程0-1规划问题
MATLAB编程线性规划问题
第二章0-1规划
MATLAB的0-1规划函数bintprog是针对下述0-1规划:
min z = f * x
s.t A* x _ b
(2.1)aeq* x = beq
x 二[冷X2, |l(X n],人=0or1,i =12l()n
解0-1规划(2.1 )的0-1规划函数bintprog表述为
[x, fv, exitflag, output]= bin tprog(f,A,b,aeq, beq)(2.2)输入部分:
f为目标函数,实为目标函数的系数。
A为(2.1)中的不等式约束矩阵
b为(2.1)中的不等式约束向量
aeq为(2.1)中的等式约束矩阵
beq(2.1)中的等式约束向量
输出部分:
x为最优解fval为最优值
exitflag为输出标志exitflag=1,有最优解exitflag=0,迭代次数超过设定次数
exitflag==-2,约束区域不可行exitflag=-3,问题无解
output,表明算法和迭代情况
如果我们不需要了解迭代情况和存储情况,可将0-1规划函数bintprog写成
[x, fv, ex]= lin prog(f,A,b,aeq, beq)(2.3)在函数bintprog中,输入或输出元素的符号可以变更,如( 2.3)中ex仍为输出标志,但元素的符号
位置不能变更。在输出部分,如有缺者,可用[]号代替。
函数bintprog的使用要点与函数linprog的使用要点相同。
函数是为求目标函数的最小值而设置的,如要求函数的最大值,可先求出(- f)的最小值fv ,则- fv
必为f的最大值。
例一用函数bintprog求解下列0-1规划
max z = x— 2x2 2x3 -6x4-4x5
s.t 3x1 2x2 -x3x45x2 _5 2x1 4x2-2x3-沧一2x5辽5
K =0或1(i=1,2JI|5)
用MATLAB语言编程如下:
f=-[1,2,2,-6],-4
A=[3,2,-1,1,2;2,4,-2,-1,-2];
b=[5,5];
[x,fv,ex]=bi ntprog(f,A,b,[],[]);
X,-fv
求解如下
ex=1,fv=-5, x=[1,1,1,0,0]
例二用函数bintprog求解下列0-1规划min z = 3% 7x2-x3x4
s.t 2x1 -x2x3- x4-1
x1 - x2 6x3 4x4 - 8
5x1 3x2 X4 -5
x =0 或1(i=1,2,川4)
用MATLAB语言编程如下:
f=[3,7,-1,1]
A=[-2,1,-1,1;-1,1,-6,-4];
A=[A;-5,-3,0,-1]
b=-[1,8,5];
[x,fv,ex]=bi ntprog(f,A,b,[],[]);
求解如下ex=1,fv=-3, x=[1,0,1,,1]
例三用函数bintprog求解下列0-1规划
min z =15% 18X2 21x319x423x522x626x717x g 16x9 S.t X\ X2x3= 1
X4 X5 X6 = 1
冷X3 X9 = 1
X X4X7=1
X2X X8=1
X3 X X9 =1
X =0 或1,i =1,2 川9
用MATLAB语言编程如下:
f=[15,18,21,19,23,22,26,17,16];
z2=zeros(1,2); z3=zeros(1,3);
z6=zeros(1,6); o3=zeros(1,3);
q=[o3,z6;z3,o3,z3;z6,o3];
q=[q;1,z2, 1,z2, 1,z2];
q=[q;0,1,z2,1,z2,1,0];
q=[q;z2,1, z2,1, z2,1];
bq=on es(6,1)
[x,fv,ex]=bi ntprog(f,[],[],q,bq);
求得
Ex=1,fv=53, X=[0,1,0,1,0,0,0,0,1]