利用遗传算法求Rosenbrock(香蕉函数)函数的极大值。其中香蕉函数表达式如下:

遗传算法是利用孟德尔的生物遗传学和达尔文的进化论思想的一种智能计算方法。我觉着与其称之为一种算法,倒不如称之为是一种思想。

达尔文的进化论主要有以下三个基本方面:

(1)、遗传。亲代把生物信息交给子代,子代总是和亲代具有相同或相似的属性。生物有了这个特征,物种才能稳定存在。

(2)、变异。亲代和子代之间以及子代的不同个体之间的差异。变异的选择和积累是生命多样性的根源。

(3)、生存斗争和适者生存。适应性强的个体会被保存下来,并会获得更多的繁殖机会,适应性差的会被逐渐淘汰。而拥有有利变异者的适应性会更强。

遗传算法就是将这些基本原理引入到优化参数形成的编码串群体中,按照所选的适应度函数并通过遗传中的复制、交叉、变异以及对变异个体进行筛选,适应度高的个体会被保留下来,适应度低的个体会被淘汰,由此组成新的种群。不断迭代,群体中的个体适应度就会不断提高,直到满足我们预先设定的一定条件。遗传算法的基本思想还是比较简单的,可以进行并行处理,并能够达到全局最优。但是这毕竟只是一种经验思想,还是缺乏严格的数学推导。

遗传算法的基本操作为:

(1)复制

从一个旧种群中选择生命力强的个体位串产生新种群。具有高适应度的位串更有可能在下一代中产生一个或多个子孙。复制操作可以通过随机方法来实现。首先产生0~1之间的均匀分布的随机数,若某串的复制概率为40%,则当产生的随机数在0.40~1.0之间时,该串被复制,否则被淘汰。

(2)交叉

复制操作能够从旧种群中选择出优秀者,但不能创造新的染色体。而交叉模拟了生物进化过程中的繁殖现象,通过两个染色体的交换组合,来产生新的优良品种。

交叉的过程为:在匹配池任选两个染色体,随机选择一点或多点交换点位置;交换双亲染色体交换点右边的部分,即可得到两个新的染色体数字串。

交叉体现了自然界中信息交换的思想。交叉有单点交叉、两点交叉、还有一致交叉、顺序交叉和周期交叉。单点交叉是最基本的方法,应用较广,它是指染色体切断点只有一处。如下例所示

(3)变异

用来模拟生物在自然的遗传环境中由于各种偶然因素引起的基因突变,它以很小的概率随机地改变遗传基因(表示染色体符号串的某一位)的值。在染色体以二进制编码的系统中,它随机地将染色体在某一基因由1变0,或由0变1 。

用遗传算法求解上面香蕉函数的MATLAB代码实现如下所示

clc,clearSize=500;CodeL=2;MinX(1)=-2.048;MaxX(1)=2.048;MinX(2)=-2.048;MaxX(2)=2.048;E(:,1)=MinX(1)+(MaxX(1)-MinX(1))*rand(Size,1);E(:,2)=MinX(2)+(MaxX(2)-MinX(2))*rand(Size,1);G=200;BsJ=0;%---------------Start Running--------------------------------------------%for kg=1:Gtime(kg)=kg;%----------------------step 1: Evaluate BestJ-----------------------%for i=1:Size;xi=E(i,:);x1=xi(1);x2=xi(2);F(i)=100*(x1^2-x2)^2+(1-x1)^2;Ji=1./F;BsJi(i)=min(Ji);end[OderJi,IndexJi]=sort(BsJi);BestJ(kg)=OderJi(1);BJ=BestJ(kg);Ji=BsJi+eps;fi=F;[Oderfi,Indexfi]=sort(fi); Bestfi=Oderfi(Size);       BestS=E(Indexfi(Size),:);  bfi(kg)=Bestfi;kgBestS%---------------------------Step 2:Select and Reproduct%Operation---------%fi_sum=sum(fi);fi_Size=(Oderfi/fi_sum)*Size;fi_S=floor(fi_Size);                   r=Size-sum(fi_S);Rest=fi_Size-fi_S;[RestValue,Index]=sort(Rest);for i=Size:-1:Size-r+1;fi_S(Index(i))=fi_S(Index(i))+1;endk=1;for i=Size:-1:1;for j=1:fi_S(i);TempE(k,:)=E(Indexfi(i),:);     k=k+1;                           endend%---------------------Step 3: Crossover Operation-------------------%Pc=0.90;for i=1:2:Size-1;temp=rand;if Pc>tempalfa=rand;TempE(i,:)=alfa*E(i+1,:)+(1-alfa)*E(i,:);TempE(i+1,:)=alfa*E(i,:)+(1-alfa)*E(i+1,:);endendTempE(Size,:)=BestS;E=TempE;%---------------------Step 4: Mutation Operation--------------------%Pm=0.10-[1:Size]*(0.01)/Size;         Pm_rand=rand(Size,CodeL);Mean=(MaxX+MinX)/2;Dif=MaxX-MinX;for i=1:Size;for j=1:CodeL;if Pm(i)>Pm_rand(i,j);TempE(i,j)=Mean(j)+Dif(j)*(rand-0.5);endendendTempE(Size,:)=BestS;E=TempE;endBestSBestfifigure(1);plot(time,BestJ,'k');xlabel('Times');ylabel('Best J');figure(2);plot(time,bfi,'k');xlabel('Times');ylabel('Best F');

