【啃书】《智能优化算法及其MATLAB实例》例3.3离散差分进化算法进行函数寻优

    科技2022-09-06  111

    文章目录

    问题描述仿真过程matlab源码

    问题描述

    仿真过程

    matlab源码

    %该脚本要命名为func3.m %%%%%%%%%%%%%%%%%%%%%%%适应度函数%%%%%%%%%%%%%%%%%%%%%%%%% function y=func3(x) y=-((x(1).^2+x(2)-1).^2+(x(1)+x(2).^2-7).^2)/200+10; 200928lu注:该matlab代码成功在matlabR2019a运行 %%%%%%%%%%%%%%%%%离散差分进化算法求函数极值%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%%%% clear all; %清除所有变量 close all; %清图 clc; %清屏 NP=20; %个体数目 D=2; %变量的维数 G=100; %最大进化代数 F=0.5; %变异算子 CR=0.1; %交叉算子 Xs=100; %上限 Xx=-100; %下限 %%%%%%%%%%%%%%%%%%%%%%%%%赋初值%%%%%%%%%%%%%%%%%%%%%%%% x=zeros(D,NP); %初始种群 v=zeros(D,NP); %变异种群 u=zeros(D,NP); %选择种群 % x=randint(D,NP,[Xx,Xs]); %赋初值 x=randi([Xx,Xs],D,NP); %%%%%%%%%%%%%%%%%%%%计算目标函数%%%%%%%%%%%%%%%%%%%%%%% for m=1:NP Ob(m)=func3(x(:,m)); end trace(1)=max(Ob); %%%%%%%%%%%%%%%%%%%%%%%差分进化循环%%%%%%%%%%%%%%%%%%%%% for gen=1:G %%%%%%%%%%%%%%%%%%%%%%变异操作%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%r1,r2,r3和m互不相同%%%%%%%%%%%%%%% for m=1:NP % r1=randint(1,1,[1,NP]); r1=randi([1,NP],1,1); while (r1==m) % r1=randint(1,1,[1,NP]); r1=randi([1,NP],1,1); end % r2=randint(1,1,[1,NP]); r2=randi([1,NP],1,1); while (r2==m)|(r2==r1) % r2=randint(1,1,[1,NP]); r2=randi([1,NP],1,1); end % r3=randint(1,1,[1,NP]); r3=randi([1,NP],1,1); while (r3==m)|(r3==r1)|(r3==r2) % r3=randint(1,1,[1,NP]); r3=randi([1,NP],1,1); end v(:,m)=floor(x(:,r1)+F*(x(:,r2)-x(:,r3))); 201001lu注:离散差分进化算法的变异算子 end %%%%%%%%%%%%%%%%%%%%%%交叉操作%%%%%%%%%%%%%%%%%%%%%%% % r=randint(1,1,[1,D]); r=randi([1,D],1,1); for n=1:D cr=rand(1); if (cr<=CR)|(n==r) u(n,:)=v(n,:); else u(n,:)=x(n,:); end end %%%%%%%%%%%%%%%%%%%边界条件的处理%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%边界吸收%%%%%%%%%%%%%%%%%%%%%%%%% for n=1:D for m=1:NP if u(n,m)<Xx u(n,m)=Xx; end if u(n,m)>Xs u(n,m)=Xs; end end end %%%%%%%%%%%%%%%%%%%%%%选择操作%%%%%%%%%%%%%%%%%%%%%%% for m=1:NP Ob1(m)=func3(u(:,m)); end for m=1:NP if Ob1(m)>Ob(m) x(:,m)=u(:,m); end end for m=1:NP Ob(m)=func3(x(:,m)); end trace(gen+1)=max(Ob); end [SortOb,Index]=sort(Ob); X=x(:,Index); Xbest=X(:,end); %最优变量 Y=max(Ob); %最优值 %%%%%%%%%%%%%%%%%%%%%%%%%画图%%%%%%%%%%%%%%%%%%%%%%%%%% figure plot(trace); xlabel('迭代次数') ylabel('目标函数值') title('DE目标函数曲线')

    此处为得到的优化结果 >> Xbest=X(:,end) Xbest = -2 -3 >> Y=max(Ob) Y = 10

    中 智能优化算法及其MATLAB实例(第二版)[包子阳,余继周][电子工业出版社][2018年01月][9787121330308]

    Processed: 0.008, SQL: 9