目录

一、遗传算法的简介

二、算法流程

三、参数经验设置

四、GA函数的实现

1.目标函数Griewank

2.目标函数Rastrigin

3.目标函数myfit(简单求解)

五、GA的优缺点


一、遗传算法的简介

遗传算法(Genetic Algorithm,GA)是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随机化搜索方法,是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。

遗传算法是从代表问题可能潜在的解集的一个种群开始的,而一个种群则由经过基因编码的一定数目的个体组成。每个个体实际上是染色体带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现。

在遗传算法中,被优化的问题的解称为个体,它表示的是一个变量的一组序列,叫做基因串或者染色体。染色体通常被表达为简单的字符串或者数字串,也有其他的针对特殊的问题的采用的表示方法,这个过程称为编码。首先,算法会随机生成一定数量的个体,也可以人为地设定,这样可以提高初始种群的质量。在每一代中,所有的个体都被评价,并通过计算适应度函数得到一个适应度数值,依照适应度,对种群中的个体进行排序。然后,产生一个新的个体种群,也就是选择和繁殖,繁殖包括交配和突变。初始的数据便可以通过这样的选择原则组成一个相对优化的群体。之后,被选择的个体进入交配过程。

经过这一系列的过程(选择、交配和突变),产生的新一代个体不同于初始的一代,并一代一代向增加整体适应度的方向发展,因为最好的个体总是更多的被选择去产生下一代,而适应度低的个体逐渐被淘汰掉。过程不断重复:每个个体被评价,计算出适应度,两个个体交配,然后突变,产生第三代......直到满足终止条件为止。

二、算法流程

(1)初始化规模为 N的群体,其中染色体每个基因的值采用随机数产生器生成并满足问题定义的范围。当前进化代数Generation=0。

(2)采用评估函数对群体中所有染色体进行评价,分别计算每个染色体的适应值,保存适应值最大的染色体Best。

(3)采用轮盘赌选择算法对群体的染色体进行选择操作,产生规模同样为N的种群。

(4)按照概率Pc 从种群中选择染色体进行交配。每两个进行交配的父代染色体,交换部分基因,产生两个新的子代染色体,子代染色体取代父代染色体进入新种群。没有进行交配的染色体直接复制进入新种群。

(5)按照概率 Pm对新种群中染色体的基因进行变异操作。发生变异的基因数值发生改变。变异后的染色体取代原有染色体进入新群体,未发生变异的染色体直接讲入新群体。

(6)变异后的 新群体取代原有群体,重新计算群体中各个染色体的适应值。倘若群体的最大适应值大于Best的适应值,则以该最大适应值对应的染色体替代Best。

(7)当 前进化代数Generation加1。如果Generation超过规定的最大进化代数或Best达到规定的误差要求,算法结束;否则返回第(3)步。

三、参数经验设置

1.群体规模N

影响算法的搜索能力和运行效率。

若N设置较大,一次进化所覆盖的模式较多,可以保证群体的多样性,从而提高算法的搜索能力,但是由于群体中染色体的个数较多,势必增加算法的计算量,降低了算法的运行效率。

若N设置较小,虽然降低了计算量,但是同时降低了每次进化中群体包含更多较好染色体的能力。N的设置一般为20~100。

2.染色体的长度L

影响算法的计算量和交配变异操作的效果。

L的设置跟优化向题密切相关,一般由问题定义的解的形武和选择的编码方法决定;对于二进制编码方法,染色体的长度L根据解的取值范围和规定精度要求选择大小。

对于浮点数编码方法,染色体的长度L跟问题定义的解的维数D相同。

除了染色体长度一定的编码方法,Goldberg等人还提出了一种变长度染色体遗传算法Messy GA,其染色体的长度并不是固定的。

3.基因的取值范围R

R视采用的染色体编码方案而定。

对于二进制编码方法,R={0,1},而对于浮点数编码方法,R与优化问题定义的解每一维变量的取值范围相同。

4.交配概率Pc

决定了进化过程种群参加交配的染色体平均数目PcXN。

Pc的取值一般为0.4~0.99。

也可采用自适应的方法调整算法运行过程中的Pc值。

5.变异概率Pm

增加群体进化的多样性,决定了进化过程中群体发生变异的基因平均个数。

