Page 260 - 《软件学报》2025年第8期
P. 260

田新亮 等: 一种高效的求解最小负载着色问题的局部搜索算法                                                   3683


                 的子集合. RLTS   算法采用禁忌表      (tabu list) [19] 的方式来阻止这种短期循环  (short-term cycling) 现象的产生. 当顶点

                 v 被从当前的子集合移动到另一个子集合后, 它将被禁止在未来的                     tt  次迭代内移动回最初的子集合. 只有当移动
                 该顶点所产生解的质量优于当前最优解的质量时, 该禁忌策略可以被违背. RLTS                          算法中的禁忌表是通过一个
                                                                           ,
                                                           j j = 0 表示子集合
                 |V|×2 的二维数组   T  来实现的. 每次顶点    v 被从子集合  (                V r j = 1 表示子集合  V b ) 移除后,  T[v][j]
                                                                         Iter < T[v][ j] 时, 顶点   禁止被移回子集
                                                                                          v
                 被更新为   Iter +tt, 其中  Iter  是当前的迭代次数. 在算法的迭代过程中, 当
                                        v
                 合   j. 当  Iter > T[v][ j] 时, 顶点   不受该规则限制.

                 2.3   子集匹配
                    MLCP  问题旨在将集合      V  中的顶点划分到两个不相交的子集           V r  和  V b . RLTS  算法用数组去表示一个可行解,
                 下标为   i  的元素置为   1  或  0  表示顶点  v i  被分配到集合  V r  或  V b . 在  RLTS  算法中, 强化学习机制是通过初始解
                 S initia 和局部最优解  S targe 各自分配到集合   V r  和  V b  中的顶点个数差异来学习的. 很显然, 这必然会导致一种解对
                    l
                                    t
                 称  (solution symmetry) 问题  [20] . 例如, 无向图  G  有  6  个顶点  {v 1 ,v 2 ,v 3 ,v 4 ,v 5 ,v 6 }, 存在两个解, 解  S 1 = {V r ,V b }, 其中
                           ,
                                                                  ,
                                                                    ′
                                                         ′
                                                  ′
                                               ′
                 V r = {v 1 ,v 2 ,v 3 } V b = {v 4 ,v 5 ,v 6 }, 解  S 2 = {V ,V }, 其中   V = {v 4 ,v 5 ,v 6 } V = {v 1 ,v 2 ,v 3 }. 其实解   S 1  和  S 2  是相同的, 但是在
                                                         r
                                               r
                                                                    b
                                                  b
                 算法中去表示这两个解的数组           {0,0,0,1,1,1} 和  {1,1,1,0,0,0} 会被看作是不同的解. RLTS  算法设计子集匹配函数
                 (subset matching, 算法  1  第  9  行) 来解决该问题, 具体方法如下.
                                                                     S target = {V ,V }. 算法通过下面的方式来处理对
                                                                              ′
                                                                            ′
                    对于初始解     S initial = {V r ,V b } 以及局部搜索提高后的局部最优解       r  b
                                  ′       ′      ′       ′                             S target  两个子集中的顶
                 称解问题: 如果    |V r ∩V |+|V b ∩V | < |V r ∩V |+|V b ∩V |, 子集匹配函数选择交换局部最优解
                                  r       b      b       r
                 点, 否则, 局部最优解    S target  的两个子集保持不变.

                 2.4   强化学习机制
                    RLTS  算法中的强化学习机制        [21]  是根据初始解  S initial  和经过局部搜索后得到的局部最优解      S target  之间各个顶
                                                                           v
                 点   v 所属集合的差异来学习的, 它是通过增加或者减小概率矩阵                 P 中顶点   分配到集合     V r  或者  V b  的概率值来实
                 现的, 具体步骤如下.
                    在经历局部搜索后, 如果顶点          v 依然被保留在原有的集合中, RLTS        算法就采用公式       (4) 来增加顶点   v 保留在
                 原有集合中的概率值, 以及减小移动到另一个集合的概率值. 我们用                    u 来表示原有的集合,      u ∈ {0,1}.

                                                   
                                                    α+(1−α)p ij ,  j = u
                                                   
                                                   
                                               p ij =                                                (4)
                                                   
                                                     (1−α)p i j ,  j = 1−u
                    如果在经历局部搜索后, 顶点         v 从集合  V u  移动到集合  V 1−u , RLTS  算法则降低顶点   v 分配到集合  V u  的概率值,
                 增加  v 分配到集合   V 1−u  的概率值. 具体公式如下, 其中    β 是惩罚因子,   γ 是补偿因子.

                                             
                                              (1−γ)(1−β)p ij ,         j = u
                                             
                                             
                                          p ij =                                                     (5)
                                             
                                               γ +(1−γ)β+(1−γ)(1−β)p i j ,  j = 1−u
                    最后, RLTS  算法为了防止顶点       v 被过于贪心地分配到某个集合内, 强化学习机制限制概率值的上限和下限区
                 间为  [0.2,0.8], 这为  RLTS  算法生成初始解增添了一些随机性.

                 3   IRLTS  算法
                    IRLTS  算法是我们在    RLTS  算法的基础上提出两点优化策略后得到的一个高效的启发式算法. 第                      3.1  节和第
                 3.2  节将详细地介绍针对     RLTS  算法不足所提出的两点优化策略: 一度顶点规则和                TSBMS  策略. 经过这两个策略
                 优化后, 生成新的高效算法. 我们将其命名为            IRLTS  算法, 该算法将在第     3.3  节介绍.

                 3.1   一度顶点规则
                    MLCP  问题是一个经典的       NP  完全问题, 它的解空间随测试用例的顶点数呈指数增长. 为了约简测试用例的
                 顶点数, 进而降低     MLCP  问题的解空间规模, 我们提出一度顶点规则来约简测试用例的顶点数目. 下面给出该规
                 则的有效性分析以及具体定义.
   255   256   257   258   259   260   261   262   263   264   265