algorithm - 背负式/箱式包装 有问题?
问题描述
所以,我一直在广泛搜索,但我仍然不确定我正在处理的问题的正确分类是什么,所以我无法真正寻找解决方案。
我有 x 数量的不同对象(其中我知道它们的 H/W/L),我想把它们装进盒子里,但我不想在一个盒子里装尽可能多的东西,一个物体放在一个盒子里. 我想决定需要多少个不同大小的盒子才能将这些对象放入其中,同时尽量减少不同大小的盒子的数量。使问题变得更容易的一件事是对象的宽度和高度对于所有对象都是相同的,因此长度是唯一的问题。
为了更实际地了解我的用例,手头的问题是公司如何确定他们应该拥有哪些不同的盒子尺寸,以便将所有不同的产品放入其中,而不需要不必要的许多不同的盒子尺寸.
示例:我有一个长度为 1200 毫米的对象和另一个长度为 1150 毫米的对象,它们的宽度和高度相同。由于长度差异如此之小,因此对于 1150 毫米的物体没有额外的盒子尺寸并为两者使用相同的盒子是有意义的。
我解决这个问题的想法是使用算法对对象进行聚类,并使用聚类的数量或中心。
我在看什么类型的问题,什么类型的算法最适合对我的对象进行聚类?
解决方案
聚类是解决这个问题的好方法。找到集群,然后从集群中获取最大长度,因为集群中较小的对象将能够放入一个大盒子,但大对象不可能放入一个小盒子。
集群的数量将指示您将拥有的盒子大小的数量。但是您也可能有一些异常值,例如,您可能有一个高度从 1 到 15 的集群,但只有一个高度是 15,而其余的都小于 10。因此,在这种情况下,您必须决定是否需要一盒尺寸 15 或者您想要两个高度为 10 和 15 的盒子。
推荐阅读
- mongodb - MongoDB 备份到 S3
- cuda - 使用 CUDA atomicInc 获取唯一索引
- php - 花式框中的 Gravityform 按钮不起作用
- javascript - [Vue.js 2][vue-infinite-scroll] 为什么我的无限滚动不起作用?
- perl - 在 centos 中找不到 language.pm
- reactjs - 如何在循环反应中访问更新的状态?
- android - Android如何以编程方式默认扩展通知?
- mongodb - Mongo 聚合 - 使用来自先前管道的字段值作为排序字段进行排序
- javascript - 选择项目时应用相应的颜色和图标
- c# - ChannelReader.ReadAllAsync(CancellationToken) 实际上并未取消中间迭代