遗传算法(Genetic Algorithm, GA)最先是由美国Michgan大学的John Holland于1975年提出的。遗传算法是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型。它的思想源于生物遗传学和适者生存的自然规律,是具有“生存+检测”的迭代过程的搜索算法。遗传算法以一种群体中的所有个体为对象,并利用随机化技术指导对一个被编码的参数空间进行高效搜索。其中,选择、交叉和变异构成了遗传算法的遗传操作;参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定等5个要素组成了遗传算法的核心内容。
一.遗传算法基本步骤
遗传算法是一种基于生物自然选择与遗传机理的随机搜索算法,与传统搜索算法不同,遗传算法从一组随机产生的称为“种群(Population)”的初始解开始搜索过程。种群中的每个个体是问题的一个解,称为“染色体(chromosome)”。染色体是一串符号,比如一个二进制字符串。这些染色体在后续迭代中不断进化,称为遗传。在每一代中用“适(fitness)”来测量染色体的好坏,生成的下一代染色体称为后代(offspring)。后代是由前一代染色体通过交叉(crossover)或者变异(mutation)运算形成的。在新一代形成过程中,根据适度的大小选择部分后代,淘汰部分后代。从而保持种群大小是常数。适值高的染色体被选中的概率较高,这样经过若干代之后,算法收敛于最好的染色体,它很可能就是问题的最优解或次优解。
1.编码:GA在进行搜索之前先将解空间的解数据表示成遗传空间的基因型串结构数据,这些串结构数据的不同组合便构成了不同的点。
2.初始群体的生成:随机产生N个初始串结构数据,每个串结构数据称为一个个体,N个个体构成了—个群体。 GA以这N个串结构数据作为初始点开始迭代。
3.适应性值评估检测:适应性函数表明个体或解的优劣性。对于不同的问题,适应性函数的定义方式也不同。
(4)选择:选择的目的是为了从当前群体个选出优良的个体,使它们有机会作为父代为下一代繁殖子孙。遗传算法通
过选择过程体现这一思想,进行选择的原则是适应性强的个体为下一代贡献一个或多个后代的概率大。选择实现了
达尔文的适者生存原则。
(5)交叉:交叉操作是遗传算法中最主要的遗传操作。通过交叉操作可以得到新一代个体,新个体组合了其父辈个体
的特性。交叉体现了信息交换的思想。
(6)变异:变异首先在群体中随机选择一个个体,对于选中的个体以一定的概率随机地改变串结构数据中某个串的值。
同生物界一样,GA中变异发生的概率很低,通常取值在0.001~0.01之间。变异为新个体的产中提供了机会。
二.遗传算法的特点
1.GA是对问题参数的编码组进行计算,而不是针对参数本身。
2.GA的搜索是从问题解的编码组开始搜素、而不是从单个解开始。
3.GA使用目标函数值(适应度)这一信息进行搜索,而不需导数等其他信息。
4.GA算法使用的选择、交叉、变异这三个算子都是随机操作, 而不是确定规则。
三.遗传算法的MATLAB实现
1.编码和种群生成
function [pop] =initializega(num,bounds,evalFN,evalOps,options)
% pop – the initial,evaluated, random population
% num – the size of thepopulation, i.e. the number to create
% bounds – the number of permutations in an individual (e.g., number
% of cities in a tsp
% evalFN – the evaluation fn, usually the name of the .m file forevaluation
% evalOps- any options to be passed to the eval function defaults [ ]
% options- options to the initialize function, ie. [eps, float/binary,prec]
% where eps is the epsilonvalue and the second option is 1 for
% orderOps, prec is theprecision of the variables defaults [1e-6 1】
2.交叉
function [c1,c2] = arithXover(p1,p2,bounds,Ops)
% Arith crossover takes two parents P1,P2and performs an interpolation
% along the line formed by the two parents.
%
% function [c1,c2] =arithXover(p1,p2,bounds,Ops)
% p1 – the first parent ( [solution string function value] )
% p2 – the second parent ( [solution string function value] )
% bounds – the bounds matrix for the solution space
% Ops – Options matrix for arith crossover [gen #ArithXovers]
3.选择
normGeomSelect:NormGeomSelect is a rankingselection
function based on the normalized geometricdistribution.
(基于正态分布的序列选择函数)
4.变异
function[newPop] = normGeomSelect(oldPop,options)
% NormGeomSelect is a ranking selectionfunction based on
thenormalized
% geometric distribution.
%
% function[newPop] =normGeomSelect(oldPop,options)
% newPop – the new population selected from the oldPop
% oldPop – the current population
% options – options to normGeomSelect
[genprobability_of_selecting_best]