运行结果如下

由此可得

遗传算法求解香蕉函数的极大值相关推荐

  1. 遗传算法求解香蕉函数极大值

    遗传算法求香蕉函数极大值 遗传算法介绍 1.遗传算法定义 遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程 ...

  2. 使用遗传算法求解三元函数最大值

    使用遗传算法求解三元函数最大值 使用遗传算法求解三元函数z的最大值 z=f(x,y)=xsin(4πx)-ysin(4πy+π)+1 在-1<x<1和-1<y<1上的最大值 # ...

  3. 遗传算法求二元函数极值怎么编码_遗传算法求解二元函数极值源码

    网上看到了一个比较不错的讲解遗传算法的帖子,链接如下 http://blog.csdn.net/b2b160/article/details/4680853 但是却没有贴源代码,正好最近闲来无事,就尝 ...

  4. 实值遗传算法求解函数极值问题(基于MATLAB)

    实值遗传算法求解函数极值问题(基于MATLAB) 声明: 1.本文源代码来自书目<智能优化算法及其MATLAB实例(第3版)>,目的在于为MATLAB初学者提供更简明的代码解析,方便读者了 ...

  5. 遗传算法求二元函数极值怎么编码_遗传算法求解一元函数二元函数最值

    ##--------------------------施工中----------------------------## import random import math import numpy ...

  6. 运用遗传算法求解函数极值(fortran)

    运用遗传算法求解函数极值(fortran) 写在前面 遗传算法的前世今生 算法步骤简介 遗传算法的主体结构 开始求解: 结果显示: 最后再来说一些需要注意的地方 写在前面 这篇文章适合一些应急学习最优 ...

  7. python多元函数求解_使用遗传算法求二元函数的最小值

    二元函数为y=x1^2+x2^2,x∈[-5,5] NIND=121; %初始种群的个数(Number of individuals) NVAR=2; %一个染色体(个体)有多少基因 PRECI=20 ...

  8. <<人工智能导论>>上机--遗传算法求解函数最值

    利用遗传算法求解函数 f(x,y)=1/(x2+y2+1),x,y∈[−5,5]f(x,y)=1/(x^2+y^2+1),x,y\in[-5,5]f(x,y)=1/(x2+y2+1),x,y∈[−5, ...

  9. 采用遗传算法求解最大值c语言,遗传算法求解函数最大值用例

    学习遗传算法自己改了一个用例,感谢下面两篇文章的作者: /*********************************************************************** ...

最新文章

  1. django部署iiswin10_基于Windows平台的Django在本地部署和腾讯云服务器上部署的方法教程(一)...
  2. 基于深度学习和机器学习的心电图智能分析参赛总结
  3. VS2010 error C299: “Font”:“struct”类型重定义
  4. AOS V0.8 发布,JavaEE 应用基础平台
  5. SpringBoot 自动配置原理
  6. license是什么_云数据库时代,AWS凭什么执牛耳?
  7. Serve Django Applications with uWSGI and Nginx
  8. 18.7 修改IP地址
  9. R语言实现K最近邻算法(KNN)
  10. 数据库 聚合 、分组、筛选、排序、日期等函数的应用
  11. Linux内核开发-入门篇
  12. Verp中外部控制的六种方式
  13. ISO27001体系的价值(详解)
  14. 基于java的百货中心供应链管理系统
  15. 如何将手机屏幕投影到电脑电视
  16. 微信开放平台授权登录详细流程-第三方登录
  17. ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 BINARY
  18. html5背景好看颜色渐变css样式,CSS3制作渐变背景
  19. Codeforces edu round 61 D-Stressful Training 二分
  20. 20P83 pr预设模板5000种视频转场过渡视觉特效豪华预设包 v2

热门文章

  1. PHP上传图片类Upload.php
  2. 作茧自缚or破茧成蝶?墨菲定律下,华为P40搭档鸿蒙OS奋力一击
  3. 4D成像毫米波雷达按下“加速键”
  4. Vue 中使用 axios 传输数据,当数据量过大时会提示跨域?(√已解决)
  5. Vue-组件嵌套之——父组件向子组件传值
  6. 【总结】大学生寒假社会实践-社区志愿服务模板
  7. 读《CSS禅意花园》 有感
  8. VS2019字符编码设置
  9. 用脉冲响应不变法设计IIR 滤波器 MATLAB实现
  10. 利用手机工具教你快速完成英语翻译在线翻译中文