粒子群算法原理/源码

粒子群算法

粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。 ------摘自【百度百科】

迭代公式:
啊
啊

参数描述功能
k迭代次数~
id粒子标号描述为第几个粒子
w惯性权重继承前一次迭代移动的程度
r1,r2随机数范围(0,1)~
c1,c2自定参数~
pbest粒子历史最优某粒子目前为止取到的历史最优值
gbest粒子全局最优所有粒子目前为止取到的全局最优值
x粒子坐标~
v粒子速度包括方向与步长

matlab源码:

clear
clc
figure(1);
subplot(1,2,1)
[X,Y]=meshgrid(-12:0.05:12,-12:0.05:12);
img=fun(X,Y);
mesh(X,Y,img);

hold on;

n=60;  %粒子数目
D=2;   %维度
nmax=100000000000000; %最大迭代次数

v=zeros(n,D); %粒子速度
pbest=zeros(n,1); %个体最优
xypbest=zeros(n,D); %个体最优坐标
gbest=0; %种群最优
xygbest=zeros(1,D); %种群最优坐标

%%定义参数
c1=1;
c2=1;
r1=rand(1);
r2=rand(1);
w=0.5;
j=0;

a=unifrnd(-12,12,[n,D]); %随机生成范围内粒子群


for i=[1:n]
    img=fun(a(i,1),a(i,2));
    if img>pbest(i)
        pbest(i)=img;
        xypbest(i,:)=a(i,:);
    end
   if img>gbest
       gbest=img;
       xygbest=a(i,:);
   end
     plot3(a(i,1),a(i,2),img,'+')
end
v(1)=1;
record=sum(img)/n;
while (j<nmax)&&(sum(sum(abs(v))')>0.001)
    r1=rand(1);
    r2=rand(1);
    v=w*v+r1*c1*(xypbest-a)+c2*r2*(xygbest-a);
    
    temp=(v>0.2);
    v=(~temp).*v+0.2*temp;
    
    temp=(v<-0.2);
    v=(~temp).*v-0.2*temp;

    
    a=a+v;

    temp=(a>12);
    a=(~temp).*a+temp*12;


    temp=(a<-12);
    a=(~temp).*a-temp*12;

    for i=[1:n]

        img=fun(a(i,1),a(i,2));
        if img>pbest(i)
            pbest(i)=img;
            xypbest=a(i,:);
        end
       if img>gbest
           gbest=img;
           xygbest=a(i,:);
       end
       
    end
   j=j+1;
   img=fun(a(:,1),a(:,2));
   record=[record;sum(img)/n];
end
subplot(1,2,2)
xlabel('x')
ylabel('y')
zlabel('img')

img=fun(X,Y);
mesh(X,Y,img);

hold on;
for i=[1:n]
    img=fun(a(i,1),a(i,2));
    plot3(a(i,1),a(i,2),img,'r*')
    hold on
end
disp(j)
figure(2);
axis([0 900 -inf inf]);
plot([0:j],record)

测试函数:

function [ z ] = fun( x,y )


z=0.5+((sin(sqrt(x.^2+y.^2))).^2-0.5)./(1+0.001*(x.*x+y.*y)).^2;
end

原创文章,未经允许,禁止转载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
粒子算法是一种优化算法,用于寻找最优解,它模仿了鸟群或鱼群等动物的行为,算法的主要思想是通过粒子之间的合作和竞争来搜索问题的最优解。在使用粒子算法进行优化时,码的质量和性能直接影响算法的结果。下面是改进粒子算法Matlab码的一些建议: 1.修改目标函数: 在改进粒子算法的Matlab码时,我们可以尝试修改目标函数,以获得更好的结果。可以使用其他优化算法或更好的数学函数来修复粒子算法中的问题。 2.适当增加粒子数量: 粒子算法中的粒子数量很重要。增加粒子数可以获得更精确的结果,但会增加计算成本。因此,需要平衡计算成本和结果精度。 3.修改参数: 粒子算法中有多个参数,例如惯性权值,学习因子等,它们直接影响算法的性能和效率。改变这些参数可以改善算法的运行和搜索能力。 4.使用局部搜索策略: 粒子算法本质上是一种全局搜索算法,由于其随机性和多样性,它可以避免掉入局部极小值。但是,有时候全局搜索难以得到最优解,可以考虑在算法中添加局部搜索策略以提高精度。 5.优化计算性能: 在优化算法中,计算性能很重要。为了提高Matlab码的计算效率,可以使用C++等高性能语言重写部分代码,或使用并行计算的技术。还可以采用其他优化方法,例如矩阵分解和空间索引算法,来减少计算成本。 总之,改进粒子算法Matlab码需要充分了解它的原理和局限性,同时考虑目标函数、粒子数量、参数和计算性能等多种因素,并适应具体应用场景选择不同的优化方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值