Pm的值不宜过大。因为变异对已找到的较优解具有一定的破坏作用,如果Pm的值太大,可能会导致算法目前所处的较好的搜索状态倒退回原来较差的情况。

Pm的取值一般为0.001~0.1。

也可采用自适应的方法调整算法运行过程中的Pm值。

6.适应值评价

影响算法对种群的选择,恰当的评估函数应该能够对染色体的优劣做出合适的区分,保证选择机制的有效性,从而提高群体的进化能力。

评估函数的设置同优化问题的求解目标有关。

评估函数应满足较优染色体的适应值较大的规定。

为了更好地提高选择的效能,可以对评估函数做出一定的修正。

目前主要的评估函数修正方法有:线性变换、乘幂变换、指数变换等

7.终止条件

决定算法何时停止运行,输出找到的最优解。

采用何种终止条件,跟具体问题的应用有关。

可以便算法在达到最大进化代数时停止,最大进化代数一殷可设置为100~1000,根据具体问题可对该建议值作相应的修改。

也可以通过考察找到的当前最优解的情况来控制算法的停止,例如,当目前进化过程算法找到的最优解达到一定的误差要求,则算法可以停止。误差范围的设置同样跟具体的优化问题相关。或者是算法在持续很长的一段时间内所找到的最优解没有得到改善时,算法可以停止。

四、GA函数的实现

1.目标函数Griewank

function y=Griewank(x)
%Griewan函数
%输入x,给出相应的y值,在x=(0,0,…,0)处有全局极小点0.
%编制人:
%编制日期:
[row,col]=size(x);
if row>1error('输入的参数错误');
end
y1=1/4000*sum(x.^2);
y2=1;
for h=1:coly2=y2*cos(x(h)/sqrt(h));
end
y=y1-y2+1;
%y=-y;

运行结果:

2.目标函数Rastrigin

function y = Rastrigin(x)
% Rastrigin函数
% 输入x,给出相应的y值,在x = ( 0 , 0 ,…, 0 )处有全局极小点0.
% 编制人:
% 编制日期:
[row,col] = size(x);
if  row > 1 error( ' 输入的参数错误 ' );
end
y =sum(x.^2-10*cos(2*pi*x)+10);
%y =-y;

运行结果:

3.目标函数myfit(简单求解)

function y = myfit( x )y = (339-0.01*x(1)-0.003*x(2))*x(1)...+ (399-0.004*x(1)-0.01*x(2))*x(2)...- (400000+195*x(1)+225*x(2));y = -y; %因为GA是寻找最小值,所以为了求这个函数的最大值,取f的相反数
end

运行结果:

4.总结

三个不同的目标函数,在种群规模、交叉变异律等其他参数设置都一样的情况下得到的最优化函数的图和表,只画二维情况作为可视化输出。第三个目标函数因为是简单的求解函数,得到的可视化二维图像不够明显,前面的两张图可以明显的观察到图形的立体形状。对比分析可以看出后面两个算法收敛的比较快,而第一个算法的起伏较大。

五、GA的优缺点

1.优点:

(1)能够求出优化问题的全局最优解。

(2)优化结果与初始条件无关。

(3)适合于求解复杂的优化问题。

2.缺点:

(1)收敛速度慢。

(2)局部搜索能力差。

(3)无确定的终止准则。

代码附录:

