遗传算法的实验报告.docVIP

  • 643
  • 0
  • 约2.44千字
  • 约 7页
  • 2017-02-08 发布于重庆
  • 举报
遗传算法的实验报告

遗传算法的仿真 实验目的 了解遗传算法的原理 学习Matlab遗传算法工具箱的使用 使用Matlab进行遗传算法的仿真 实验设备 计算机 Matlab软件 实验内容和步骤 要求:计算目标函数值函数:。 建立目标函数文件。在Matlab命令窗口中,选择“file”→“new”→“M-file”,命名为ft.m,然后在新建的窗口中输入如下内容: %目标函数 function y=ft(x) y=x.*sin(10*pi*x)+2; 分别建立相应的子函数文件。 计算适应度和累计概率函数 在Matlab命令窗口中,选择“file”→“new”→“M-file”,命名为objf.m,然后在新建的窗口中输入如下内容: function [f,p]=objf(s) %计算适应度函数 r=size(s); %读取种群大小 inn=r(1); %有inn个个体 bn=r(2); %个体长度为bn for i=1:inn x=n2to10(s(i,:)); %将二进制转换为十进制 xx=-1.0+x*3/(power(2,bn)-1); %转化为[-1,2]区间的实数 f(i)=ft(xx); %计算函数值,即适应度 end f=f; %计算选择概率 fsum=0; for i=1:inn fsum=fsum+f(i)*f(i); end for i=1:inn ps(i)=f(i)*f(i)/fsum; %计算累积概率 p(1)=ps(1); for i=2:inn p(i)=p(i-1)+ps(i); end p=p; end 选择操作函数 在Matlab命令窗口中,选择“file”→“new”→“M-file”,命名为sel.m,然后在新建的窗口中输入如下内容: function seln=sel(s,p) %“选择”操作 inn=size(p,1); for i=1:2 %从种群中选择两个个体 r=rand; %产生一个随机数 prand=p-r; j=1; while prand(j)0 j=j+1; end seln(i)=j; %选中个体的序号 end 交叉操作函数 在Matlab命令窗口中,选择“file”→“new”→“M-file”,命名为cro.m,然后在新建的窗口中输入如下内容: function scro=cro(s,seln,pc) %“交叉”操作 r=size(s); inn=r(1); bn=r(2); pcc=pro(pc); %根据交叉概率决定是否进行交叉操作,1则是,0则否 变异操作函数 在Matlab命令窗口中,选择“file”→“new”→“M-file”,命名为mut.m,然后在新建的窗口中输入如下内容: function snnew=mut(snew,pm) %“变异”操作 r=size(snew); bn=r(2); snnew=snew; pmm=pro(pm); %根据变异概率决定是否进行变异操作,1则是,0则否 if pmm==1 chb=round(rand*(bn-1))+1; %在[1,bn]范围内随机产生一个变异位 snnew(chb)=abs(snew(chb)-1); end 执行主程序,代码如下: %用遗传算法进行简单函数的优化 clear bn=22; %个体串长度 inn=50; %初始种群大小 gnmax=200; %最大代数 pc=0.75; %交叉概率 pm=0.05; %变异概率 s=round(rand(inn,bn));%产生初始种群 [f,p]=objf(s);%计算适应度,返回适应度f和累积概率p gn=1; while gngnmax+1 for j=1:2:inn %选择操作 seln=sel(s,p); %交叉操作 scro=cro(s,seln,pc); scnew(j,:)=scro(1,:); scnew(j+1,:)=scro(2,:); %变异操作 smnew(j,:)=mut(scnew(j,:),pm); smnew(j+1,:)=mut(scnew(j+1,:),pm); end s=smnew; %产生了新的种群 %计算新种群的适应度 [f,p]=objf(s); %记录当前代最好和平均的适应度 [fmax,nmax]=max(f); fmean=mean(f); ymax(gn)=fmax; ymean(gn)=

文档评论(0)

1亿VIP精品文档

相关文档