遗传算法是模拟生物在自然环境中的遗传和进化的过程而形成的自适应全局优化搜索算法,他能有效求解NP问题以及非线性、多峰函数优化和多目标优化问题。
1.理论基础
1.1生物学基础
遗传算法的生物学基础是借鉴了达尔文的进化论和孟德尔的遗传学说,一个种群通过不断地繁衍和淘汰,一方面父代不断把优秀的基因遗传给子代,另一方面差的子代会逐渐被环境所淘汰,最终子代逐渐增强得到进化。
1.2理论依据
遗传算法有效性的理论依据为模式定理和积木块假设。
1.2.1模式定理
在遗传算子选择、交叉和变异的作用下,具有低阶、短定义距、平均适应度高于群体平均适应度的模式在子代中将以指数级增长。
统计学的研究表明:在随机搜索中,要获得最优的可行解,则必须保证较优解的样本呈指数级增长,而模式定理保证了较优的模式的样本呈指数级增长,从而给出了遗传算法的理论基础。另外,由于遗传算法总能以一定的概率遍历到解空间的每一个部分,因此在选择算子的条件下总能得到问题的全局最优解。
1.2.2积木块假设
积木块定义:具有低阶、短定义距、高平均适应度的模式称作积木块。
积木块假设:个体的积木块通过选择、交叉、变异等遗传算子的作用,能够相互结合在一起,形成高阶、长距、高平均适应度的个体编码串。
2.基本概念
群体和个体
可行解集和可行解
染色体和基因
可行解编码和可行解编码的分量
遗传编码
二进制编码、实数编码
适应度
目标函数映射成适应度函数、基于序的适应度函数
遗传操作
选择算子、交叉算子、变异算子
3.主要特点
以决策变量的编码作为运算对象;
直接以目标函数值作为搜索信息;
同时使用多个搜索点的搜索信息;
是一种基于概率的搜索技术;
具有自组织性、自适应和自学习等特性。
4.算法流程
初始化参数
适应度计算
选择运算
交叉运算
变异运算
终止条件判断

5.实例展示
5.1问题描述
对于函数f(x) = x + 10 * sin(5x) + 7 * cos(4x),求x=[0, 10]处的最大值
5.2代码实现
画图
x = 0:0.01:10;
y = x + 10 * sin(5 * x) + 7 * cos(4 * x);
plot(x,y,'-');
xlabel('x');
ylabel('f(x)');
title('f(x) = x + 10sin(5x) + 7cos(4x)');
结果

问题代码
初始化参数
%%%%%初始化参数
NP=50;
L=20;
G=100;
Pc=0.8;
Pm=0.1;
xs=10;
xx=0;
f=randi([0 1],NP,L);%randint不可用时,可用randi
适应度计算
%%%%%循环算法
for k=1:G%%%%%计算每个个体的适应度for i=1:NPU=f(i,:);m=0;%第i个个体的二进制值for j=1:Lm=U(j)*2^(j-1)+m;endx(i)=xx+m*(xs-xx)/(2^L-1);FIT(i)=x(i) + 10 * sin(5 * x(i)) + 7 * cos(4 * x(i));endmaxfit=max(FIT);minfit=min(FIT);rr=find(FIT==maxfit);fbest=f(rr(1,1),:);xbest=x(rr(1,1));FIT=(FIT-minfit)./(maxfit-minfit);%归一化
选择操作
%%%%%选择sum_fit=sum(FIT);fitvalue=FIT./sum_fit;fitvalue=cumsum(fitvalue);ms=sort(rand(NP,1));fiti=1;newi=1;while newi <= NPif ms(newi) < fitvalue(fiti)nf(newi,:)=f(fiti,:);newi = newi + 1;elsefiti = fiti + 1;endend%选择出来的新种群存在重复的个体
交叉操作
%%%%%交叉for i=1:2:NPp=rand;if p < Pcq=randi([0 1],1,L);for j=1:Lif q(j)==1temp=nf(i+1,j);nf(i+1,j)=nf(i,j);nf(i,j)=temp;endendendend
变异操作
%%%%%变异for i=1:round(NP*Pm)h=randi(NP);for j=1:round(L*Pm)g=randi(L);nf(h,g)=~nf(h,g);endendf=nf;f(1,:)=fbest;trace(k)=maxfit;
end
作图
xbest;
figure;
plot(trace);
xlabel('迭代次数');
ylabel('目标函数值');
title('适应度进化曲线');
结果

xbest = 7.8584,trace(end) = 24.8549














