一。问题
二。问题分析
线性规划问题(先不管整数条件)
可用matlab的linprog函数进行求解
三。代码及其实现
clc
clear all
c=[40 90];
a=[9,7;7,20];
b=[56,70];
aeq=[];
beq=[];
lb=[0;0];
ub=[inf;inf];
[x,fval]=linprog(-c,a,b,aeq,beq,lb,ub);
x
best=c*x
四。结果
Optimal solution found.
x =
4.8092
1.8168
best =
355.8779
五。整数规划
利用分枝定界法
先给x1定界4<4.8092<5
x1小于4或x1大于5
x2保持约束不变
c=[40 90];
a=[9,7;7,20];
b=[56,70];
aeq=[];
beq=[];
lb=[0;0];
ub=[4;inf];
[x,fval]=linprog(-c,a,b,aeq,beq,lb,ub);
x
best=c*x
c=[40 90];
a=[9,7;7,20];
b=[56,70];
aeq=[];
beq=[];
lb=[5;0];
ub=[inf;inf];
[x,fval]=linprog(-c,a,b,aeq,beq,lb,ub);
x
best=c*x
输出结果:
Optimal solution found.
x =
4.0000
2.1000
best =
349
Optimal solution found.
x =
5.0000
1.5714
best =
341.4286
此时先把x1限定在4<x1再对x2定界x2=2.1,将x2限定在
x2小于2或大于3
c=[40 90];
a=[9,7;7,20];
b=[56,70];
aeq=[];
beq=[];
lb=[0;3];
ub=[4;inf];
[x,fval]=linprog(-c,a,b,aeq,beq,lb,ub);
x
best=c*x
c=[40 90];
a=[9,7;7,20];
b=[56,70];
aeq=[];
beq=[];
lb=[0;0];
ub=[4;2];
[x,fval]=linprog(-c,a,b,aeq,beq,lb,ub);
x
best=c*x
得到结果
Optimal solution found.
x =
1.4286
3.0000
best =
327.1429
Optimal solution found.
x =
4
2
best =
340
有一个整数解
再对x>5的情况进行x2的定界
x2的定界同上
c=[40 90];
a=[9,7;7,20];
b=[56,70];
aeq=[];
beq=[];
lb=[5;3];
ub=[inf;inf];
[x,fval]=linprog(-c,a,b,aeq,beq,lb,ub);
x
best=c*x
c=[40 90];
a=[9,7;7,20];
b=[56,70];
aeq=[];
beq=[];
lb=[5;0];
ub=[inf;2];
[x,fval]=linprog(-c,a,b,aeq,beq,lb,ub);
x
best=c*x
输出结果:
No feasible solution found.
Linprog stopped because no point satisfies the
constraints.
x =
[]
错误使用 *
用于矩阵乘法的维度不正确。请检查并确保第一个矩阵中的列数与第二个矩阵中
的行数匹配。要执行按元素相乘,请使用 '.*'。
出错 homework2 (line 67)
best=c*x
出错 run (line 91)
evalin('caller', strcat(script, ';'));
均无可行解
综合上面情况:
最优解为
x =
4
2
best =
340