题目:
求解思路:
引用自:
https://blog.csdn.net/f1220684378/article/details/121197355
1.先用线性规划处理得到最优解
2.用分枝定界法,得到整数解。
3.进行剪枝,得到整数最优解
求解过程:
在不考虑,为整数的情况下,求解此线性规划
Matlab代码如下:
clear all;
clc;
c = [40,90];
a = [9 7;7 20];
b = [56;70];
aeq =[];
beq = [];
lb=zeros(2,1);
[x,z]=linprog(-c,a,b,aeq,beq,lb);
x'
best = c*x
结果如下:
因为,首先对进行分枝,分别得到或 ,首先对约束条件,进行线性规划:
clear all;
clc;
c = [40,90];
a = [9 7;7 20];
b = [56;70];
aeq =[];
beq = [];
lb=[0;0];
ub = [4;inf]
[x,z]=linprog(-c,a,b,aeq,beq,lb,ub);
x'
best = c*x
然后对限制条件进行线性规划:
clear all;
clc;
c = [40,90];
a = [9 7;7 20];
b = [56;70];
aeq =[];
beq = [];
lb=[5;0];
ub = [inf;inf];
[x,z]=linprog(-c,a,b,aeq,beq,lb,ub);
x'
best = c*x
所以可以将z的取值范围进一步缩小为
接下来在基础上对进行分枝,分别得到和,首先对,的限制条件上进行线性规划:
clear all;
clc;
c = [40,90];
a = [9 7;7 20];
b = [56;70];
aeq =[];
beq = [];
lb=[0;0];
ub = [4;2];
[x,z]=linprog(-c,a,b,aeq,beq,lb,ub);
x'
best = c*x
再对,的限制条件进行线性规划:
clear all;
clc;
c = [40,90];
a = [9 7;7 20];
b = [56;70];
aeq =[];
beq = [];
lb=[0;3];
ub = [4;inf];
[x,z]=linprog(-c,a,b,aeq,beq,lb,ub);
x'
best = c*x
因此 的取值区间缩短至。
接着在基础上对进行分枝,分别为和,首先对 ,的限制条件进行线性规划。
clear all;
clc;
c = [40,90];
a = [9 7;7 20];
b = [56;70];
aeq =[];
beq = [];
lb=[5;0];
ub = [inf;1];
[x,z]=linprog(-c,a,b,aeq,beq,lb,ub);
x'
best = c*x
然后对 ,的限制条件进行线性规划:
clear all;
clc;
c = [40,90];
a = [9 7;7 20];
b = [56;70];
aeq =[];
beq = [];
lb=[5;2];
ub = [inf;inf];
[x,z]=linprog(-c,a,b,aeq,beq,lb,ub);
x'
best = c*x
此限制条件下方程无解
剪枝
将这一枝剪掉,即舍去。
当且这一枝剪掉。
结论
综上所述,可得当
的最优整数解即.