luanshaotong / sarpsolver

Large Scale 1D Bin Packing Problem Solver

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Bin Packing Problem Solver using Simulated Annealing based on Random Pruning Search(sarps)

装箱问题 (BPP) 是一个众所周知的优化问题,可以在物流和工业领域进行建模,例如资源分配、包装设计和集装箱装载。 一维装箱问题是一类经典的组合优化问题,有许多精确的求解方法。但工业生成中的装箱问题往往有着复杂的约束和庞大的参数规模,这使得精确求解这些问题的可能性变得很低。本项目使用元启发式的方法,能够在较短的时间内求解数亿参数(物品数100000)以上规模的一维装箱问题的较优解,同时满足多种容量和约束条件,使得使用的资源最少。

模型

在原始的装箱问题的基础之上,为了解决实际工程问题中的复杂约束,我们引入了多类容器、容器-物品约束、物品-物品约束等额外的条件,使得适用的问题更加广泛。关于模型的细节请参考模型与参数

算法

算法采用了模拟退火-子问题搜索的框架,首先生成一个初始解,每次交叉穷举搜索两个容器的物品,采用随机剪枝的方式限制搜索时间,外层退火框架负责接受或拒绝新生成的解。具体细节请参考算法原理

算法已经在云计算资源调度编排和工程排程问题上得到验证:

  • 2018天池全球调度大赛名次1/2116
  • 2020 天池首届云原生编程挑战赛赛道二内部第一名,总名次7/4031
  • 2018 华为软件精英挑战赛名次22/10338
  • 2018 “AIIA”杯(航天科工站)第二赛季-高级计划排程 名次6/17

未来也会在其他场景与问题上进行抽象和扩展。

快速使用

TODO

特性

  • 约束
    • 多容器类别
    • 多目标约束
    • 容器-物品不亲和约束
    • 物品-物品不亲和约束
    • 物品-容器绑定约束
  • 目标函数
    • 容器成本权重
    • 物品价值权重
      • 以物品价值最大为目标进行优化,可以舍弃部分物品
    • 自定义目标函数
  • 测试
    • 其他求解器对比
    • 规模测试
    • 极端边界测试
      • 测试某些数据极端不均衡的场景
  • 优化模式
    • 升温以跳出局部最优
    • 可行解优化|任意解优化
      • 优化方式可以选择是否在优化过程中接收非可行解,这需要在优化函数中加入非可行解的惩罚系数,以松弛容量的硬约束。
    • 参数自适应
  • 并行化
    • 多核心
    • 分布式
      • 通过MPI多机通信,对并行效率的影响未经评估。
    • GPU
      • 算法原理上支持单机GPU并行,但实现比较复杂,且没有明确信息显示会比多核更快,当前仅具有成本优势,低优先级。
  • 国际化
    • 英文

About

Large Scale 1D Bin Packing Problem Solver