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

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 第二天打卡-整数规划(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,通过我上述所说的四个步骤使用花枝定界法进行分枝,剪枝,最后得出结果。


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

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
7月前
|
机器学习/深度学习 C语言 C++
【C++】——阶段性测验(帮助巩固C++前半部分知识)
【C++】——阶段性测验(帮助巩固C++前半部分知识)
|
7月前
|
JavaScript 测试技术
【动态规划】【精度】1883. 准时抵达会议现场的最小跳过休息次数
【动态规划】【精度】1883. 准时抵达会议现场的最小跳过休息次数
|
2月前
|
项目管理
80小时法则是什么?如何应用于项目管理?
在快节奏的工作环境中,项目管理的效率至关重要。80小时法则提出,个体或团队在80小时内可以完成大多数高效工作,强调通过集中时间和资源在关键任务上,提高生产力。该法则鼓励设定明确的时间框架,优先处理重要任务,建立反馈循环,避免任务切换,合理控制工作节奏,从而提升项目管理的效果。
39 0
|
6月前
|
搜索推荐 算法 C++
蓝桥杯分糖果、最小化战斗力差距、小蓝零花钱
这是一个关于算法问题的集合,包括三个不同的任务: 1. **分糖果**:肖恩有不同种类的糖果要分给学生,目标是使得到糖果字符串的字典序最大且尽量小。给定糖果种类数和一个初始字符串,输出能达到的最小字典序的最大值。 2. **最小化战斗力差距**:小蓝需要将队员分为两组,每组战斗力差距最小。给定队员数量和战斗力值,找出最小的战斗力差距。 3. **小蓝的零花钱**:小蓝要在序列中分割偶数和奇数,每次分割代价是两端元素差的绝对值。目标是在预算内确定最多能进行多少次这样的分割。 每个问题都提供了输入输出示例和相应的C++代码片段来解决这些问题。
|
Python
LeetCode每日一题——857. 雇佣 K 名工人的最低成本
有 n 名工人。 给定两个数组 quality 和 wage ,其中,quality[i] 表示第 i 名工人的工作质量,其最低期望工资为 wage[i] 。
136 0
LeetCode每日一题——857. 雇佣 K 名工人的最低成本
|
Shell
一维数组实验题:大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m>2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉一个最高分和一个最低分后,取平均分作为该选
一维数组实验题:大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m>2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉一个最高分和一个最低分后,取平均分作为该选
518 0
L1-007 念数字 (10 分)
L1-007 念数字 (10 分)
324 0
7-25 念数字 (15 分)
7-25 念数字 (15 分)
168 0
7-24 悄悄关注 (10 分)
7-24 悄悄关注 (10 分)
130 0
|
分布式数据库 双11 OceanBase
倒计时6天|同行十二年,每一“步”都算数
8 月 10 日,OceanBase 将在北京、上海、深圳,以“三地分布式”形式举办「2022 年 OceanBase 年度发布会」,届时,OceanBase 将重磅发布 4.0 版本,并围绕产品技术、公有云、开源、服务等话题展开讨论。此次大会以“小就是大”为主题,突破技术极限的一小步,迈向产业的一大步,小就是大,small is the new big!
106 0
倒计时6天|同行十二年,每一“步”都算数