python:关于三维装箱问题的算法研究-5

本文探讨了三维装箱问题中的算法改进,通过分析不同装载方法的优劣,引入了贪婪算法与动态规划算法来提高装载效率及空间利用率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前情回顾:
python:关于三维装箱问题的算法研究-1
python:关于三维装箱问题的算法研究-2
python:关于三维装箱问题的算法研究-3
python:关于三维装箱问题的算法研究-4


之前的研究一直是基于组合启发式算法对货物在容器中堆叠的模拟。
在这里插入图片描述

演示网址, 如果打不开就是我服务器内存爆掉了,254/3年就这种效果了😂

但这种模拟不能真正的解决实际问题,只是机械的执行装载,对情况缺乏一定的判断以及判断后的处理方法。就会导致如下的情况👇:
在这里插入图片描述

可以看到,依赖之前的算法会导致货物堆叠参差不齐,有很多没被利用到的空隙。

基于残余空间的利用考虑,最初的想法是计算每个物件边长的最大公因数,然后把整个空间切分为按照公因数为单位一的立体小方块。

每个物件的放置其实就是对应多个立体小方块的消失。这就有点像排水法测体积,装进去一个货物,置换出一些空间。

那么,我们只需要读取一些连续的单位方块,就能确定能否放下,每次放下货物就把这些方块从列表中删除即可。

不过因货物尺寸的原因,即便是公因数也会造成这个单位方块集合非常大,一种替代的方法就是不直接生成这个集合列表,每次都对空间轴线进行遍历。

但是不管采用哪个方法,都极大的消耗计算资源,在生产过程中难以实现。


实际上 ,我们在装载的计算过程中,并不是所有的情况都是完全没有规则的,在不同的情况使用不同的装载方法,能使装载效率更高,且更规整。

基于这种思路,接下来结合贪婪算法动态规划算法对问题进一步进行研究。

动态规划算法
通过拆分问题,定义问题状态和状态之间的关系,使得问题能够分别以不同的方式去解决。

承接前面的研究内容,一个货物被摆放到容器内可以用两组三维坐标表示:
(x , y , z)表示货物所落在的坐标位置,(inx , iny , inz)表示货物落在三个轴朝向的长度。
在这里插入图片描述
针对这两组三维数据,分别有

8种放置点所在位置考虑

000# 位置坐标全部为0,位置在原点001# 位置坐标X轴,Y轴为0,位置在Z轴上010# 位置坐标X轴,Z轴为0,位置在Y轴上011# 位置坐标X轴为零,位置在OYZ面上100# 位置坐标Y轴,Z轴为0,位置在X轴上101# 位置坐标Y轴为0,位置在OXZ面上110# 位置坐标Z轴为0,位置在OXY面上111# 位置坐标全部不为0,位置在容器空间内部

6种货物朝向考虑

(l,w,h)# 侧放
(w,l,h)# 侧放旋转
(w,h,l)# 立放
(h,w,l)# 立放旋转
(l,h,w)# 躺放
(h,l,w)# 躺放旋转

贪婪算法
先忽略整体,对问题做出在当前最佳选择。得到的某种意义上的局部最优解

因为我们实际生产中,车柜容器的长度较长,相对较小的一面是宽高组成的侧面,所以最优做法是假定容器无限长,那么因为终末造成的缺损对整体可以忽略不计
在这里插入图片描述
既然暂时不考虑终末的缺损,那就是有限考虑把内侧每一层侧面填满,对宽高侧面填充的越密实,那么向外延伸就能把整个容器填充的密实。
又因为有时候顶部空间实在难以利用,所以我们在填充时先保证宽方向极限填充。
在这里插入图片描述
在这里插入图片描述


基于以上,我们就可以把问题肢解成:
什么位置,采用什么方式,摆放什么朝向的货物,能够保证对切割出来的局部填充空间利用率最大。

如果脑力充沛,头发茂密,计算机配置优秀
也可以考虑在每步放置的位置,尝试不同的方法,选择利用率最大的,然后进行到下一步


原点考虑

(0,0,0)# 位置坐标全部为0,位置在原点,我们先来看在原点位置的摆放可能

……不想写了,就这样吧

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

isSamle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值