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

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


                                                          V b  的概率是相等的. 在迭代过程      (第  4–10  行) 中, RLTS  算法
                 1/2, 也就是在初始阶段每个顶点被分配到集合             V r  和
                 首先根据概率矩阵生成一个初始解            S initial  (第  5  行), 然后利用局部搜索过程在该初始解的邻域空间进行搜索, 直至
                 找到一个局部最优解        S target  (第  6  行). 为了解决可能存在的对称解问题   (solution symmetry), 子集匹配函数被设计
                 来发现初始解     S initia 和局部最优解  S targe 之间的子集对应关系   (第  9  行). 之后, 通过比较初始解    S initia 和局部最优
                                l
                                                                                              l
                                                t
                 解  S targe 之间的差异, 概率矩阵  P 被更新   (第  10  行). 至此, RLTS  算法的一次迭代过程执行完成. 在运行时间达到
                       t
                 最大时间限制时, RLTS     算法结束迭代并返回发现的最优解.

                 2.1   子集分配
                    本节将详细概述      RLTS  算法的子集分配过程       (算法  1  第  5  行). 概率矩阵  P 中存储了每个顶点   v i  被分配到集合
                 V r  和  V b  的概率   p ir  和  p ib . RLTS  算法依据轮盘选择策略  [17]  来计算分配顶点到集合  V r  或  V b  的概率值, 由轮盘选择
                 策略计算可知顶点       v i  被分配到集合  V r  的概率值是   p ir /(p ir + p ib ), 顶点   v i  被分配到集合  V b  的概率值是  p ib /(p ir + p ib ).
                 具体的子集分配过程如算法          2  所示.
                 算法  2. 子集分配过程.

                 输入: 无向图   G=(V, E), 概率矩阵  P;
                 输出: 初始解   S initial .
                 1. 初始化概率矩阵     P
                 2. for i=1, …, n do
                 3.  l = p ir /(p ir +p ib )
                 4.  if random(0, 1) < l then
                 5.   将顶点   v i 分配至集合  V r
                 6.  else
                 7.   将顶点   v i 分配至集合  V b
                 8. return S initial ;

                 2.2   局部搜索
                    RLTS  算法通过局部搜索过程来提高输入初始解的质量, 它主要由两部分构成: 一是对当前解邻域空间的搜
                 索过程, 二是算法陷入局部最优后的扰动机制. 算法               3  是  RLTS  算法局部搜索过程的伪代码, 局部搜索在每次的迭
                 代过程中通过概率的方式         [18] 选择一个邻域空间来搜索最优解         (第  6–13  行). 如果在该领域空间内所发现的新的最
                 优解优于搜索历史中记录的最优解, 则历史最优解被更新, 否则搜索失败的次数加                          1 (第  14–18  行). 当失败的次数
                 超过  T p  时, 局部搜索的扰动机制被触发       (第  20–22  行). 扰动结束后所产生的新的初始解被局部搜索过程重新搜索
                                                     T r  时, 局部搜索过程结束   (第  3、5  行). 算法中的扰动机制是通过在
                 其邻域空间. 当局部搜索算法的迭代次数超过
                                                                k
                 集合   V r  和  V b  中随机地选择  k ×|V| 对顶点交换来实现的, 其中   是一个通过实验来确定的参数. 下面我们将详细地
                 介绍局部搜索过程的主要组成部分: 领域空间              N 1  和  N 2 , tabu  禁忌机制.
                 算法  3. 局部搜索过程.
                 输入: 初始解   S initial , 局部搜索最大迭代次数  T r , 触发扰动的迭代次数   T p ;
                 输出: 发现的最优解      S best .

                 1. S best  ← S initial
                 2. S ← S initial
                 3. Iter ← 0
                 4. Noimprove ← 0
   253   254   255   256   257   258   259   260   261   262   263