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并行,但实现比较复杂,且没有明确信息显示会比多核更快,当前仅具有成本优势,低优先级。
- 国际化
- 英文