Page 27 - 《软件学报》2021年第12期
P. 27

阳名钢  等:求解二维装箱问题的强化学习启发式算法                                                        3691


             11    calculate reward  R =  ( R Y X 0 n )
                                      n
                                      ,
                                n
                  // calculate the actor network gradient
                     1  N
             12   dθ     (R − ∑  n  V  (X ω =  0 n ; )) ∇  θ log ( P Y n  | X 0 n  )
                     N  n= 1
                 // calculate the critic network gradient
                                       2
             13   dω  1  N ∇ =  (R − ∑  V (X ω  n ; ))
                     N  n= 1  ω  n  0
                 // update the network parameters
             14   update θ using dθ and ω using dω
         2.3.2    探索机制
             强化学习的探索机制会直接影响采样的性能,本文在模型的训练阶段,会通过根据概率分布按概率进行随
         机采样下一步作为输出.在测试期间采用的是贪婪的方法,选择概率分布中概率最高的输出.

         3    计算结果

             为了验证强化学习启发式算法并评估其有效性,本小节将进行一系列实验分析.首先阐述了实验数据的生
         成方法,然后对实验环境和参数设置进行说明,最后对实验结果进行分析.
         3.1   实验数据
             由于现有的标准数据集都是较为零散且实例的数量较少,目前缺少较大量的装箱问题的数据集来用于强
         化学习模型的训练,因此本文采用了 Bortfeldt 和 Gehring         [30] 提出的装箱数据生成算法以及 Wang 和 Valenzela      [31]
         提出的装箱数据生成算法.
             Bortfeldt 和 Gehring [30] 生成数据的思路是:通过一些参数,控制生成的矩形的数量、大小、宽高比以及面积
         比等.该算法生成的数据是非零浪费率的,因此我们无法知道生成的数据的最优解.算法 3.1 是该算法的流程,该
         算法需要输入 6 个参数:wC 表示矩形条的宽度;n 表示矩形总个数;nt 表示要生成的矩形的种类; Δ g 和ρ g 这两个
         参数是用于计算矩形的最大边长和最小边长;最后,seed 是随机种子.γ是异质性比,等于 nt/n.首先,算法根据输入
         的参数计算生成矩形的边长范围[dmin g ,dmax g ],然后根据随机种子初始化随机数生成器.再循环 nt 次生成 nt 个
         类型的矩形 rects,矩形长宽的范围介于[dmin g ,dmax g ].最后,循环 n 次生成 n 个矩形 rect_list,rect_list 依照
         rect_list[i]=rects[i%nt],0≤i<n 的规律生成.
             算法 3.1.  数据生成算法 1.
             Input:
             wC: the width of the strip;
             n: thenumber of rectangles;
             nt: the number of rectangle types;
             Δ g ,ρ g ,seed;
             Output:
             rect_list.
             1   dav g =wC/Δ g
             2   dmin g =2*dav g /(1+ρ g )
             3   dmax g =dmin g *ρ g
             4    initialize random number generation by seed
             5   rects,rect_list
             6   for 0→nt do
             7      randomly generated w,w∈[dmin g ,dmax g ]
   22   23   24   25   26   27   28   29   30   31   32