文章目录
前言
依靠环境与强化学习任务的交互,可以很好地反映强化学习的能力表现,但是依赖已有的gym库进行训练,并不能满足设众多paper对实际问题的探究,尤其是组合优化问题,为了说明强化学习在该领域具有一定的可行性,通常会创建该领域的环境与强化学习进行交互,通过学习任务的结果来说明强化学习在该领域能够达到什么水准。
环境的建立对强化学习十分重要,目前,结合深度强化学习研究组合优化问题的文章还是不太多的,本人参照部分博主的代码,针对实际的装箱场景,结合本人对问题的理解,创建了一个简单的3D装箱环境,用以在强化学习方面的交互,进行学习记录。
一、三维装箱问题是什么?
三维装箱问题就是在有限的矩形箱内,将大小,形状各异的物品装载到箱中,使箱的空间占用率最大
二、环境下的操作
- 添加(addPosition_item_info)
参数有两个:第一个是物品装载位置[x,y,z],第二个为物品装载信息[L.W,H] - 取出(popLastPosition_item_info)
有装载就会有卸载,每一次取出上一次被装载的物品以及位置,其它位置不可取 - 重设装箱尺寸(setBinSize)
重新设置装载箱的尺寸 - 展示状态(show3D)
打印当前物品的装载状态 - 清空(clearPosition_item_info)
清空所有的物品以及位置信息,用于重新装载 - 查看(query_info)
查看当前状态的物品位置以及物品信息 - 装载高度图(initHeightGraph,oneHeightGraph)
返回初始高度图与矩阵为1的高度图,方面后续灵活运用
三、代码
1.引入库
代码如下(示例):
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy.matlib as matlib
import numpy as np
2.主体代码
代码如下(示例):
class Bin_Packing_Env:
def __init__(self,Bin_L, Bin_W, Bin_H):
self.Bin_length = Bin_L
self.Bin_width = Bin_W
self.Bin_height = Bin_H
self.Packing_Position = []
self.item_info = []
def box(self,ax,dx, dy, dz): # x,y,z,为平面坐标网格生成(x,y)(y,z)(z,x)三个面的网格
color = self.selectColor()
x, y, z = 0, 0, 0
xx = [x, x, x + dx, x + dx, x]
yy = [y, y + dy, y + dy, y, y]
kwargs = {
'alpha': 1, 'color': color}
ax.plot3D(xx, yy, [z] * 5, **kwargs) # 下底
ax.plot3D(xx, yy, [z + dz] * 5,