选用随机的权重,可以在多峰函数求解的时候,避免陷入局部最优。
一、目标函数
y=x(1)^2+2*x(2)^4;
二、随机权重的计算公式
权重可以理解为所占工作量的大小及影响整体能力的程度。
权重w设定为某种随机分布的随机数,当粒子在起始位置接近最优点时候,权重最小,加快算法的收敛。同时也可以克服在初期找不到最优点的局限。
%w=u+m*N(0,1)
%u=u(min)+[u(max)-u(min)]*rand(0,1)
三、MATLAB代码实现
随机权重的PSO:
function [xm,fv]=suijiquanzhongPSO(suijiquanzhonghanshu,N,c1,c2,meanmax,meanmin,sigma,M,D)
%目标函数、粒子数、学习因子、学习因子、最大权重、最小权重、方差、迭代步数
format long;
for i=1:N
for j=1:D
%初始化位置
x(i,j)=randn;
%初始化速度
v(i,j)=randn;
end
end
%计算适应度
for i=1:N
p(i)=suijiquanzhonghanshu(x(i,:));
y(i,:)=x(i,:);
end
zuiyou=x(N,:);%全局最优
for i=1:N-1
if suijiquanzhonghanshu(x(i,:))<suijiquanzhonghanshu(zuiyou)
zuiyou=x(i,:);
end
end
%迭代求解
for t=1:M
for i=1:N
miu=meanmin+(meanmax-meanmin)*rand();
w=miu+sigma*randn();
v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(zuiyou-x(i,:));
x(i,:)=x(i,:)+v(i,:);
if suijiquanzhonghanshu(x(i,:))<p(i)
p(i)=suijiquanzhonghanshu(x(i,:));
y(i,:)=x(i,:);
end
if p(i)<suijiquanzhonghanshu(zuiyou)
zuiyou=y(i,:);
end
end
pbest(t)=suijiquanzhonghanshu(zuiyou);
end
r=[1:1:100];
plot(r,pbest,'r--','linewidth',2);
xlabel('迭代次数');ylabel('适应度');
title('随机权重策略自适应算法收敛曲线');
grid on
hold on
xm=zuiyou';
fv=suijiquanzhonghanshu(zuiyou);
目标函数:
function y=suijiquanzhonghanshu(x)
y=x(1)^2+2*x(2)^4;
end
%w=u+m*N(0,1)
%u=u(min)+[u(max)-u(min)]*rand(0,1)
四、测试
在命令行输入
[xm,fv]=suijiquanzhongPSO(@suijiquanzhonghanshu,100,2,2,0.8,0.5,0.2,100,2)
选取参数含义为:
目标函数:suijiquanzhonghanshu
粒子数:100
学习因子:2
权重最大值:0.8
权重最小值:0.5
随机权重平均值的方差:0.2
迭代步数:100
结果
得到理论最小值点为xm所表示:(-0.000004443481202e-04, -0.408099448228020e-04)
最小值fv所表示为: 5.744903292062844e-18
根据检验,图像符合实际,所以计算的结果可以认为是准确的。
如有遗漏或者错误,请在评论区中指正!