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

李睿智 等: 局部搜索算法求解最小弱连通支配集问题                                                       3665


                 例共有   41  个, 实例的顶点数取值范围为       80–400, 规模相对较大.
                    NDR  实例: 该组基准实例是由在线网络数据存储库              (network data repository, NDR) 中具有  100–21 498  个顶点
                 的无权连通图转换而来的, 该组基准实例共有              24  个, 规模分布较广.

                 4.2   比较算法
                    CPLEX  是一种通用的混合整数规划求解器, 被广泛用于求解组合优化问题. 若给予足够的求解时间和空间,
                 则  CPLEX  最终一定能找到精确解. 在本文的实验中, CPLEX           的结果是由    CPLEX v12.9 [16] 求解得到.
                    MWCDS   是由  Ding  等人  [13] 提出的一种线性时间自稳定算法, 而         MWCDS   是一种线性时间复杂度算法.
                 MWCDS  对具有   n  个顶点的任意连通图使用同步守护进程在             O(n) 步骤中终止.
                    MA  [15] 是一种求解最小弱连通支配集问题的模因算法, 它首先初始化种群, 然后通过选择、交叉、变异等操
                 作产生一个不可行解, 再通过         MWCDS  算法将该不可行解变成可行解, 随后通过一个简单的局部搜索过程来优化
                 该可行解.
                    GRASP  [16] 是一种求解最小弱连通支配集问题的贪婪随机自适应搜索算法, 它利用平衡随机和贪婪策略构造
                 初始解, 然后利用简单的局部搜索对初始解进行优化.
                    GRASP_impLS [16] 是对  GRASP  算法的改进, 改进部分主要在局部搜索阶段, 它引用了概率参数来增加删除顶
                 点的多样性, 同时如果当前解从不可行到可行时, 首先从当前候选解的                      2  层邻居内选择顶点使当前候选解变为支
                 配集, 然后从集合     SWCE  中选择顶点使当前的候选解变成一个弱连通支配集.

                 4.3   实验环境与参数
                    本文提出的     FPLS  算法用  C++编程语言实现的, 并由       GNU g++使用-O  选项进行编译. 本文的算法实验是在
                 一台具有    Intel(R) Core(TM) i5-11400H@2.70 GHz 和  8 GB  内存的计算机上进行的. CPLEX、MWCDS、MA、
                 GRASP  和  GRASP_impLS  的实验结果见文献     [16]. 对于  CPLEX  求解器, 设置了  3 600 s 的时间限制. 本文提出的
                 算法和其他    4  个对比算法在每个实例上都运行了            10  次, 并记录找到的最小解和平均解, 并将求解每个实例的截
                 止时间设置为     300 s. 为了获得更多高质量的候选解, 针对所提出的算法, 进行了多次实验, 最终确定了其中涉及
                 的参数. 其中, 外层迭代次数和内层迭代次数均设置为                  1 000, 概率参数  wp  设置为  0.35, 扰动顶点个数设置为
                 0.01×|V|.

                 4.4   在随机 UDG 实例上的实验结果
                    表  1  呈现出了  CPLEX  求解器和其他算法在随机        UDG  实例上的实验结果. “Nodes”列表示       Area(N×N) 领域范
                 围内的顶点数量. R     和|E|列分别表示文献      [25] 中提到的半径值和实例的边数. CPLEX          求解器求解出来的结果中,
                 “Solu”列表示在指定的时间内求解出来的最好的解, 当求解时间超过了                    3 600 s 依然没有找到一个可行解, 那么将
                 这个解记录为“N/A”, “Stat”列表示找到最优解的时间, 当运行时间达到               3 600 s, CPLEX  停止运行, 此种情况无法保
                 证找到解的最优性, 此时会被记录为“Feasible”, 这些符号定义用于表                  1−表  4. 对于  MWCDS、MA、GRASP、
                 GRASP_impLS  和  FPLS  算法, “Best”列表示对应算法找到的最小解, “Avg”列表示         10  次运行所得到的平均解. 在
                 MWCDS  中, “time”列表示找到最小解所需的时间. 每个表的底部还求出了每个算法在每组实例上的“最小值”“最
                 大值”“平均值”和“标准差”.
                    从表  1  中可以看出, 对于该组的      24  个实例, CPLEX  求解器在   14  个实例上得到了最优解, 在       7  个实例上给出
                 了可行解, 但并未能证明其最优性, 在其余的             3  个实例上, 无法在给定的时间内找到一个可行解. 对比               5  个启发式
                 算法可发现, MA、GRASP_impLS       和  FPLS  能够在所有    24  个随机  UDG  实例上找到最小解. 而       MWCDS  和
                 GRASP  分别可以找到     13  个和  18  个最小解. 平均解方面, 本文提出的算法        FPLS  能找到更优的平均解, 除了在实
                 例  (100_25_25_45) 上, 在其他  23  个实例上  MA、GRASP_impLS  和  FPLS  得到的平均解相等. 而      MWCDS  和
                 GRASP  分别在  5  个和  18  个实例上能得到与    FPLS  相等的平均解. 总的来说, MA、GRASP_impLS        和  FPLS  在随
                 机  UDG  实例上的最小解和平均解均优于          MWCDS   和  GRASP  算法. 此外, MA、GRASP_impLS   和  FPLS  算法在
                 这组实例上的“最小值”“最大值”“平均值”和“标准差”均相等, 并且优于                  MWCDS   和  GRASP  算法.
   237   238   239   240   241   242   243   244   245   246   247