You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不同重量小球装箱优化问题:寻求非暴力高效算法方案

问题描述

现有若干不同重量的小球和多种箱型:

  • 每个小球重量各不相同。
  • 每种箱型设有min(最小容量)、max(最大容量)及使用时的penalty(惩罚值)。
  • 每种箱型的数量无限。

如何将小球装入数量最少的箱子中,同时满足以下条件:

  • 每个箱子内小球的总重量需处于其min与max容量范围内。
  • 所用箱子的总penalty需最小化。
  • 若存在多个解,需选择每个箱子内小球总重量最接近其max容量的方案。
示例

例如,有5个重量分别为31、14、13、12、7的小球,以及3种箱型:

type│ min │ max │penalty
────┼─────┼─────┼───────
 A  │  11 │  20 │    1
 B  │  21 │  30 │    1
 C  │  31 │  40 │    5

可能的装箱组合如下:

boxTypes│ 31 │ 14 │ 13 │ 12 │  7 │ penalty
────────┼────┼────┼────┼────┼────┼─────────
   ABC  │ C  │ B  │ B  │ A  │ C  │    7
   BBC  │ C  │ B1 │ B2 │ B2 │ B1 │    7
    CC  │ C1 │ C2 │ C2 │ C2 │ C1 │   10
   ACC  │ C1 │ C2 │ C2 │ A  │ C2 │   11

还有许多未列出的组合,要么箱型集合相同,要么penalty过高。

注意有2种方案的总penalty相同,但结合第三个条件:

boxTypes │ box1 │ box2 │ box3 │            shortfall
─────────┼──────┼──────┼──────┼──────────────────────────────────
  ABC    │  12  │  27  │  38  │ (20-12) + (30-27) + (40-38) = 13
  BBC    │  21  │  25  │  31  │ (30-25) + (30-25) + (40-31) = 19

由于ABC组合的箱子填充率最高,因此被选中。

当前实现

我目前通过递归生成小球的所有分组组合,再验证是否存在适配的箱型。

已通过以下方式优化性能:

  • 提前终止:当分组重量超过最大容量(如示例中的40)时停止递归。
  • 限制箱数:将箱数限制在2-3个(而非每个小球一个箱子)。

但该方案仍无法处理超过15个小球的场景。


是否存在优于暴力枚举的算法来解决此问题?

内容的提问来源于stack exchange,提问作者Uahnbu Tran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:51:00