文章目录
题目
matlab解题过程
第一步
matlab代码
>> c=[40 90];
>> a=[9 7; 7 20];
>> b=[56 70];
>> aeq=[];
>> beq=[];
>> lb=[0 0];
>> ub=[inf;inf];
>> lb=[0;0];
>[x y]=linprog(-c,a,b,aeq,beq,lb,ub);
>x
>best=c*x
答案如下:
best=40 * x1+90 * x2
解出x1=4.8092,x2=1.8168,Max Z=355.8800.
下面采用分支定界法求解该目标函数的最优整数解。
x1 =< [4.8092] = 4 , x1 >= [4.8092]+1 = 5
此时约束条件为:
9*x1+7*x2<=56
7*x1+20*x2<=70
0<x1<4 x2>0
则需修改代码第八行:
ub=[4;inf]%x1变量上线为4
得到结果为:
此时x1=4,x2=2.1,best=349
同理我们可以继续求得x1分支的另一半:
x1>=5
349```
此时约束条件为:
```python
9*x1+7*x2<=56
7*x1+20*x2<=70
x1>=5 x2>0
修改代码第六行:
lb=[5;0];
ub=[inf;inf];
答案如下:
最优值范围为:
0 =< Z =<349
同理我们可以按照相同方法对X2进行分枝:
分枝的数据应该采用z最大值取得时的x2的值:
x1=4,x2=2.1
0 =< x2 <=[2.1] , x2 >= [2.1] + 1
此时约束条件为:
9*x1+7*x2<=56
7*x1+20*x2<=70
0<=x1<=4 2>x2>0
修改代码得到结果为:
在计算x2的第二个分枝:
x2>=3
约束条件为:
9*x1+7*x2<=56
7*x1+20*x2<=70
0<=x1<=4 x2>=3
得到结果为:
计算到这里我们可以确定目标函数的最佳值范围:
340 =< Z =< 341
第二步
对于问题:
按照第一步的方法进行分枝
第一步中我们得到此时最优解为:
我们对x2进行分枝:
0 =< x2 =< [1.5714] = 1 , x2 >= [1.5714] + 1 = 2;
约束条件为:
9*x1+7*x2<=56
7*x1+20*x2<=70
x1>=5 1>x2>0
matlab代码为:
clc
clear all
c=[40 90];%用目标函数系数来确定
a=[9 7 ;7 20];%约束条件左边约束
b=[56 70];%约束条件右边系数
aeq=[];%没有等式约束,因此aeq,beq都为空
beq=[];
lb=[5;0];%下限
ub=[inf;1];%上限
[x,y]=linprog(-c,a,b,aeq,beq,lb,ub) %这里没有等式约束,对应的矩阵为空矩阵
结果为:
得到结果为:
x1 = 5.4444 , x2 = 1 , best = 307.7778
再次对x2分枝
得到约束条件:
9*x1+7*x2<=56
7*x1+20*x2<=70
x1>=5 x2>=2
修改代码后发现该目标函数无解。
因此我们根据第一步,第二步分枝可以得到最优解:
x1 = 4 , x2 = 2 , best = 340