平衡表示的遗传算法中局部搜索的影响
1. 引言
在遗传算法(GA)中,处理约束条件通常有三种常见方法:
- 在适应度函数中加入惩罚因子,惩罚偏离所需约束的情况。这种方法实现起来相对简单,只要定义好与所需约束的合适距离概念,几乎可以应用于任何优化问题。然而,它可能会浪费资源,因为GA可能会花费大量的适应度评估来满足这些惩罚因子,从而使搜索工作偏离主要优化目标。
- 使用特定的表示和变异算子。这种方法需要设计合适的交叉和变异算子,使可行的父代产生可行的子代,这让GA探索更小的搜索空间。原则上,由于适应度预算完全用于演化可行解,应该能带来更好的性能。
- 采用修复算子。它能使GA只探索可行空间,其方法是将无效解转换为有效解。
本文重点关注第二种方法,即处理平衡约束,也就是候选解的二进制表示必须有固定数量的1。这种约束在密码学、编码理论和组合设计等多个优化问题中都很重要。
早期,Lucasius和Kateman率先研究了GA中保持平衡的交叉算子,并将其应用于子集选择问题。Millan等人使用GA来演化具有良好密码学特性(如高非线性和低相关性免疫偏差)的平衡布尔函数,并设计了基于计数器的交叉算子来保持父代布尔函数的平衡。后来,平衡交叉算子也被用于其他优化问题,如投资组合优化和多目标k - 子集选择等。
近期的研究对三种平衡交叉算子在不同优化问题上进行了严格的统计调查,发现平衡算子确实比经典的单点交叉结合惩罚因子更具优势,这似乎证实了通过特定变异算子缩小搜索空间能提高GA性能的原则。但这种改进并不显著,且随着问题规模的增大效果不佳。与遗传编程(GP)等其他元启发式算法相比,GA在寻找平衡解的问题上收敛到最优解的能力较弱。