在该系列快速局部搜索算法中,每个解编码为整数(1, 2, 3, ..., N)上的一个排列pi(1), pi(2), pi(3),...,pi(N),表示在第 i 行上面的皇后的列号是 pi(i)。在这种解的表示方法下,每个解能确保在每行、每列上恰好只有一个皇后。因此,在快速局部搜索算法中仅需考虑如何避免在正对角线、负对角线方向上出现2个或者2个以上的皇后。
算法1 Local Search for N-Queens 输入: N-皇后实例 输出: 解 Begin Do (1) 产生一个随机解 pi (2) for all i, j: where 皇后 pi(i) 或 pi(j) 有冲突 do (2.1) If 交换 pi(i) 与 pi(j) 能减少冲突 (2.2) Then 交换 pi(i) 与 pi(j) Until 解无冲突 End
(2)解的邻域定义 解的邻域定义是局部搜索算法中的关键,也是需要算法设计人员精心研究的范畴。邻域的规模大小决定了局部搜索的收敛速度:当邻域规模较小时,局部搜索很快就可以达到收敛状态(即求得局部最优解);当邻域规模较大时,局部搜索在邻域中的遍历时间将显著增长。极端的情形下,当邻域选择为整个解空间且采用的是邻域中最好解时,局部搜索就退化为一般的全局优化了。 参考文献 [1]Sosic, R.; Gu, J. A polynomial time algorithm for the N-Queens problem. ACM SIGART Bulletin, 1(3). [2]Sosic, R.; Gu, J. Fast search algorithms for the n-queens problem. IEEE Transactions on Systems, Man and Cybernetics, 1991, 21(6): 1572 - 1576. [3]Sosic, R.; Gu, J. 3,000,000 Queens in less than one minute. ACM SIGART Bulletin, 1991, 2(2). [4]Sosic, R.; Gu, J. Efficient local search with conflict minimization: a case study of the n-queens problem. IEEE Transactions on Knowledge and Data Engineering, 1994, 6(5):661 - 668