问题描述
%%%%%%%%%f(x,y)=3cos(xy)+x+y%%%%%%%%%%
clear all; %清除所有变量
close all; %清图
clc; %清屏
x=-4:0.02:4;
y=-4:0.02:4;
N=size(x,2);
for i=1:N
for j=1:N
z(i,j)=3*cos(x(i)*y(j))+x(i)+y(j);
end
end
mesh(x,y,z)
xlabel('x')
ylabel('y')
仿真过程
matlab源码
%该适应度函数命名为func2.m
%%%%%%%%%%%%%%%%%%%%%%%适应度函数%%%%%%%%%%%%%%%%%%%%%%%%%
function value=func2(x)
value=3*cos(x(1)*x(2))+x(1)+x(2);
%20200928lu注:该matlab代码成功在matlabR2019a运行
%%%%%%%%%%%%%%%%%差分进化算法求函数极值%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%%%%
clear all; %清除所有变量
close all; %清图
clc; %清屏
NP=20; %个体数目
D=2; %变量的维数
G=100; %最大进化代数
F=0.5; %变异算子
CR=0.1; %交叉算子
Xs=4; %上限
Xx=-4; %下限
%%%%%%%%%%%%%%%%%%%%%%%%%赋初值%%%%%%%%%%%%%%%%%%%%%%%%
x=zeros(D,NP); %初始种群
v=zeros(D,NP); %变异种群
u=zeros(D,NP); %选择种群
x=rand(D,NP)*(Xs-Xx)+Xx; %赋初值
%%%%%%%%%%%%%%%%%%%%计算目标函数%%%%%%%%%%%%%%%%%%%%%%%
for m=1:NP
Ob(m)=func2(x(:,m));
end
trace(1)=min(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)=x(:,r1)+F*(x(:,r2)-x(:,r3));
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
%%%%%%%%%%%%%%%%%%%边界条件的处理%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%边界吸收%%%%%%%%%%%%%%%%%%%%%%%%%
%20201001lu注:该边界处理方式是,超过上限的值改为等于上限值,超过下限的值改为等于下限值
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)=func2(u(:,m));
end
for m=1:NP
if Ob1(m)<Ob(m)
x(:,m)=u(:,m);
end
end
for m=1:NP
Ob(m)=func2(x(:,m));
end
trace(gen+1)=min(Ob);
end
[SortOb,Index]=sort(Ob);
x=x(:,Index);
X=x(:,1); %最优变量
Y=min(Ob); %最优值
%%%%%%%%%%%%%%%%%%%%%%%%%画图%%%%%%%%%%%%%%%%%%%%%%%%%%
figure
plot(trace);
xlabel('迭代次数')
ylabel('目标函数值')
title('DE目标函数曲线')
此处为得到的优化结果
>> X=x(:,1)
X =
-3.9478
-4.0000
>> Y=min(Ob)
Y =
-10.9374
中 智能优化算法及其MATLAB实例(第二版)[包子阳,余继周][电子工业出版社][2018年01月][9787121330308]
经过调试,随书所有代码均可以在matlabR2019a上成功运行https://mianbaoduo.com/o/bread/YZyVlp9v