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

3664                                                       软件学报  2025  年第  36  卷第  8  期



                 36.   根据格局更新规则       2  更新顶点  w  的二层邻居内所有顶点       v 的格局值   ConfChange;
                 37.   add_frequency[w]++;
                 38.   将顶点   w  添加到  tabu  列表中;
                 39.  it++;
                 40. RETURN W’;

                    在算法   3  的描述中, 第  1–3  行将局部最优解初始化为当前解, 算法迭代步数和当前候选解的质量没有改善的迭
                 代步数都初始化为       1. 外层循环从第    4–40  行. 在第  6–10  行中, 当当前候选解  W  为弱连通支配集时, 将     W  与局部最
                 优解  W'进行比较. 如果    W  优于  W', 则将  W'更新为  W, 并将最小解没有改善的迭代次数          Noimprovestep  值初始化为
                 1; 否则, 将  Noimprovestep  值加  1. 然后, 在第  11/12  行中, 算法逐个从候选解中删除顶点, 直到候选解变得不可行.
                 在这个阶段, 算法根据移出顶点规则           1  从候选解中选择顶点. 具体来说, 随机生成一个概率             p, 如果  p  小于  wp, 则从
                 候选解中选择一个具有最大          Dscore 值的顶点; 否则, 从候选者中选择一个具有最小            Nscore 值的顶点. 如果有多个
                 顶点满足该条件, 则选择一个年龄值           age 最大的顶点, 但不能是锁定顶点. 接下来, 根据格局更新规则                3, 更新每个
                 顶点  u  在  N 2 (w) 中的  ConfChange[u] 值  (第  13  行), 根据年龄更新规则  3  更新顶点  w  的年龄值  age[w] 为  1 (第
                 14  行). 在第  15/16  行中, 当  W  不是弱连通支配集时, 根据移出顶点规则 2      从候选解中删除一个顶点. 具体而言, 随
                 机生成一个概率      p, 如果  p  小于  wp, 则选择一个具有最大   Dscore 值的顶点; 否则, 选择一个具有最小        Nscore 值的顶
                 点. 如果有多个顶点满足该条件, 则选择一个年龄值               age 最大的顶点, 但该顶点不能是锁定顶点, 并且不能在禁忌列
                 表中. 然后根据格局更新规则         3, 更新每个顶点    u  在  N 2 (w) 中的  ConfChange[u] 值  (第  17  行), 根据年龄更新规则  3
                 更新顶点   w  的年龄值   age[w] 为  1 (第  18  行). 在第  19–22  行中, 当当前候选解的质量没有改善的迭代步数达到         50
                 步时, 根据移出顶点规则       2  从候选解中删除    0.01×|V|个顶点. 接着根据格局更新规则        3, 更新每个顶点    u  在  N 2 (w) 中
                 的  ConfChange[u] 值  (第  23  行), 根据年龄更新规则  3  更新顶点  w  的年龄值  age[w] 为  1 (第  24  行). 在第  25–27  行
                 中, 当存在没有被支配的顶点时, 根据添加顶点规则               2, 算法从顶点集合     N 2 (W) 中随机选择一个具有最大      Dscore 值
                 的顶点. 然后将该顶点添加到候选解中, 并根据年龄更新规则                  2  和格局更新规则    2 (第  28/29  行), 更新每个顶点的年
                 龄值  age 以及每个顶点    u  在  N 2 (w) 中的  ConfChange[u] 值. 在第  30  行中, add_frequency[w] 值加  1. 接下来, 在第  32
                 行中, 更新集合    SWCE. 在第  31–38  行中, 当  W  不是弱连通支配集时, 算法将逐一添加一些顶点到候选解中, 直到候
                 选解成为一个可行的弱连通支配集. 在这个阶段, 算法根据添加顶点规则                       3  从集合  SWCE  中选择顶点. 具体而言,
                 选择一个具有最大      Dscore 值的顶点. 如果有几个顶点具有相同的最大值, 并且其中有一个                  ConfChange 值等于  1  的
                 顶点, 则选择一个年龄值       age 最大的顶点    (第  33  行). 然后根据年龄更新规则     2  和格局更新规则    2, 更新每个顶点的
                 年龄值   age 以及每个顶点    u  在  N 2 (w) 中的  ConfChange[u] 值  (第  35/36  行). 在第  37  行中, add_frequency[v] 值加  1.
                 然后将添加到解中的顶点添加到           tabu  列表中  (第  38  行). 最后, 在第  40  行中, 返回局部最优解  W'.

                 4   实验比较

                    本节进行多组实验来评估本文提出的算法               FPLS. 在随机  UDG  实例、LPNMR’09 实例、一般     UDG  实例和  NDR
                 实例上对算法进行测试. 4 组实例均由牛当当为本文提供. 将               FPLS  与  CPLEX  精确求解器和  MWCDS、MA、GRASP
                 及  GRASP_impLS  这  4  种最先进的算法进行比较. 接下来, 对      4  组实例、CPLEX   求解器及   4  种对比算法进行介绍.

                 4.1   实例介绍
                    随机  UDG  实例: 该组基准实例采用       Jovanovic 等人  [25] 提出的方法随机生成的, 该方法来自自组织网络聚类问
                 题. 该问题是最小弱连通支配集问题的重要应用场景. 该组基准实例共有                       24  个, 实例的顶点数取值范围为       15–30,
                 规模相对较小.
                    LPNMR’09  实例: 该组基准实例源于第        10  届国际逻辑规划和非单调推理会议, 该组基准实例共有                 9  个, 实例
                 的顶点数取值范围为       40–90, 规模相对较小.
                    一般  UDG  实例: 该组基准实例最初由        Jovanovic 等人  [25] 提出, 实例来源于自组织网络聚类问题. 该组基准实
   236   237   238   239   240   241   242   243   244   245   246