2021-11-07

文章目录

题目

在这里插入图片描述

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

总结分析

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值