一、题目
二、分析及步骤
1.区别
与线性规划相比加入了自变量必须为整数的限制
2.步骤
2.1 未加入整数限制为
clc
clear all
c=[40 90];%用目标函数系数来确定
a=[9 7;7 20];%约束条件左边约束
b=[56;70];%约束条件右边系数
aeq=[];%没有等式约束,因此aeq,beq都为空
beq=[];
lb=[0;0];%下限为0
ub=[inf;inf];%上限
[x,fval]= linprog(-c,a,b,aeq,beq,lb,ub);
best=-fval;
结果为:
x = 4.8092
1.8168
best =355.8779
x均不满足整数要求。
2.2 分支定界
1)将原来x1分割为两半(0<=x1<=4<4.8092,x1>=5>4.8092) 将原问题化为b1和b2两个问题,区别在于其对x1的上下限约束不同。
e(1) = floor(x(1));
e(2) = floor(x(1))+1;
%%%%%%%求b1
lb=[0;0];%下限为0
ub=[e(1);inf];%上限
[B1,fval]=linprog(-c,a,b,aeq,beq,lb,ub);
z1=-fval%计算最优值
%%%%%%%求b2
lb=[e(2);0];%下限为0
ub=[inf;inf];%上限
[B2,fval]=linprog(-c,a,b,aeq,beq,lb,ub);
z2=-fval%计算最优值;
结果为:
z1 = 349
B1 = 4.0000
2.1000
z2 = 341.4286
B2 =5.0000
1.5714
不想写了.....
思路最重要哇
当出现两个小数时,记为x1(值为a)和x2(值为b),明显不满足整数的条件。所以引入了分支定界。
分支目的是为了把初始问题A分为b1和b2两个问题(将x1的定义域给分成两个)
Q:那是什么能保证他为整数呢?
A:对于b1问题x1的定界为【0 floor(a)】,b2问题x1的定义域为【ceil(a) 0】。显而易见的引入了整数边缘,对于一个单极值函数(指那个收益值z)而言,如果你将它从本来的最大值处切成了两半,那么剩下两半的极值肯定在它的边缘处,而他的边缘已经被定为了整数,所以就一直切西瓜那样x1方向一刀,x2方向一刀最后切出一个最好的。
感觉作业给的条件太理想了,不注意体现这个问题的妙处。 虽然能解这个题了,但不过也是依葫芦画瓢,自己还是有点糊。
害