1.1标准的粒子群算法
粒子群算法( Particle Swarm Optimization, PSO )最开始是 Eberhart 和
Kennedy 通过观察自然界中动物的群体行为而创作出来的。鸟儿在天空中寻找
食物,在一定的飞行范围内存在一块食物,食物的具体位置需要鸟儿自己去搜寻,
鸟群通过合作共享信息,每只鸟会回顾自己的路径,综合考虑自己走过的最优的
位置和群体最优位置决定下一步的方向,鸟群需要飞行一定的距离才能够寻找到
范围内的食物,如果大家都到了同一个地方附近,就会停止寻找。
1.2粒子群的进化方程
Vij(t+1)= (t)vij(t)+c1r1(pij(t)-xij(t))+c2r2(pgj(t)-xij(t))
Xij(t+1)=vij(t)+xij(t)
其中:
t:表示粒子的进化代数;
j:表示粒子的第j维;
r1,r2:表示独立随机数,r1∈[0,1],r2∈[0,1];
c1,c2:表示学习因子,加速权重;
1.3标准的惯性权重
1.4粒子群算法仿真
clear;clc;
N = 80; % 群体例子个数
D = 2; % 粒子维度
T = 200; % 最大迭代次数
c1 = 2; % 学习因子1
c2 = 2; % 学习因子2
Wmax = 0.9; % 惯性权重最大值
Wmin = 0.4; % 惯性权重最小值
Xmax = 4; % 位置最大值
Xmin = -4; % 位置最小值
Vmax = 1; % 速度最大值
Vmin = -1; % 速度最小值
%%%%%%%%%% 初始化种群个体(限定位置和速度) %%%%%%%%%
x = rand(N, D)*(Xmax - Xmin) + Xmin;
v = rand(N, D)*(Vmax - Vmin) + Vmin;
%%%%%%%%%% 初始化个体最优位置和最优值 %%%%%%%%%
p = x;
pbest = ones(N, 1);
for i = 1:N
pbest(i) = func2(x(i, :));
end
%%%%%%%%%% 初始化全局最优位置和最优值 %%%%%%%%%
g = ones(1, D);
gbest = inf;
for i = 1:N
if pbest(i) < gbest
g = p(i, :);
gbest = pbest(i);
end
end
gb = ones(1, T);
%%%%%%%%%% 按照公式依次迭代直到满足精度或者迭代次数 %%%%%%%%%
for i = 1:T
for j = 1:N
%%%%%%%%%% 更新个体最优位置和最优值 %%%%%%%%%
if func2(x(j, :)) < pbest(j)
p(j, :) = x(j, :);
pbest(j) = func2(x(j, :));
end
%%%%%%%%%% 更新全局最优位置和最优值 %%%%%%%%%
if pbest(j) < gbest
g = p(j, :);
gbest = pbest(j);
end
%%%%%%%%%% 动态计算惯性权重值 %%%%%%%%%
w = Wmax -(Wmax - Wmin)*i/T;
%%%%%%%%%% 更新位置和速度值 %%%%%%%%%
v(j, :) = w*v(j, :) + c1*rand*(p(j, :) - x(j, :)) + c2*rand*(g - x(j, :));
x(j, :) = x(j, :) + v(j, :);
%%%%%%%%%% 边界条件处理 %%%%%%%%%
for ii = 1:D
if (v(j, ii) > Vmax) || (v(j, ii) < Vmin)
v(j, ii) = rand*(Vmax - Vmin) + Vmin;
end
if (x(j, ii) > Xmax) || (x(j, ii) < Xmin)
x(j, ii) = rand*(Xmax - Xmin) + Xmin;
end
end
end
%%%%%%%%%% 记录历代全局最优值 %%%%%%%%%
gb(i) = gbest;
end
disp(['最优个体:' num2str(g)]);
disp(['最优值:' num2str(gb(end))]);
plot(gb, 'LineWidth', 2);
xlabel('迭代次数');
ylabel('适应度值');
title('适应度进化曲线');
功能函数
function result = func2(x)
% F = 0;
% for i = 1:30
% F = F+x(i)^2+x(i)-6;
result = cos(x(2))*cos(x(1))*x(1)-sin(x(1)) ;
1.5 运行结果
迭代图