计算智能--遗传算法

时间:2024-03-25 18:40:21

一、算法原理
1.种群(Population):种群是指用遗传算法求解问题时, 初始给定的多个解的集合。遗传算法的求解过程是从这个子集开始的。
个体(Individual):个体是指种群中的单个元素,它通常由一个用于描述其基本遗传结构的数据结构来表示。例如,可以用0、1组成的长度为l的串来表示个体。
2。染色体(Chromosome):染色体是指对个体进行编码后所得到的编码串。染色体中的每1位称为基因,染色体上由若干个基因构成的一个有效信息段称为基因组。
适应度(Fitness)函数:适应度函数是一种用来对种群中各个个体的环境适应性进行度量的函数。其函数值是遗传算法实现优胜劣汰的主要依据。
3.遗传操作(Genetic Operator):遗传操作是指作用于种群而产生新的种群的操作。标准的遗传操作包括以下3种基本形式:选择(Selection) 、杂交(Crosssover) 、变异(Mutation)。
遗传算法通过在计算机上模拟生物的进化过程和基因的操作(选择、 交叉、变异)进行实现。

二、算法步骤
基本遗传算法的基本步骤是:
1、随机产生种群,
2、用轮盘赌策略确定个体的适应度,判断是否符合优化准则,若符合,输出最佳个体及其最优解,结束,否则,进行下一步
3、依据适应度选择再生个体,适应度高的个体被选中的概率高,适应度低的个体被淘汰
4、按照一定的交叉概率和交叉方法,生成新的个体
5、按照一定的变异概率和变异方法,生成新的个体
6、由交叉和变异产生新一代种群,返回步骤2
计算智能--遗传算法
三、算法代码

遗传代码:

% Optimizing a function using Simple Genetic Algorithm with elitist preserved
%Max f(x1,x2)=100*(x1x1-x2).2+(1-x1).2; -2.0480<=x1,x2<=2.0480
%下面为代码。函数最大值为3904.9262,此时两个参数均为-2.0480,有时会出现局部极值,此时一个参数为-2.0480,一个为2.0480。变
%异概率pm=0.05,交叉概率pc=0.8。
clc;clear all;
format long;%设定数据显示格式
%初始化参数
T=500;%仿真代数
N=80;% 群体规模
pm=0.05;pc=0.8;%交叉变异概率
umax=30;umin=-30;%参数取值范围
L=10;%单个参数字串长度,总编码长度Dim
L
Dim=5;%Dim维空间搜索
bval=round(rand(N,DimL));%初始种群,round函数为四舍五入取整,rand函数生成N行DimL列取值为(0~1)的矩阵
bestv=-inf;%最优适应度初值,-inf表示负无穷大
funlabel=2; %选择待优化的函数,1为Rastrigin,2为Schaffer,3为Griewank
Drawfunc(funlabel);%画出待优化的函数,只画出2维情况作为可视化输出
%迭代开始
for ii=1:T
%解码,计算适应度
for i=1:N %对每一代的第i个粒子
for k=1:Dim %1维:1-10;2维:11-20
y(k)=0;
for j=1:1:L %从1到L,每次加以1
y(k)=y(k)+bval(i,kL-j+1)2^(j-1);%把第i个粒子转化为十进制的值,例如y1是第一维
end
x(k)=(umax-umin)y(k)/(2^L-1)+umin;%转化为实际的x
end
% obj(i)=100
(x1
x1-x2).2+(1-x1).2; %目标函数
obj(i)=fun(x,funlabel);
xx(i,:)=x;
end
func=obj;%目标函数转换为适应度函数
p=func./sum(func);
q=cumsum§;%累加
[fmax,indmax]=max(func);%求当代最佳个体,fmax存放最大值,indmax存放下标
if fmax>bestv
bestv=fmax;%到目前为止最优适应度值
bvalxx=bval(indmax,:);%到目前为止最佳位串
optxx=xx(indmax,:);%到目前为止最优参数
end
Bfit1(ii)=bestv; % 存储每代的最优适应度
%%%%遗传操作开始
%轮盘赌选择
for i=1:(N-1)
r=rand;
tmp=find(r<=q);
newbval(i,:)=bval(tmp(1)????;
end
newbval(N,:)=bvalxx;%最优保留
bval=newbval;
%单点交叉
for i=1:2:(N-1)
cc=rand;
if cc<pc
point=ceil(rand
(2L-1));%取得一个1到2L-1的整数
ch=bval(i,:);
bval(i,point+1:2
L)=bval(i+1,point+1:2L);
bval(i+1,point+1:2
L)=ch(1,point+1:2L);
end
end
bal(N,:)=bvalxx;%最优保留
%位点变异
mm=rand(N,Dim
L)<pm;%N行
mm(N,:)=zeros(1,Dim*L);%最后一行是精英不变异,强制赋0
bval(mm)=1-bval(mm);
end
%输出
figure;
plot(-Bfit1);% 绘制最优适应度进化曲线
bestv %输出最优适应度值
optxx %输出最优参数

调用评估函数:

function y = fun(x,label)
%函数用于计算粒子适应度值
%x input 输入粒子
%y output 粒子适应度值
if label1
y=-Rastrigin(x);
elseif label
2
y=-Schaffer(x);
else
y=-Griewank(x);
end

绘图函数:

function Drawfunc(label)
x=-5:0.05:5;%41列的向量,3个数字夹着2个冒号的意思:从-5到5 步长0.05
if label1
y = x;
[X,Y] = meshgrid(x,y);%生成200*200的二维数组
[row,col] = size(X);
for l = 1 :col
for h = 1 :row
z(h,l) = Rastrigin([X(h,l),Y(h,l)]);
end
end
surf(X,Y,z);
shading interp
xlabel(‘x1-axis’),ylabel(‘x2-axis’),zlabel(‘f-axis’);
title(‘mesh’);
end
if label
2
y = x;
[X,Y] = meshgrid(x,y);
[row,col] = size(X);
for l = 1 :col
for h = 1 :row
z(h,l) = Schaffer([X(h,l),Y(h,l)]);
end
end
surf(X,Y,z);
shading interp
xlabel(‘x1-axis’),ylabel(‘x2-axis’),zlabel(‘f-axis’);
title(‘mesh’);
end
if label==3
y = x;
[X,Y] = meshgrid(x,y);
[row,col] = size(X);
for l = 1 :col
for h = 1 :row
z(h,l) = Griewank([X(h,l),Y(h,l)]);
end
end
surf(X,Y,z);
shading interp
xlabel(‘x1-axis’),ylabel(‘x2-axis’),zlabel(‘f-axis’);
title(‘mesh’);
end

四、实验结果

1.Rastrigin适应度函数计算智能--遗传算法计算智能--遗传算法2.Schaffer适应度函数
计算智能--遗传算法计算智能--遗传算法3.Griewank适应度函数
计算智能--遗传算法计算智能--遗传算法
五、实验结果分析

当目标函数与维度固定不变时,随着种群规模的增大,运行时间也增大,而最优适应度进化曲线的变化并不单一。(例如:当目标函数为Rastrigrin()函数或Griewank()函数时,最优适应度进化曲线在达到平稳状态时已迭代的次数随着种群规模的增长先增加后减少;当目标函数为Schaffer()函数时,最优适应度进化曲线在达到平稳状态时已迭代的次数随着种群规模的增长先减少后增加。)
当种群规模固定不变时,三种不同的目标函数下的遗传算法运行时间随维度的增加而增加,并且同维度下的不同目标函数的运行时间相差很小,在0.2s之内。
当种群规模固定不变时,随着维度的增加,最优适应度进化曲线的变化并不单一。 当目标函数为Rastrigrin()函数时,最优适应度进化曲线在达到平稳状态时已迭代的次数随着维度的增加先减少后增加;当目标函数为Schaffer()函数时,最优适应度进化曲线在达到平稳状态时已迭代的次数随着维度的增加持续增加;当目标函数为Griewank()函数时,最优适应度进化曲线在达到平稳状态时已迭代的次数随着维度的增加先增加后减少。

传统优化算法
优点:1:利用了解空间的特性,如可微等。2:理论较为完善,计算量小。3:收敛速度快。4:具有确定的终止准则。
缺点:1:仅能求出优化问题的局部最优解。2:求解的结果强烈依赖于初始值。

遗传算法
优点:1:能够求出优化问题的全局最优解。2:优化结果与初始条件无关。3:算法独立于求解域。。4:适合于求解复杂的优化问题。5:应用较为广泛。
缺点:1:收敛速度慢2:局部搜索能力差。3:控制变量较多。4:无确定的终止准则。