赞
踩
一、算法原理
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;%单个参数字串长度,总编码长度DimL
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(x1x1-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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。