GA.m
% Optimizing a function  using Simple Genetic Algorithm with elitist preserved%Max f(x1,x2)=100*(x1*x1-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,Dim*L));%初始种群,round函数为四舍五入bestv=-inf;%最优适应度初值
funlabel=4;       %选择待优化的函数,1为Rastrigin,2为Schaffer,3为Griewank
Drawfunc(funlabel);%画出待优化的函数,只画出二维情况作为可视化输出%迭代开始for ii=1:T%解码,计算适应度for i=1:N  %对每一代的第i个粒子for k=1:Dimy(k)=0;for j=1:1:L  %从1到L,每次加以1y(k)=y(k)+bval(i,k*L-j+1)*2^(j-1);%把第i个粒子转化为十进制的值,例如y1是第一维end x(k)=(umax-umin)*y(k)/(2^L-1)+umin;%转化为实际的x1end%     obj(i)=100*(x1*x1-x2).^2+(1-x1).^2; %目标函数 obj(i)=fun(x,funlabel);xx(i,:)=x;endfunc=obj;%目标函数转换为适应度函数p=func./sum(func);q=cumsum(p);%累加[fmax,indmax]=max(func);%求当代最佳个体if fmax>=bestvbestv=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),:);endnewbval(N,:)=bvalxx;%最优保留bval=newbval;%单点交叉for i=1:2:(N-1)cc=rand;if cc<pcpoint=ceil(rand*(2*L-1));%取得一个1到2L-1的整数ch=bval(i,:);bval(i,point+1:2*L)=bval(i+1,point+1:2*L);bval(i+1,point+1:2*L)=ch(1,point+1:2*L);endend   bval(N,:)=bvalxx;%最优保留%位点变异mm=rand(N,Dim*L)<pm;%N行mm(N,:)=zeros(1,Dim*L);%最后一行是精英不变异,强制赋0bval(mm)=1-bval(mm); end%输出
figure;plot(-Bfit1);% 绘制最优适应度进化曲线bestv   %输出最优适应度值optxx    %输出最优参数Drawfunc.m
function Drawfunc(label)
%Griewank Rastrigin Schaffer
x=-5:0.05:5;%41列的向量
if label==1y = x;[X,Y] = meshgrid(x,y);[row,col] = size(X);for  l = 1 :colfor  h = 1 :rowz(h,l) = Rastrigin([X(h,l),Y(h,l)]);endendsurf(X,Y,z);shading interpxlabel('x1-axis'),ylabel('x2-axis'),zlabel('f-axis'); title('mesh');
endif label==2y = x;[X,Y] = meshgrid(x,y);[row,col] = size(X);for  l = 1 :colfor  h = 1 :rowz(h,l) = Schaffer([X(h,l),Y(h,l)]);endendsurf(X,Y,z);shading interp xlabel('x1-axis'),ylabel('x2-axis'),zlabel('f-axis'); title('mesh');
endif label==3y = x;[X,Y] = meshgrid(x,y);[row,col] = size(X);for  l = 1 :colfor  h = 1 :rowz(h,l) = Griewank([X(h,l),Y(h,l)]);endendsurf(X,Y,z);shading interp xlabel('x1-axis'),ylabel('x2-axis'),zlabel('f-axis'); title('mesh');
endif label==4y = x;[X,Y] = meshgrid(x,y);[row,col] = size(X);for  l = 1 :colfor  h = 1 :rowz(h,l) = myfit([X(h,l),Y(h,l)]);endendsurf(X,Y,z);shading interp xlabel('x1-axis'),ylabel('x2-axis'),zlabel('f-axis'); title('mesh');
endfun.mfunction y = fun(x,label)
%函数用于计算粒子适应度值
%x           input           输入粒子
%y           output          粒子适应度值
if label==1y=-Rastrigin(x);
elseif label==2y=-Schaffer(x);
elseif label==3y=-Griewank(x);
elsey=-myfit(x);end

