3D货物装箱0.3秒完成:MaxRects算法结合LIFO与全旋转
一个Django网络服务解决了卡车、集装箱和货车车队的3D货物装箱问题。该算法在0.19–0.3秒内处理400多个SKU物品,考虑了LIFO、90%支撑面积和6轴旋转。与Three.js的接口实时可视化结果,支持Excel上传和手动输入。
从Telegram机器人到完整平台的演进
项目始于优化引擎:0.4秒解决10,000点的旅行商问题,不到1秒打包复杂形状如三叶形。一个Telegram机器人接受带尺寸的JSON并输出坐标,但零售业需要一个网络界面。
关键产品需求:
- 车队和货物的双面板界面。
- 带验证的Excel解析。
- 使用Three.js的交互式3D可视化。
技术栈:Python/Django、Docker中的PostgreSQL、Three.js前端。优先考虑速度和实用性——LIFO比完美密度更重要。
3D MaxRects算法:物理优先于数学
改进的3D MaxRects处理货物空间中的自由平行六面体列表,避免全坐标枚举。向量化实现了8辆车队0.19–0.3秒的性能。
物理可行性参数:
- 全旋转(6个投影): 长物品(2400毫米)在尺寸允许时尝试垂直或边缘位置。
- 支撑面积90%: 箱子至少90%面积支撑在下层,消除不稳定方案。
- LIFO顺序: 考虑现实仓库的卸载顺序。
市场对比:竞争对手需要几分钟或几小时,常忽略LIFO和物理约束。
架构:Django、Docker和可扩展性
后端基于Docker容器中的Django + PostgreSQL。Nginx + Gunicorn(3个工作者)确保容错性。443端口的HTTPS绕过企业防火墙。在8 GB服务器上,处理400个SKU时平均内存使用率为29%。
通过Django Auth授权:数据按用户隔离,计算历史记录在ORM中。每个用户仅看到自己的车队和货物。
界面:灵活输入和微调
双面板布局分隔车队(右侧)和货物(左侧)。车队:尺寸、载重能力、数量。货物:大小、重量、数量、参数(LIFO、堆叠限制)。
输入选项:
- 手动表单进行调整。
- 带验证的批量Excel上传。
优化复选框:
- 倾斜: 允许/限制易碎货物的旋转。
- 车队优化: 优先填满大型车辆以减少行程。
可视化和结果导出
0.19–0.3秒的计算输出Three.js的3D场景。按SKU颜色编码,交互式旋转,LIFO和支撑检查。导出:PDF报告或带X、Y、Z坐标的Excel。
生产部署
Gunicorn带3个工作者 + Nginx反向代理。Docker确保自主性。测试:98%覆盖率,多用户负载下的稳定性。
关键要点
- 400个SKU和8辆车队0.19–0.3秒的速度。
- 物理约束:LIFO、90%支撑、6轴旋转。
- 物流界面:Excel、3D可视化、数据隔离。
- 生产栈:Django、Docker、Nginx/Gunicorn。
- 可扩展性:低资源消耗。
— Editorial Team
暂无评论。