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

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


                                                    
                                                     |N[D\{v}]|−|N[D]|,如果v ∈ D
                                                    
                                                    
                                           Dscore(v) =                                               (1)
                                                    
                                                      |N[D∪{v}]|−|N[D]|,否则
                 其中, N[D] 包括了当前候选解      D  中的顶点和它的邻居顶点, 因此         N[D] 也可以表示当前候选解       D  所支配的顶点集.
                 同样, |N[D\{v}]|表示集合  D\{v}所支配的顶点个数, |N[D    ∪ {v}]|表示集合  D  ∪ {v}所支配的顶点个数. 根据公式       (1)
                 可知, 当顶点   v 被加入候选解中后, Dscore(v) 为非正数, 当顶点       v 从候选解中移出后, Dscore(v) 为非负数.
                    对于顶点    v, Nscore(v) 则表示顶点  v 的邻居顶点集合中有多少个顶点是在候选解中, 如公式                (2) 所示:

                                                    Nscore(v) = |N(v)∩ D|                             (2)
                    Nscore(v) 可以反映出当顶点     v 被移除时, 对当前候选解可行性的影响, 即当从解中移除顶点                 v 时, 其邻居顶点
                 集合中的在解中的顶点数量将减少             1. 因此, 当某个顶点的    Nscore 值降低至   1, 并且该顶点被移除时, 当前候选解
                 将变得不可行.

                 3   最小弱连通支配集问题的求解

                    在本节中, 提出了一种高效的局部搜索算法求解最小弱连通支配集问题. 该算法框架中提出了基于年龄属性、
                 双层格局检测策略和禁忌策略相结合的避免循环搜索方法、扰动策略和反馈机制, 以优化局部搜索过程. 关于循
                 环问题的详细描述请参见第          3.1  节. 在第  3.2  节中介绍从当前候选解的弱连通元素中选择要添加的顶点的方法, 该
                 方法能够将多个弱诱导子图转变为连通状态. 扰动策略在第                    3.3  节中进行介绍, 反馈机制在第       3.4  节中进行阐述.
                 顶点选择方法在第       3.5  节中进行说明, 算法框架在第      3.6  节中进行介绍.

                 3.1   循环问题
                    循环问题是局部搜索算法的固有问题, 即算法往往会重复访问最近已经访问过的顶点, 这会导致计算资源的
                 浪费并且影响了算法的性能. 目前尚无完全解决这一问题的方法. 为了有效避免循环问题, 本文提出了年龄属性,
                 双层格局检测策略和禁忌策略相结合的方法, 从而改善算法性能. 年龄属性用于判断是否将顶点加入候选解或从
                 当前候选解中移出; 禁忌策略用于防止刚刚加入解中的顶点被立即删除; 双层格局检测策略用于选择要添加到候
                 选解中的顶点. 下面, 将进一步介绍这          3  种方法.

                 3.1.1    年龄属性
                    在局部搜索过程中, 为了得到一个更优质的候选解, 经常需要添加或删除一些顶点以改变当前候选解的结构.
                 因此, 选择哪些顶点进行添加或删除变得非常重要. 然而, 在局部搜索的过程中, 往往会无意地重复删除或加入同
                 一个顶点, 从而导致出现循环问题. 为了有效解决这个问题, 本文提出了一种称为年龄属性的方法. 年龄属性通过
                 为每个顶点赋予一个“年龄值”, 年龄值表示了一个顶点在解中或者不在解中的状态下持续的时间, 这直接指导了
                 顶点的选择优先级. 在选择顶点时, 会优先考虑那些年龄值较大的顶点. 这是因为, 如果一个顶点在解中, 并且该点
                 的年龄值越大, 那么这意味着它在解中存在的时间更长; 反之, 如果一个顶点不在解中, 并且该点的年龄值越大, 就
                 说明它在不在解中的状态下持续的时间更长. 因此, 基于年龄值的优先级排序可以避免顶点的状态长时间不被改
                 变, 这减少了重复访问相同顶点导致的循环问题, 增加了搜索过程中的新鲜度, 鼓励算法探索未充分检验的解空间
                 区域. 一旦年龄大的顶点的状态被改变, 很可能带来结构上的新信息, 推动算法朝向全局或更优解迈进. 这种策略
                 鼓励算法在搜索中不断探索新的搜索空间, 加快了算法对新解的发现. 年龄属性的实现非常简单且计算复杂度较
                 低. 它通过使用    age 值来表示每个顶点的年龄. 具体而言, 其值的初始化和更新规则如下.
                    年龄更新规则      1: 在初始化阶段, 对于每个顶点       v  ∈ V, age[v] 被设置为  0.
                    年龄更新规则      2: 在整个算法框架中, 当一个顶点        v 添加到解中时, 对于该顶点的        age[v]  ← 1, 而对于顶点  u  ∈ V\
                 {v}, age[u] 加  1.
                    年龄更新规则      3: 在局部搜索阶段, 当一个顶点       v 从当前解中移出时, 对于该顶点的               ← 1.
                                                                                    age[v]
                 3.1.2    禁忌策略
                    禁忌策略, 又被称为      tabu  策略, 最初由  Glover [21] 提出, 并被广泛应用于各种局部搜索算法中, 旨在解决循环问
   230   231   232   233   234   235   236   237   238   239   240