遗传算法Matlab代码

  • y0_323564
    了解作者
  • 5.1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-06-14 12:08
    上传日期
遗传算法Matlab代码,含详细注释,适合初学者
GA.zip
  • GA
  • main.m
    3KB
  • selection.m
    452B
  • targetfun.m
    201B
  • IfCroIfMut.m
    279B
  • transform2to10.m
    289B
  • mutation.m
    429B
  • fitnessfun.m
    872B
  • crossover.m
    737B
内容介绍
%主程序:用遗传算法求解y=200*exp(-0.05*x).*sin(x)在[-2 2]区间上的最大值 clc; clear all; close all; global BitLength %全局变量位长,二进制编码所需要的0和1的位数 global boundsbegin %全局变量,解空间的起点 global boundsend %全局变量,解空间的终点 bounds=[-2 2];%一维自变量的取值范围 precision=0.0001; %运算精度 boundsbegin=bounds(:,1); boundsend=bounds(:,2); %计算如果满足求解精度至少需要多长的染色体 BitLength=ceil(log2((boundsend-boundsbegin)' ./ precision));%%%向上取整,(2-(-2))/0.0001,16位 popsize=50; %初始种群大小 Generationnmax=12; %最大代数 pcrossover=0.90; %交叉概率 pmutation=0.09; %变异概率 %产生初始种群 population=round(rand(popsize,BitLength)); %round四舍五入取整,rand(m,n),生成m*n在0到1之间的随机数,做为初始种群。 %计算适应度,返回适应度Fitvalue和累积概率cumsump [Fitvalue,cumsump]=fitnessfun(population); %子程序1 Generation=1; %迭代次数 while Generation<Generationnmax+1 for j=1:2:popsize %%隔一个选择25次,为了保证不选择两个相同的基因型进行交叉 %选择操作 seln=selection(population,cumsump); % 子程序2,轮盘赌法选择两个个体进行交叉25*2即选择50次 %交叉操作 scro=crossover(population,seln,pcrossover); %子程序3,交叉 scnew(j,:)=scro(1,:); %交叉后产生的子代 scnew(j+1,:)=scro(2,:);%交叉后产生的子代 %变异操作 smnew(j,:)=mutation(scnew(j,:),pmutation); %子程序4,对新产生的子群进行变异操作 smnew(j+1,:)=mutation(scnew(j+1,:),pmutation); %子程序4,对新产生的子群进行变异操作 end population=smnew; %产生了新的种群 %计算新种群的适应度 [Fitvalue,cumsump]=fitnessfun(population); %计算新种群的适应度和累计概率 %记录当前代最好的适应度和平均适应度 [fmax,nmax]=max(Fitvalue); %计算当代最大的适应度和代数 fmean=mean(Fitvalue); %当前代的平均适应度 ymax(Generation)=fmax; %最大的适应度 ymean(Generation)=fmean;%平均的适应度 %记录当前代的最佳染色体个体 x=transform2to10(population(nmax,:)); %子程序5,当前代的最佳染色体个体 %自变量取值范围是[-2 2],需要把经过遗传运算的最佳染色体整合到[-2 2]区间 xx=boundsbegin+x*(boundsend-boundsbegin)/(power(2,BitLength)-1); xmax(Generation)=xx; Generation=Generation+1 %迭代次数 end Generation=Generation-1; %第一次迭代为0 Bestpopulation=xx %%该带的最佳子代 Besttargetfunvalue=targetfun(xx) %子程序6,计算最佳适应度 %绘制经过遗传运算后的适应度曲线。一般地,如果进化过程中种群的平均适应度与最大适 %应度在曲线上有相互趋同的形态,表示算法收敛进行得很顺利,没有出现震荡;在这种前 %提下,最大适应度个体连续若干代都没有发生进化表明种群已经成熟。 figure(1); hand1=plot(1:Generation,ymax);%最大适应度 set(hand1,'linestyle','-','linewidth',1.8,'marker','*','markersize',6) hold on; hand2=plot(1:Generation,ymean); %平均适应度 set(hand2,'color','r','linestyle','-','linewidth',1.8,... 'marker','h','markersize',6) xlabel('进化代数');ylabel('最大/平均适应度');xlim([1 Generationnmax]); legend('最大适应度','平均适应度'); box off;%显示出来的图形有没有四周的边框 hold off;
评论
    相关推荐
    • matlab算法经典程序
      一些常用的算法matlab实现,包括各种智能算法,图论算法,以及规划算法
    • 电力系统状态估计MATLAB算法
      状态估计算法 MATLAB 内附readme 详细说明了使用方法和步骤 有专门的txt文件 可以输入自己的bus阵 line阵等 即可进行状态估计
    • matlab算法大全
      matlab 中常用的程序 函数使用示例
    • 粒子滤波matlab算法
      粒子滤波正在得到重视,越来越的人开始注意,在故障诊断和预测领域里,用来估计状态参数。附件中matlab程序介绍了基本粒子滤波算法
    • matlab算法大全
      本文档涵盖了很多数学算法,利用matlab实现,在工程技术上有很高的应用价值
    • Matlab算法大全
      Matlab算法 PDF 分章阅读 高清PDF 很好很全面的阅读材料
    • 各种MATLAB算法
      各种MATLAB算法,代码,可供初学者参考应用,
    • Matlab算法大全
      Matlab算法大全 第01章线性规划 第02章整数规划 第03章非线性规划 第04章动态规划 第05章图与网络 第06章排队论 第07章对策论 第08章层次分析法 第09章插值与拟合 第10章数据的统计描述和分析 第11章方差分析 第12章...
    • matlab算法大全
      matlab算法大全,很全,提供插值,数值微分、积分等功能代码的实现
    • matlab 算法程序
      matlab 算法程序,包括了插值、函数逼近、数值积分、非线性方程求解、统计分析、偏微分方程数值解法等17个部分,每个部分针对各种函数有m文件代码和相关解释说明。