智能解决装箱问题:使用优化算法实现高效包装

VIP智能解决装箱问题:使用优化算法实现高效包装
装箱问题(Bin Packing Problem)是组合优化领域中的一个经典问题,主要涉及如何将一系列对象高效地装入有限数量的容器(或“箱”)中,同时满足特定的约束条件。这个问题的目标是最小化所需使用的箱子数量或者最大化箱子的装载效率,以减少空间或资源的浪费。
开通可读全文 ·5.5k 人阅读
最低0.47元/天 解锁文章

组合优化问题

组合优化(Combinatorial Optimization,CO)数学优化研究的一个分支。主要关注的是从有限的对象集合中寻找最优解的问题。这个词的由来主要是由“组合”和“优化”两部分构成。“组合”指的是从有限的对象集合中选择一部分的过程,而“优化”则指的是在满足一定条件下,使得某个目标函数达到最大或最小。即:组合优化问题的解集合有限个的,要做的事情是在有限的集合里面找到目标最优的集合。
组合优化问题在许多实际情况中都有出现,包括经济管理、工业制造、交通运输等领域。比如:

  • 0-1 背包问题:如何把体积有限、价值有限,装入容积有限的背包里,获得最大价值的装包?
  • 装箱问题,bin packing,如何装箱使得所用的箱子最少?
  • TSP的旅行商问题:如何选择一条道路遍历每个城市,路径最短?
  • 车间调度问题:车间的加工顺序如何安排完工时间最小?
  • 地图块着色问题:如何采用少量的颜色给地图块着色,两两相邻颜色不一样?

组合优化问题特征:

  • 解可数的,可行域是有限的
  • 最优解一定存在
  • 可行方案非常多,无法用枚举的方案,NP-hard的问题

解组合优化的方式有:

  • 数学规划的方法,利用数学规划求解器,寻找精确最优解。缺点:耗时。
  • 启发式算法:近似方法、贪婪算法、基于规则等。解的质量有基础保证,但是耗时不确定。
  • 元启发式算法:遗传算法、蚁群算法、禁忌搜索、模拟退火等。不同的问题需要调参数,解的质量不可靠。
  • 机器学习算法:监督学习、强化学习、图神经网络。此方法还在探索的算法领域,对于同分布的数据,机器学习后能进行快速的求解。

本文将以一个简化的装箱问题为例,来讲解采用数学规划的方法来解决装箱这个组合优化问题。

什么是装箱问题?

装箱问题(Bin Packing Problem)是组合优化领域中的一个经典问题,主要涉及如何将一系列对象高效地装入有限数量的容器(或“箱”)中,同时满足特定的约束条件。这个问题的目标是最小化所需使用的箱子数量或者最大化箱子的装载效率,以减少空间或资源的浪费。

在数学领域,装箱问题通常被建模为整数规划问题。它的变体众多,包括一维装箱问题、二维装箱问题、多维装箱问题等,以及它们各自的约束条件,如容器容量、物品形状、摆放方向限制等。

装箱问题可以用在什么场景?

在这里插入图片描述

装箱问题广泛应用于各种实际场景,几个典型的应用示例包括:

  1. 物流与配送: 确定最小数量的货车来运输一定量的货物,同时考虑每辆货车的载重限制、体积限制以及货物的装载平衡。
  2. 仓库存储: 如何利用有限的仓储空间存储尽可能多的库存货物,或如何将货物高效地摆放到货架上,以便节省空间并方便存取。
  3. 生产包装: 在产品的包装过程中,决定最少的包装盒数量来装载不同大小的产品,或者在确保产品安全的前提下,使得各个包装盒中的空隙最小化。
  4. 计算资源分配: 在计算机科学领域,将不同的任务分配给有限数量的处理器或内存资源,以求最大化资源的使用效率。
  5. 切割优化和材料利用: 在制造业中,比如钢材、木材、玻璃等材料的切割,如何从原材料中切割出所需部件,以减少材料浪费。
  6. 行李装载: 确定如何在飞机的货舱内或个人行李箱中高效地安置行李和货物,以保证安全、均衡且有效地利用空间。
  7. 云计算资源优化: 决定如何在云计算环境中分配虚拟机到物理服务器上,以最小化服务器的数量和能耗。

装箱问题

假设我们有一批货物要运输走,这批货物包装盒的比较整齐,侧面面尺寸一样,仅厚度不同、重量不同。运输货车里可以放两列,如上图示意。
货车的总承重是10吨。为了行驶平稳,希望左右摆的货物质量差异不超过500公斤。货车可装货物的总长度(厚度)是5米。
要装的货物的信息如此表格文件所示: data/items-1010.csv
部分数据如下:


