遗传算法简介
遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。因此,在一开始需要实现从表现型到基因型的映射即编码工作。由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择(selection)个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。
比较对应
算法流程
1.初始化规模为N的群体,其中染色体每个基因的值采用随机数产生器生成并满足问题定义的范围,当前进化代数Generation为0。
2.采用评估函数对群体中所有染色体进行评价,分别计算每个染色体的适应值,保存适应值最大的染色体Betst。
3.采用轮盘赌选择算法对群体的染色体进行选择操作产生规模同样的为N的种群。
4.按照概率Pc从种群中选择染色体进行交配,每两个进行交配的附带染色体,交换部分基因产生两个新的子代染色体,子代染色体取代父代染色体进入新种群。没有进行交配的染色体直接复制进入新的种群。
5.按照概率Pm对新种群中染色体的基因进行变异操作,发生变异基因数值发生改变。变异后的染色体取代原有染色体进入新群体,未发生变异的染色体直接进入新群体。
6.变异后的新群体取代原有群体,重新计算群体中各个染色体的适应值,倘若群体的最大适应值大于Best的适应值,则以该最大适应值对应染色体替代Best。
7.当前进化代数Generation加1,如果Generation超过规定的最大进化代数或B二十天达到规定的误差要求,算法结束 否则返回第三步。
适应度函数(fit.m)
function fitness=fit(len,m,maxlen,minlen)
fitness=len;
for i=1:length(len)
fitness(i,1)=(1-(len(i,1)-minlen)/(maxlen-minlen+0.0001)).^m;
end
对调函数I(exchange.m)
function [x,y]=exchange(x,y)
temp=x;
x=y;
y=temp;
end
变异函数(Mutation.m)
function a=Mutation(A)
index1=0;index2=0;
nnper=randperm(size(A,2));
index1=nnper(1);
index2=nnper(2);
%fprintf('index1=%d ',index1);
%fprintf('index2=%d ',index2);
temp=0;
temp=A(index1);
A(index1)=A(index2);
A(index2)=temp;
a=A;
end
交叉操作函数(cross.m)
function [A,B]=cross(A,B)
L=length(A);
if L<10
W=L;
elseif ((L/10)-floor(L/10))>=rand&&L>10
W=ceil(L/10)+8;
else
W=floor(L/10)+8;
end
%%W为需要交叉的位数
p=unidrnd(L-W+1);