Matlab粒子群算法(PSO)优化程序——调整权重、改进学习因子

粒子群算法( Particle Swarm Optimization, PSO)在应用的过程中主要调整权重,学习因子,才能对解决的问题有所针对性。下面有6种调整权重和学习因子:
一、调整粒子群算法的权重
1.线性递减权重
2.自适应调整权重
3.随机权重
二、调整粒子群算法的学习因子
1.收缩因子
2.同步学习因子
3.异步学习因子
目标函数如下:

function y=A11_01(x)

y=x(1)^2+x(2)^2-x(1)*x(2)-10*x(1)-4*x(2)+60;

一、调整粒子群算法的权重
1.线性递减权重
Shi.Y认为较大的权重惯性有利于全局搜索,较小的权重有利于局部搜索,他提出的线性递减权重刚好满足这样的需求。
在这里插入图片描述
一般而言,在这里插入图片描述k为当前迭代次数,T为最大迭代次数。

%粒子群 PSO  线性递减权重
clear 
clc

%%预设参数
n=100;
d=2; %变量个数
c1=2;
c2=2;
w=0.9;
K=100;
ws=0.9;
we=0.4;

%%分布粒子
x=-10+20*rand(n,d);
v=-5+10*rand(n,d);

%%计算适应度
fit=zeros(n,1);
for j=1:n
    fit(j)=A11_01(x(j,:));
end
%计算个体极值
pbest=x;
ind=find(min(fit)==fit);
gbest=x(ind,:);

%%更新速度与位置
for i=1:K
    for m=1:n
       v(m,:)=w*v(m,:) + c1*rand*(pbest(m,:)-x(m,:)) + c2*rand*(gbest-x(m,:));
       w=ws-(ws-we)*(i/K);
       
       v(m,find(v(m,:)<-10))=-10;
       v(m,find(v(m,:)>10))=10;
       
       x(m,:)=x(m,:)+0.5*v(m,:);
       x(m,find(x(m,:)<-10))=-10;
       x(m,find(x(m,:)>10))=10;
       
       %重新计算适应度
       fit(m)=A11_01(x(m,:));
       if x(m,:)<A11_01(pbest(m,:))
           pbest(m,:)=x(m,:);
       end
       if A11_01(pbest(m,:))<A11_01(gbest)
           gbest=pbest(m,:);
       end
    end
    fitnessbest(i)=A11_01(gbest);
end
plot(fitnessbest);
xlabel('迭代次数');
ylabel('适应度值');
title('迭代优化过程');

评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值