序号 包装和厚(cm) 重量(kg)
1 101 505
2 61 305
3 126 630
…… …… ……
100 85 765
…… …… ……
200 60 600
…… …… ……
1010 80 640

当数据维度太高的时候,采用数学规划方式计算会很慢。
我们可以拆解问题,比如分块去算某100个货物的装载方案,切割前100条数据为 data/items-100.csv 。更多分块数据方案用户可以进data文件夹自己修改。

装箱问题的数学规划建模

下面我们采用数学规划的方法来建模这个问题。


首先:定义几何,描述数据,方便后面引用

  • 货物集合 I I I
    • 它的描述信息参数是 厚度 l i l_{i} li​ 和 重量 w i w_{i} wi​
  • 假设有车辆集合 B B B
  • 问题中有左侧和右侧的问题,定义集合 s = l e f t , r i g h t s = { left, right } s=left,right
  • 关于左右侧的差异在500kg以内,在表达式上,会需要一个绝对值,属于非线性。变更成线性更简单。这里我们假设所有的火车上都是左边的重,右边的轻。则左边重量上限 W l e f t m a x = 5250 W_{leftmax} = 5250 Wleftmax​=5250 kg ,右边重量上限 W r i g h t m a x = 4750 W_{rightmax} = 4750 Wrightmax​=4750 kg。左边比右边重的差异上限是 W l e g t r i g h t = 500 W_{legt_right} = 500 Wlegtr​ight​=500 kg
  • 两边的装货厚度要求是参数 L m a x = 500 L_{max} = 500 Lmax​=500 cm

然后,设置变量来表达要解决的问题。

  • 货物如何摆放,设置 0-1 变量 x i , b , s x_{i,b,s} xi,b,s​,其中 i ∈ I i \in I i∈I, b ∈ B b \in B b∈B, s ∈ S s \in S s∈S。 当变量取值为1的时候,则代表货物摆放在该位置,为0的时候则不放置。

由此,我们可以用来表达装货的约束。

  • 每个货物只能放一个位置,且至少是一个位置: ∑ b ∈ B , s ∈ S x i , b , s = 1 , ∀ i ∈ I \sum_{b \in B, s \in S} x_{i,b,s} = 1, \forall i \in I ∑b∈B,s∈S​xi,b,s​=1,∀i∈I
  • 每个货车上,装载的货物重量限制:
    • 左边限制: ∑ i ∈ I x i , b , l e f t ⋅ W i ≤ W l e f t m a x , ∀ b ∈ B \sum_{i \in I} x_{i,b,left} \cdot W_{i} \leq W_{leftmax} , \forall b \in B ∑
VIP 贪心算法之装箱问题 问题描述 装箱问题可简述如下:设有编号为 0、1、…、n - 1 的 n 种物品,体积分别为 v0、v1、…、vn-1。将这 n 种物品装到容量都为 V 的若干箱子里。 约定这 n 种物品的体积均不超过 V ,即对于 0≤ i<n,有 0<vi ≤ v。不同的装箱方案所需要的箱子数 目可能不同。装箱问题要求使装尽这 n 种物品的箱子数要少。 贪心求解 使用一种贪心策略:每次都想将当前体积最大的物品装入箱中,在这块类似于这个问题 ->>> 贪心算法之多机调度问题 其实在生活中这也是很常见的一 开通可读全文·6.8k 阅读·13 点赞·51 收藏 阅读全文

相关推荐

算法:装箱问题

装箱问题

2203_75607361的博客 1811

【python】欧姆龙智能物料排布之二维装箱算法实现

本算法衍生自欧姆龙杯大赛智能物料排布赛项 最终实现给出一个在一个指定的平面区域内,不同形状、大小、数量的平面物料的最节省空间的排布方式,且具有实时显示功能 问题描述: 排布区域 平面区域为40×50(X方向×Y方向)的矩形。 物料描述 1、包含矩形和三角形两种形状。 2、矩形和三角形的总数为25个,每种形状至少有一个。 3、矩形和三角形的面积、数量随机。 排布规则 1、所有物料都必须使用 2、所...

uuuuur的博客 5151

遗传算法在二维装箱问题中的应用及Matlab实现

