基于Ackley's function的,差分进化算法和粒子群算法的比较。
以下是matlab源码。
%%%%%%%%%%%%
%%%%%%%%%%%% Ackley's function
clear all; %清除所有变量
close all; %清图
clc; %清屏
x=-5:0.01:5;
y=-5:0.01:5;
N=size(x,2);
for i=1:N
for j=1:N
z(i,j)=-20*exp(-0.2*(0.5*(x(i)^2+y(j)^2))^0.5)-exp(0.5*(cos(2*pi*x(i))+cos(2*pi*y(j))))+20+exp(1);
end
end
mesh(x,y,z)
xlabel('x')
ylabel('y')
粒子群算法:
%%%%%%%%%%%%%%%%%粒子群算法求函数极值%%%%%%%%%%%%%%%%%%%%%%%%%%
tic %程序运行起点
time =[];
for i=1:500
time(i)=1;
end
%%%%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all; %清除所有变量
close all; %清图
clc; %清屏
N=100; %群体粒子个数
D=2; %粒子维数
T=200; %最大迭代次数
c1=1.5; %学习因子1
c2=1.5; %学习因子2
Wmax=0.8; %惯性权重最大值
Wmin=0.4; %惯性权重最小值
Xmax=5; %位置最大值
Xmin=-5; %位置最小值
Vmax=1; %速度最大值