fantuanxiaot出品
基于谢菲尔德大学的遗传算法工具箱的动态图制作
代码如下
本帖隐藏的内容
- function Gif_Geatbx_Example
- % copyright by fantuanxiaot
- % 基于谢菲尔德大学遗传算法工具箱制作动态gif图的练习
- % 遗传算法的一些参数设置
- % 上下界
- ub_lb=[-pi -pi;pi pi];
- % 各种概率和其他参数
- Population=100;
- MaxIteration=50;
- SelectionProbability=0.9;
- CrossoverProbability=0.7;
- MutationProbability=0.02;
- NumberofIndividuals=2;
- % 准确度
- Precision=10;
- % 建立扫描区间
- FielD=[repmat(Precision,1,NumberofIndividuals);ub_lb;repmat([1;0;1;1],1,NumberofIndividuals)];
- Iteration=0;
- Chromsome=CRTBP(Population,NumberofIndividuals*Precision);
- % X是初始的自变量种群
- X=BS2RV(Chromsome,FielD);
- % ObjV是初始的适应度
- ObjV=ObjVfun(X);
- % 先将初始的自变量种群在图中进行描绘
- x=-pi:pi/30:pi;
- y=x;
- [xx,yy]=meshgrid(x,y);
- zz=exp(-xx.^2-yy.^2);
- figure(1)
- set(figure(1),'color','w')
- value_x=X(:,1);
- value_y=X(:,2);
- value_z=ObjV;
- % 绿的小三角形就是初始的种群
- h=plot3(value_x,value_y,value_z,'k<','markersize',10,'markerfacecolor','g');
- hold on
- mesh(xx,yy,zz)
- title('太阳出来了我爬山咯','fontsize',16,...
- 'fontname','Times New Roman')
- colormap('HSV')
- xlim([-pi,pi])
- ylim([-pi,pi])
- hold off
- % 记录最优种群和适应度值
- traceX=zeros(MaxIteration,NumberofIndividuals);
- traceY=zeros(MaxIteration,1);
- disp('动态图即将开始,还剩下3秒 ')
- disp('动态图即将开始,还剩下2秒 ')
- disp('动态图即将开始,还剩下1秒 ')
- pause(3)
- % 动态图开始
- while Iteration<MaxIteration
- % 寻找最大值
- FitV=RANKING(-ObjV);
- SelCh=SELECT('SUS',Chromsome,FitV,SelectionProbability);
- SelCh=RECOMBIN('XOVSP',SelCh,CrossoverProbability);
- SelCh=MUT(SelCh,MutationProbability);
- % 形成了新的种群
- X=BS2RV(SelCh,FielD);
- ObjSelV=ObjVfun(X);
- [Chromsome,ObjV]=REINS(Chromsome,SelCh,1,1,ObjV,ObjSelV);
- X=BS2RV(Chromsome,FielD);
- % 迭代次数加1
- Iteration=Iteration+1;
- % ObjV和X为新的种群和适应度值
- value_x=X(:,1);
- value_y=X(:,2);
- value_z=ObjV;
- % 对图更换新的小三角点
- set(h,'xdata',value_x,'ydata',value_y,'zdata',value_z)
- pause(0.01)
- % 最优值的动态摸索
- Active_plot(Iteration)
- disp(['寻找的次数为第',num2str(Iteration),'次'])
- end
- end
- % 举例函数
- function ObjV=ObjVfun(X)
- N=size(X,1);
- ObjV=zeros(N,1);
- for i=1:N
- ObjV(i)=example_fun(X(i,:));
- end
- end
- % 举例函数
- function f=example_fun(x)
- f=exp(-x(1)^2-x(2)^2);
- end
- % 动态作图函数
- function Active_plot(i)
- filename='Gif_Geatbx_Example.gif';
- % f.cdata和f.colormap
- frame=getframe(gcf);
- image=frame2im(frame);
- [image,map]=rgb2ind(image,256);
- if i==1
- imwrite(image,map,filename,'gif','Loopcount',inf,'DelayTime',0.05);
- else
- imwrite(image,map,filename,'gif','WriteMode','append','DelayTime',0.05);
- end
- end
复制代码