进化算法

来源:互联网 发布:一体化智能马桶 知乎 编辑:程序博客网 时间:2024/06/08 05:37

进化算法,也被成为是演化算法(evolutionaryalgorithms,简称EAs),它不是一个具体的算法,而是一个“算法簇”。进化算法产生的灵感借鉴了大自然中生物的进化操作,它一般包括基因编码,种群初始化,交叉变异算子,经营保留机制等基本操作。与传统的基于微积分的方法和穷举方法等优化算法相比,进化计算是一种成熟的具有高鲁棒性和广泛适用性的全局优化方法,具有自组织、自适应、自学习的特性,能够不受问题性质的限制,有效地处理传统优化算法难以解决的复杂问题(比如NP难优化问题)。

进化算法还经常被用到多目标问题的优化求解中来,我们一般称为进化多目标优化算法(MOEAs)。目前进化计算的相关算法已经被广泛用于参数优化、工业调度、资源分配、复杂网络分析等领域。

1genetic algorithm 遗传算法

        遗传算法(GeneticAlgorithm,简称GA)是一种最基本的进化算法,它是模拟达尔文生物进化理论的一种优化模型,最早由J.Holland教授于1975年提出。遗传算法中种群分每个个体都是解空间上的一个可行解,通过模拟生物的进化过程,从而在解空间内搜索最优解。

        个体的编码方式确定以后,针对上图操作的具体描述如下:

  Step 1 种群初始化:根据问题特性设计合适的初始化操作(初始化操作应尽量简单,时间复杂度不易过高)对种群中的N个个体进行初始化操作;

  Step 2个体评价:根据优化的目标函数计算种群中个体的适应值(fitness value);

  Step 3迭代设置:设置种群最大迭代次数gmax,并令当前迭代次数g=1

  Step 4个体选择:设计合适的选择算子来对种群P(g)个体进行选择,被选择的个体将进入交配池中组成父代种群FP(g),用于交叉变换以产生新的个体。选择策略要基于个体适应值来进行,假如要优化的问题为最小化问题,那么具有较小适应值的个体被选择的概率相应应该大一些。常用的选择策略有轮盘赌选择,锦标赛选择等。

  Step 5交叉算子:根据交叉概率pm(预先指定,一般为0.9)来判断父代个体是否需要进行交叉操作。交叉算子要根据被优化问题的特性来设计,它是整个遗传算法的核心,它被设计的好坏将直接决定整个算法性能的优劣。

  Step 6变异算子:根据变异概率pc(预先指定,一般为0.1)来判断父代个体是否需要进行变异操作。变异算子的主要作用是保持种群的多样性,防止种群陷入局部最优,所以其一般被设计为一种随机变换。

通过交叉变异操作以后父代种群FP(g)生成了新的子代种群P(g+1),令种群迭代次数g=g+1,进行下一轮的迭代操作(跳转到Step 4),直至迭代次数达到最大的迭代次数。

通过交叉操作,原始的两个个体组合生成了两个新的个体组合,这就相当于在解空间进行搜索,每个个体都是解空间的一个可行解。

相关源代码见百度云中csdn下文件夹GA

 

2Memetic algorithm文化基因算法

        文化基因算法(MemeticAlgorithm,简称MA),也被称为是“密母算法”,它是由Mpscato1989年提出的。文化基因算法是一种基于种群的全局搜索和基于个体的局部启发式搜索的结合体,它的本质可以理解为:

Memetic = GA + Local Search

memetic算法实质上为遗传算法加上一个局部搜索(Local Search)算子。局部搜索算子可以根据不同的策略进行设计,比如常用的爬山机制、模拟退火、贪婪机制、禁忌搜索等。

 

3、进化多目标优化算法Multi-objective evolutionary algorithm MOEA

        对于一个优化问题而言,如果其只有一个目标方程,那么我们称之为单目标优化问题;而一旦方程个数达到两个或者两个以上,那么它被相应的称之为多目标优化问题(Multi-objective Optimization Problems,简称为MOPs)。

对于一个多目标优化问题而言,问题的最优解可能不止一个,而应该是一组,我们通常称这组最优解为相应多目标优化问题的一个非支配解集,或者称为是Pareto解集,其中的每一个解我们称之为Pareto解(Pareto是引自一个经济学的术语)。求解多目标优化问题的解法有很多,比如常见的目标规划方法,目标分解方法,目标化多为少方法(将多个目标表示为一个)等。进化算法在解决多目标问题上有着天然的优势,对于一个进化多目标优化算法而言,它可以对多个目标函数同时进行优化,而且输出一组非支配的Pareto解集,从而可以有效地求解多目标问题。

 常用的进化多目标优化算法有Deb提出基于拥挤度距离度量的NSGA-II,张青富老师提出的基于分解思想的MOEA/D算法,以及西电公老师提出的基于免疫克隆机制的NNIA算法等。最近,Deb等人在NSGA-II的基础上又提出一种针对2~16个目标函数同时优化的高维问题的NSGA-III算法。

源代码见百度云csdn下文件夹NSGA-II