练习matlab的第二天。
目录
①可确定0<=z<=356,由于x1和x2均不为整数,所以进行分枝。
一、题目。
典型的线性规划,特别的条件,
且为整数。
二、简单分析
①可以先用普通的线性规划处理得到结果。
②根据分枝定界法,得到整数解。
分枝定界法可用于解纯整数或混合的整数规划问题。
三、求解实现
1、普通的线性规划处理
clear;
clc;
f=[40 90]';
a=[9 7;7 20];
b=[56;70];
lb=zeros(2,1);
[x,z]=linprog(-f,a,b,[],[],lb);
x=x'
z=-z
运行结果:
2、 分枝定界法
①可确定0<=z<=356,由于x1和x2均不为整数,所以进行分枝。
②首先对x1进行分枝
寻找x1相邻的整数,所以可将分枝为
=4和
=5,此时
约束不变。
当时
clear;
clc;
f=[40 90]';
a=[9 7;7 20];
b=[56;70];
lb=zeros(2,1);
ub=[4;inf];
[x,z]=linprog(-f,a,b,[],[],lb,ub);
x=x'
z=-z
运行结果:
因此
当
clear;
clc;
f=[40 90]';
a=[9 7;7 20];
b=[56;70];
lb=[5;0];
ub=[5;inf];
[x,z]=linprog(-f,a,b,[],[],lb,ub);
x=x'
z=-z
运行结果:
因此
由此可以将z的取值范围进一步压缩。
③对x2进行分枝.
所以可以分枝为
和
。
当时
clear;
clc;
f=[40 90]';
a=[9 7;7 20];
b=[56;70];
lb=[0;0];
ub=[4;2];
[x,z]=linprog(-f,a,b,[],[],lb,ub);
x=x'
z=-z
运行结果:
当时
clear;
clc;
f=[40 90]';
a=[9 7;7 20];
b=[56;70];
lb=[0;3];
ub=[4;3];
[x,z]=linprog(-f,a,b,[],[],lb,ub);
x=x'
z=-z
运行结果:
由此可以进一步压缩z的取值范围。
④进行剪枝
舍去不满足条件的分枝。
当时
,对此时的
分枝为
:
clear;
clc;
f=[40 90]';
a=[9 7;7 20];
b=[56;70];
lb=[5;0];
ub=[inf;1];
[x,z]=linprog(-f,a,b,[],[],lb,ub);
x=x'
z=-z
运行结果:
clear;
clc;
f=[40 90]';
a=[9 7;7 20];
b=[56;70];
lb=[5;2];
ub=[inf;2];
[x,z]=linprog(-f,a,b,[],[],lb,ub);
x=x'
z=-z
运行结果:
此时无解。
因此将这一枝剪掉,即舍去。
同时当且
这一枝剪掉。
⑤结论.
综上所述,可得当
最终得到的最优整数解即
.
四、总结与思考
①分枝定界法在我个人看来有一种控制变量法的感觉,控制一个解固定不变去寻找另一个解的取值。
②从一个小数解去寻找相邻整数,根据这个整数再获得其他解,有一种探索的感觉。
③当变量在两个以上进行分枝定界法会变得更加繁琐与困难。
④分枝定界分思路简单,而且经典。
⑤这个算法可以写成函数体来解决简单的整数规划问题。