第二天打卡-整数规划(1)

一、谈谈我的理解

前两次打卡,我们学会了线性规划,这里为什么又引入一个整数规划呢?其实两个规划很类似,唯一的区别就是整数规划限制了我们的变量x必须为整数,而线性规划没有限制变量类型。
为什么我们要引入整数规划呢?在实际生活中,我们就算付钱,可能也很少遇到让你付小数的钱,都是让你给一个整数,因此这就是整数规划的由来。

二、题目

1)题目与简析

假设我们有如下的整数规划:
在这里插入图片描述
假设我们先把最后一个条件限制为整数暂时忽略?你是不是能用前面的知识求解出max,x1,x2呢?请把你的matlab求解过程写到博客,提交到任务中。(晚上我提交答案)
我在这里先直接给出答案:

x1 = 4.8092, x2 = 1.8168,z = 355.8779

根据我计算出的结果可以看到x1和x2都不满足整数情况,因此这就不再是最优解了。

2)分枝定界法步骤

方法用处:分枝定界法可用于解纯整数或混合的整数规划问题

2.1)第一步

根据我们出的结果,我们可以暂定z的上限(最大值)可以是356;我们也可以一样看出x1,x2分别为0时,z最小值为0;因此最大值z的范围可以暂定为:0=<z=<356

2.2)第二步

因为 x1, x2 当前均为非整数,故不满足整数要求,任选一个进行分枝。设选 x1进行分枝,把可行集分成 2 个子集:

x1 =<[4.8092] = 4 , x1 >= [4.8092] +1 = 5

4与5之间没有整数,因此这种方法就是叫做分枝。

这两个子集的规划及求解如下:
问题 B1 :
目标函数:

 Max z = 40x1 + 90x2

约束条件:

9*x1+7*x2<=56
7*x1+20*x2<=70
0<x1<4 x2>0

因为我们只对x1做了分枝,因此x2的约束不变。

这里计算方法跟线性规划不一样,但是有一点我没有讲到的是前面我们没有遇到x在两者之间的问题,因此我对此B1做matlab计算最优解如下:

clc
clear all
c=[40 90];%用目标函数系数来确定

a=[9 7 ;7 20];%约束条件左边约束

b=[56 70];%约束条件右边系数

aeq=[];%没有等式约束,因此aeq,beq都为空
beq=[];

lb=[0;0];%下限依然都为0
ub=[4;inf];%x1上限为4,x2没有上限

[x,y]=linprog(-c,a,b,aeq,beq,lb,ub);  %这里没有等式约束,对应的矩阵为空矩阵
x    %获取对应x1,x2
best=c*x%计算最优值

运行结果:
在这里插入图片描述
因此我们得出:x1 = 4.0, x2 = 2.1,z1 = 349
我们对下x1做了分支,因此我们还要计算x1的另一半(我们就是相当于把x1范围划分两半,分别计算,后面我们再求其和)。因此对于x1有问题 B2 :
目标函数:

 Max z = 40x1 + 90x2

条件约束:

9*x1+7*x2<=56
7*x1+20*x2<=70
x1>=5  x2>0

上面我已经写过解法了,请对照上面的解法写出你的matlab求解,并写在博客里(本篇文章所有留下的问题写在一篇博客提交任务)
我直接给出答案:
在这里插入图片描述
可以看到x1=5 x2=1.5714 z=341.4286
现在我们把最优值再定界确定范围为:0 ≤ z ≤ 349

2.3)第三步

对第二步的问题B1继续分支,我们可以看到问题B1只有x2有小数,因此我们是对B1问题里的x2进行分枝(按照第一步的方法):

0=<x2<[2.1]=2,x2>[2.1]+1=3

从而得到问题如下:
B11问题目标函数:

 Max z = 40x1 + 90x2

约束条件:

9*x1+7*x2<=56
7*x1+20*x2<=70
0<=x1<=4  2>x2>0

matlab计算代码如下:

clc
clear all
c=[40 90];%用目标函数系数来确定

a=[9 7 ;7 20];%约束条件左边约束

b=[56 70];%约束条件右边系数

aeq=[];%没有等式约束,因此aeq,beq都为空
beq=[];

lb=[0;0];%下限依然都为0
ub=[4;2];%x1上限为4,x2没有上限

[x,y]=linprog(-c,a,b,aeq,beq,lb,ub);  %这里没有等式约束,对应的矩阵为空矩阵
x    %获取对应x1,x2
best=c*x%计算最优值

运行:
在这里插入图片描述

然后我们再计算x2另一个分枝,唯一变化的还是x范围.
问题B12:
目标函数:

 Max z = 40x1 + 90x2

条件约束:

9*x1+7*x2<=56
7*x1+20*x2<=70
0<=x1<=4  x2>3

matlab计算结果为:(请你在博客写上此题的matlab计算过程)
在这里插入图片描述

因此我们可以再次确定z范围为:340 ≤ z ≤ 341
到这里我们已经对问题B1做出完美分枝,因此我们再对问题B2进行分枝,请看第四步。

2.4)第四步

为了便于观看,我把问题B2拖下来:
在这里插入图片描述
根据上面的结果,x2=1.5714为小数,因此我们对B2中的x2进行分枝。

0=<x2<[1.5714]=1,x2>[1.5714]+1=2

得到问题B21如下:
目标函数:

 Max z = 40x1 + 90x2

条件约束:

9*x1+7*x2<=56
7*x1+20*x2<=70
x1>=5  1>x2>0

用matlab计算结果如下:(请你在博客写出你的matlab代码)
在这里插入图片描述
B22问题如下:
目标函数:

 Max z = 40x1 + 90x2

条件约束:

9*x1+7*x2<=56
7*x1+20*x2<=70
x1>=5  x2>2

matlab如下:

clc
clear all
c=[40 90];%用目标函数系数来确定

a=[9 7 ;7 20];%约束条件左边约束

b=[56 70];%约束条件右边系数

aeq=[];%没有等式约束,因此aeq,beq都为空
beq=[];

lb=[5;2];%下限
ub=[inf;inf];%上限

[x,y]=linprog(-c,a,b,aeq,beq,lb,ub) %这里没有等式约束,对应的矩阵为空矩阵

运行如下:
在这里插入图片描述
根据结果我指出的地方可以看到,没有解。
综合B2的两个分枝,B21分枝后依然有小数,不可取;B22不可行解,因此也不可取。这样的操作呢,叫做剪枝。

2.5)结论

由于B2的两个分枝都不可取,B1只有一个枝可取,即最优解为:

x1 = 4, x2 = 2,z = 340

三、总结

开始,将要求解的整数规划问题称为问题 A ,将与它相应的线性规划问题称为问题 B。求解情况如下:

  1. B 没有可行解,这时 A 也没有可行解,则停止
  2. ) B 有最优解,并符合问题 A 的整数条件, B 的最优解即为 A 的最优解,则停止。
  3. B 有最优解,但不符合问题 A 的整数条件,记它的目标函数值为 z,通过我上述所说的四个步骤使用花枝定界法进行分枝,剪枝,最后得出结果。

再次提醒: 请务必完成我在本篇文章中留下的问题,写一篇博客提交任务,学习是靠你自己,你不努力,总有人比你更努力。

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

川川菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值