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

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


                 最后, 本文引用了一个候选集合          SWCE  来保存当前解的弱连通元素, 以确保添加的顶点能够使解变得可行. 基于以
                 上讨论, FPLS_Search  过程在算法   3  中得到了详细描述.

                 算法  3. FPLS_Search  过程.
                 输入: 初始解   W, 最大循环迭代次数      ITEM_NUM;
                 输出: 局部最优的弱连通支配集          W'.

                 1. W'  ← W;
                 2. it  ← 1;
                 3. Noimprovestep  ← 1;
                 4. WHILE it  < ITEM_NUM DO
                 5.  WHILE 当前解   W 是一个弱连通支配集 DO
                 6.   IF |W|  < |W'| THEN
                 7.      W'  ← W; /*更新最小解*/
                 8.      Noimprovestep  ← 1;
                 9.   ELSE
                 10.    Noimprovestep  ++;
                 11.   根据移除顶点规则       1  从当前解  W  中挑选一个顶点     w;
                 12.   W ← W\{w};
                 13.   根据格局更新规则       3  更新顶点  w  的  2  层邻居内所有顶点   v 的格局值   ConfChange;
                 14.   根据年龄更新规则       3  更新顶点  w  的年龄值  age[w] 为  1;
                 15.  根据移除顶点规则      2  从当前解  W  中挑选一个顶点     w;
                 16.  W ← W\{w};
                 17.  根据格局更新规则      3  更新顶点  w  的  2  层邻居内所有顶点   v 的格局值   ConfChange;
                 18.  根据年龄更新规则      3  更新顶点  w  的年龄值  age[w] 为  1;
                 19.  IF Noimprovestep%50  = 0 THEN
                 20.   FOR i  = 1 TO 0.01×|V|
                 21.    根据移出顶点规则        2  从当前解  W  中挑选一个顶点     w;
                 22.    将挑选的顶点      w  从当前解  W  中移出;
                 23.    根据格局更新规则        3  更新每一个移出顶点      w  的  2  层邻居内所有顶点   v 的格局值   ConfChange;
                 24.    根据年龄更新规则        3  更新顶点  w  的年龄值  age[w] 为  1;
                 25.  WHILE 存在没有被支配的顶点 DO
                 26.   根据添加顶点规则       2  从当前解  W  的  2  层邻居中挑选一个顶点     w;
                 27.   W ← W  ∪ {w};
                 28.   根据年龄更新规则       2  更新顶点  w  的年龄值  age[w] 为  1, 其余顶点  v 的年龄值 age[v] 加  1;
                 29.   根据格局更新规则       2  更新顶点  w  的  2  层邻居内所有顶点   v 的格局值   ConfChange;
                 30.   add_frequency[w]++;
                 31.  WHILE 当前解   W 不是一个弱连通支配集 DO
                 32.   更新当前解的弱连通元素集合           SWCE;
                 33.   根据添加顶点规则       3  从当前解的弱连通元素集合        SWCE  中挑选一个顶点     w;
                 34.   W ← W  ∪ {w};
                 35.   根据年龄更新规则       2  更新顶点  w  的年龄值  age[w] 为  1, 其余顶点  v 的年龄值 age[v] 加  1;
   235   236   237   238   239   240   241   242   243   244   245