人工智能6-GA遗传算法相关推荐

  1. Matlab:基于Matlab实现人工智能算法应用的简介(SVM支撑向量机GA遗传算法PSO粒子群优化算法)、案例应用之详细攻略

    Matlab:基于Matlab实现人工智能算法应用的简介(SVM支撑向量机&GA遗传算法&PSO粒子群优化算法).案例应用之详细攻略 目录 1.SVM算法使用案例 1.1.Libsvm ...

  2. Algorithm之OP:OP之GA遗传算法思路理解相关配图资料

    Optimality之GA遗传算法思路理解相关配图资料 目录 GA遗传算法思路理解 GA算法过程 1.总体思路 2.各个步骤 GA算法代码 1.伪代码 SGA实例讲解 1.求函数最值 2.求连续函数的 ...

  3. GA遗传算法及相关代码

    GA遗传算法解决TSP问题 Matlab函数 随机数生成函数: rand(n,1):返回n个0到1随机数排列的列向量. randn(n,1):类似,服从标准正态分布. randperm(n):返回n以 ...

  4. ML与Optimality:最优化理论(GD随机梯度下降/QN拟牛顿法/CG共轭梯度法/L-BFGS/TR置信域/GA遗传算法/SA模拟退火算法)在机器学习中的简介、常用方法、案例应用之详细攻略

    ML与Optimality:最优化理论(GD随机梯度下降/QN拟牛顿法/CG共轭梯度法/L-BFGS/TR置信域/GA遗传算法/SA模拟退火算法)在机器学习中的简介.常用方法.案例应用之详细攻略 目录 ...

  5. GA 遗传算法-含代码-多图

    遗传算法 文章目录 遗传算法 1.算法引言 1.1.相关术语 2.由问题引出算法 2.算法原理 3.算法细节 3.1.编制袋鼠的染色体:基因的编码方式 3.2.而下面则介绍如何建立二进制编码到一个实数 ...

  6. GA遗传算法c语言,遗传算法GA(Genetic Algorithm)入门知识梳理

    一.遗传算法进化论背景知识 作为遗传算法生物背景的介绍,下面内容了解即可: 种群(Population):生物的进化以群体的形式进行,这样的一个群体称为种群. 个体:组成种群的单个生物. 基因 ( G ...

  7. 【人工智能导论】遗传算法求解TSP问题(含源码github)

    源程序:Github链接 Symmetric traveling salesman problem (TSP) Given a set of n nodes and distances for eac ...

  8. GA遗传算法入门到掌握

    遗传算法的有趣应用很多,诸如寻路问题,8数码问题,囚犯困境,动作控制,找圆心问题(这是一个国外网友的建议:在一个不规则的多边形 中,寻找一个包含在该多边形内的最大圆圈的圆心.),TSP问题(在以后的章 ...

  9. GA遗传算法(Genetic Algorithm)

    遗传算法(Genetic Algorithm)又叫基因进化算法,或进化算法.属于启发式搜索算法一种,这个算法比较有趣,并且弄明白后很简单,写个100-200行代码就可以实现.在某些场合下简单有效.本文 ...

  10. GA(遗传算法) 解决TSP问题 Python实现

    TSP:Traveling Salesman Problem GA:Genetic Algorithm Python3.7 1. 第一问最小生成树问题 使用了Prim算法基于Python3.7实现 最 ...

最新文章

  1. 0-1背包 java_0-1背包问题,java的动态规划如题,代码如下public
  2. NumPy的思考……
  3. 用C语言实现数组反序
  4. Ubuntu20.04 服务器版安装
  5. 兰州交通大学C语言课程设计,兰州交通大学C语言课程设计报告(完整版).doc
  6. JDBC初学者的basedao工具类
  7. Spring集成PageHelper的简单用法
  8. 为什么我使用Java
  9. python重新安装_重新安装python
  10. 【JS 笔记】比较操作符之大小与记录
  11. java中日历类的用法_java日期类的用法
  12. 算法分析与设计-线性时间选择详解(通俗易懂,含图解,附源码)(c++)
  13. ORACLE解决表空间不释放空间
  14. win7用计算机名无法访问局域网,Win7系统在局域网内无法访问文件内容的解决方法...
  15. CPU问题导致的大量进程崩溃问题
  16. WideResNet(宽残差网络)介绍与代码
  17. 虚拟机连接外网(桥接)
  18. 快速排序详解(图解实例)
  19. Centos7.9+mysql8.0开启指定IP远程连接数据库
  20. 2、SpringBoot2组件添加注解与自动配置原理

热门文章

  1. 广东移动24日开始免除国内长途及漫游费
  2. 在html中雪碧图的坐标怎么看,详解CSS Sprite雪碧图的应用
  3. 一周新闻纵览:法国破获国际黑客软件;YouTube侵犯儿童隐私;换脸软件ZAO修改用户协议
  4. c语言程序设计 计算机2级,计算机二级c语言程序设计考试试题
  5. 201671010412 郭佳 实验四附加实验
  6. vue-router页面不渲染
  7. 【关于Citespace和JRE(JAVA运行环境)的详细安装教程】
  8. 【惊呼】微信最多可以加多少好友,真正原因可能出乎你的想象!
  9. 秋招寒冬不如换个思维——试试中小厂
  10. 将Sleuth添加到项目里做链路追踪的三种方式(Greenwich.SR5版)