二维装箱问题是一种典型的优化问题,涉及到在固定空间内如何最有效地安放一系列矩形物品。这种问题在实际应用中广泛存在,例如物流、印刷、芯片制造、玻璃切割等多个行业。问题的目标通常是最小化所占用的空间或最大化空间利用率。遗传算法的概念最早可以追溯到20世纪70年代,由美国的计算机科学家John Holland提出。他受到生物进化理论的启发,提出了这种模拟生物遗传和自然选择机制的优化算法。其基本思想是通过复制、杂交和突变等遗传操作,不断地迭代寻优,以期找到问题的最优解。

weixin_29997223的博客 525

二维装箱问题与数字图像滤波MATLAB实战源码合集

如果历史数据显示某些物品经常出现在前面效果更好,就可以在交叉时优先保护这些“高频前置”模式:% 根据频率赋权% 取前30%高频位置中最左端相当于告诉算法:“你们祖上成功的方案里,这几个家伙都是打头阵的,别轻易动他们!回顾这场从贪心到遗传再到动态规划的旅程,我们发现:贪心算法:快、轻、稳,适合作为初始解或实时响应模块;遗传算法:强、广、深,适合中大规模、追求高质量解的场景;动态规划:精、准、狠,专治小规模但要求绝对最优的问题;图像处理。

weixin_33480380的博客 1080

利用Sigrity的SPEED2000进行时域电源噪声分析

SPEED2000进行时域电源噪声分析

ZHENGSA的博客 3607

ROS基础(一)——命令行代码(以小乌龟程序为例)

ROS学习(一)——命令行代码(以小乌龟程序为例)1 基础命令行语句1.1 roscore1.2 rqt_graph(显示系统计算图)1.3 rosnode(显示所有节点相关信息)1.4 rostopic(和话题相关)2 服务类型指令rosservice同时存在两只海龟3 指令记录 1 基础命令行语句 从大二四旋翼无人机编队后就没再接触过ROS了,最近由于科研任务需要重新捡起来,打算系统学一下!学习过程参考古月居老师的视频,有兴趣的同学可以去[BliBli]学习。 学习平台:Ubuntu 18.04 硬件

北理自动化小白 6258

光电振荡器(OEO):从原理到应用,解锁高频微波信号新纪元

本文深入解析了光电振荡器(OEO)的核心原理与前沿应用。OEO通过巧妙的光-电-光转换机制,利用光学谐振腔产生高频、高纯度、低相位噪声的微波信号,有效突破了传统电子电路的频率瓶颈。文章详细拆解了其工作流程,并探讨了在雷达系统、高速光通信及精密测量等领域的硬核应用价值。

weixin_29231027的博客 362

【初阶】手把手教你轻松上手Denodo | 连接数据库并创建基本视图 (二)

在本教程的第二部分,我们将涵盖:连接到数据库,与创建基本视图。

Denodo的博客 1093

[EdgeAI] NXP eIQ 机器学习Toolkit (一):准备篇

eIQ™机器学习(ML)软件开发环境支持在恩智浦EdgeVerse™微控制器和微处理器(包括i.MX RT跨界MCU和i.MX系列应用处理器)上使用ML算法。eIQ ML软件包括称为eIQ Toolkit的ML工作流工具以及推理引擎、神经网络编译器和优化库。............

HowieXue 薛永浩的博客 1万+

QT开发串口程序与单片机通讯

如果有对象对这个信号感兴趣,想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。的内容,虽然实现的功能很简单,但是QT上位机开发的步骤基本就是这些步骤,通过这个基础实例把这些套路摸透我们就可以接着进行后续更多QT程序地开发学习了。QWidget类:所有用户界面对象的基类,窗口部件是用户界面的一个基本单元,它从窗口系统接收鼠标,键盘和其他消息,并在屏幕上绘制自己。我们上面运行的上位机都是在Qt Creator中编译运行的,如果我们需要把编写好的可执行文件发送给别人使用的话还需要进行打包。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 941

【异常】Claude Code 第三方API 400报错(thinking type should be enabled or disabled)解决方案

摘要: Claude Code接入第三方API端点时出现400参数错误,主要因新版默认启用的Adaptive Thinking功能与旧版接口参数格式不兼容(需thinking: {type: "adaptive"},但第三方仅支持布尔值)。解决方案为修改本地settings.json配置文件,添加"CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING": "1"环境变量并重启客户端,即可恢复思考模式功能。Adaptive Th

奶爸的编程之路,也就一周冷个三天 1万+

QT如何使用CTK插件搭建应用程序框架?

CTK框架,QT框架,插件系统

cs821984831的博客 731

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: 深入了解MindOpt优化求解器的License服务
下一篇: 解决背包问题:组合优化的应用与建模方法

双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —
MindOpt_003
博客等级 码龄4年 440粉丝 70原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值