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

前情回顾:
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,位置在原点,我们先来看在原点位置的摆放可能

……不想写了,就这样吧

三维装箱问题是一个组合优化问题,即如何将一组不同大小的三维物体放入最小数量的三维容器中。而遗传算法是解决这类问题的有效工具之一。下面是使用Python实现三维装箱遗传算法的步骤: 1. 定义问题:首先,需要定义三维装箱问题的目标函数和约束条件。目标函数可以是最小化使用的容器数量,约束条件可以包括容器的最大尺寸、物体的尺寸和数量限制等。 2. 初始化种群:随机生成一组初始解作为种群,并计算每个解的适应度。适应度可以根据目标函数的值来评估解的优劣程度。 3. 选择操作:根据适应度选择一部分优秀的个体作为父代。可以使用轮盘赌选择、锦标赛选择等策略。 4. 交叉操作:从选出的父代中随机选择两个个体,进行交叉操作,生成新的个体。交叉可以按照一定的概率在两个个体之间进行交叉。 5. 变异操作:对交叉后的个体进行变异操作,以增加种群的多样性。变异可以随机改变个体中的某些基因值。 6. 更新种群:将交叉和变异得到的个体加入种群,并计算每个个体的适应度。 7. 父代选择:根据适应度选择一部分优秀的个体作为下一代的父代。 8. 终止条件判断:判断是否达到终止条件,如迭代次数达到预设值或找到满足要求的解。 9. 重复步骤3到步骤8,直到达到终止条件。 通过以上步骤,可以使用遗传算法求解三维装箱问题。具体实现时,可以使用Python中的遗传算法库,如DEAP (Distributed Evolutionary Algorithms in Python)等,来简化编码和实现过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [遗传算法python(含例程代码与详解)](https://blog.csdn.net/qq_38048756/article/details/109256062)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

isSamle

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

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

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

打赏作者

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

抵扣说明:

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

余额充值