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

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

文章目录

一、谈谈我的理解

前两次打卡,我们学会了线性规划,这里为什么又引入一个整数规划呢?其实两个规划很类似,唯一的区别就是整数规划限制了我们的变量x必须为整数,而线性规划没有限制变量类型。

为什么我们要引入整数规划呢?在实际生活中,我们就算付钱,可能也很少遇到让你付小数的钱,都是让你给一个整数,因此这就是整数规划的由来。

二、题目

1)题目与简析

假设我们有如下的整数规划:

image.png

假设我们先把最后一个条件限制为整数暂时忽略?你是不是能用前面的知识求解出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%计算最优值

运行结果:

image.png

因此我们得出: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求解,并写在博客里(本篇文章所有留下的问题写在一篇博客提交任务)

我直接给出答案:

image.png

可以看到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%计算最优值

运行:

image.png

然后我们再计算x2另一个分枝,唯一变化的还是x范围.

问题B12:

目标函数:

 Max z = 40x1 + 90x2

 条件约束:

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

matlab计算结果为:(请你在博客写上此题的matlab计算过程)

image.png

因此我们可以再次确定z范围为:340 ≤ z ≤ 341

到这里我们已经对问题B1做出完美分枝,因此我们再对问题B2进行分枝,请看第四步。

2.4)第四步

为了便于观看,我把问题B2拖下来:

image.png

根据上面的结果,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代码)

image.png

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) %这里没有等式约束,对应的矩阵为空矩阵

运行如下:

image.png

根据结果我指出的地方可以看到,没有解。

综合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,通过我上述所说的四个步骤使用花枝定界法进行分枝,剪枝,最后得出结果。


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

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
4天前
|
机器学习/深度学习 C语言 C++
【C++】——阶段性测验(帮助巩固C++前半部分知识)
【C++】——阶段性测验(帮助巩固C++前半部分知识)
57 3
|
4天前
|
JavaScript 测试技术
【动态规划】【精度】1883. 准时抵达会议现场的最小跳过休息次数
【动态规划】【精度】1883. 准时抵达会议现场的最小跳过休息次数
|
4天前
|
存储 人工智能 算法
三维数组解决问题案例(天梯赛座位分配)
三维数组解决问题案例(天梯赛座位分配)
41 0
天梯赛真题——7-6 老板的作息表(25 分)
新浪微博上有人发了某老板的作息时间表,表示其每天 4:30 就起床了。但立刻有眼尖的网友问:这时间表不完整啊,早上九点到下午一点干啥了? 本题就请你编写程序,检查任意一张时间表,找出其中没写出来的时间段。
639 0
天梯赛真题——7-6 老板的作息表(25 分)
|
程序员
766.每周复盘-第十一周
766.每周复盘-第十一周
|
测试技术
PAT乙级1002写出这个数(20分)
PAT乙级1002写出这个数(20分)
75 0
|
Python
LeetCode每日一题——857. 雇佣 K 名工人的最低成本
有 n 名工人。 给定两个数组 quality 和 wage ,其中,quality[i] 表示第 i 名工人的工作质量,其最低期望工资为 wage[i] 。
111 0
LeetCode每日一题——857. 雇佣 K 名工人的最低成本
L1-049 天梯赛座位分配 (20 分)
L1-049 天梯赛座位分配 (20 分)
232 0
L1-062 幸运彩票 (15 分)
L1-062 幸运彩票 (15 分)
104 0
【蓝桥杯省赛】冲刺练习题【超大数】倒计时【14】天
【蓝桥杯省赛】冲刺练习题【超大数】倒计时【14】天
156 0