粒子群优化算法以及matlab进行算法实现

1 背景

粒子群优化算法(PSO)是一种模拟鸟群社会行为的群体搜索算法。粒子群的概念最初的意图是形象地模拟鸟群优雅而不可预测的行为,目的是发现发现鸟类同步飞行的模式,以及在最优形式重组时突然改变方向的模式。这个概念逐步演化成简单有效的优化方法。

在PSO中,个体也被称为粒子,在超维空间内粒子位置受到其他粒子的影响,是一种共生协同的方法。进行建模就是搜索过程中粒子随机的返回之前搜索过程中发现的搜索空间中成功的区域。即根据自身的经验以及群体中其他个体的经验来进行位置的调整。

2 基本粒子群优化

例子群中个体的一个基本行为是仿效领域个体的成功和自己的成功,从这个个体行为显现出来的集体行为就是在高维搜索空间发现最优区域。每个粒子代表一个潜在的解,一个群体就类似于一个种群,一个粒子类似于一个个体。粒子在多维搜索空间中飞行,会根据本身的经验以及其他粒子的经验来进行位置的调整

令Xi(t)表示第i个粒子在第t时刻在搜索空间中的位置,t是离散的时间步,粒子的位置通过对当前位置增加加速度Vi(t)来改变,即

                                                                          Xi(t+1)=Xi(t)+Vi(t+1);    其中Xi(0)~U(Xmin,Xmax)

很明显,驱动优化过程的是速度向量,速度向量反映了粒子的经验知识和粒子邻域的社会交换信息。经验知识通常被称为认知部分,与粒子从最开始到目前找到过的最佳位置(个体最佳位置)的距离成正比,社会交换信息被称为速度方程的社会部分。

根据领域大小的不同,提出了两个PSO算法,一个是全局最佳粒子群优化算法(gbest PSO),另一个是局部最佳粒子群优化(lbest  PSO).。两种算法的区别在于获取社会信息的范围,对应到算法中也就是粒子速度公式中社会部分的差别。全局最佳也就是使用粒子群中所有粒子的信息(所有粒子中最好的那个的信息);局部最佳也就是相应粒子邻域的信息,反映了局部环境的知识

3  伪代码

while 迭代数<最大迭代数

        遍历每个粒子

              根据相应的公式更新速度以及位置

              记录每个粒子的最优信息

      记录所有粒子的最优信息

end

4 实现粒子群算法的matlab代码如下

function [xm ,fv ] = PSO( fitness,N,c1,c2,w,M,D )
%% 参数 fitness为待优化的目标函数(适应度函数),N为粒子数目,c1,c2为学习因子(即各部分的贡献度,相当于加了一个权重)
% w为惯性权重,M为最大迭代数,D为自变量的个数(相当于维度)
%% 结果:xm 为目标函数取最小值时候的自变量,fv是目标函数的最小值
%%
%初始化位置以及速度
format long;  %有效数字16位
for i=1:N
    for j=1:D
        x(i,j)=randn;%随机初始化位置
        v(i,j)=randn;%随机初始化速度
    end
end

%计算每个粒子的适应度
for i=1:N
    p(i)=fitness(x(i,:));
    y(i,:)=x(i,:);
end

pg=x(N,:);    %pg全局最优
for i=1:(N-1)
    if fitness(x(i,:)) <fitness(pg)   %%根据适应度函数以及需求进行符号的选取(<,>)
        pg=x(i,:);
    end
end

%按照公式进行迭代,直到满足精度要求
for t=1:M
    for i=1:N    %更新速度、位置
        v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));%rand产生[0,1]上的均匀值,服从均匀分布
        x(i,:)=x(i,:)+v(i,:);
        if fitness(x(i,:)) <p(i)
            p(i)=fitness(x(i,:));
            y(i,:)=x(i,:);%个体历史最优进行更新
        end
        if(p(i)<fitness(pg))                         %%根据情况判断符号的选取
        pg=y(i,:);%全局最优进行更新
        end
    end
    Pbest(t)=fitness(pg);  %历次最优适应度值
end

%%结果展示
disp('****************************')
xm=pg'     %全局最优的结果
fv=fitness(pg) %最优结果的适应度值

end

        

在解决实际的问题时,对适应度函数进行设定,进行方法调用即可。

在对个体经验以及社会经验进行系数(贡献重要度)设定的时候要进行合理的设置才能达到理想的效果。

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
多个自变量的粒子群优化算法实现可以通过MATLAB进行粒子群优化算法原理是通过模拟鸟群中的飞行行为,通过粒子位置和速度更新来搜索最优解。对于多个自变量的问题,可以使用多个变量表示粒子位置和速度。 首先,需要设定问题的目标函数和目标的最小值或最大值。然后,初始化粒子群的位置和速度。可以随机生成初始位置,在指定范围内随机生成初始速度。 接下来,需要计算每个粒子的适应度值,即目标函数在当前位置的值。适应度值越小(或者越大,根据问题是最小化还是最大化),代表该位置越优秀。同时,记录每个粒子的最佳位置和适应度。 然后,更新每个粒子的速度和位置。速度更新通过使用公式:v(t+1) = w * v(t) + c1 * rand() * (pbest - x(t)) + c2 * rand() * (gbest - x(t)),其中w为惯性权重,c1和c2为加速因子,pbest表示粒子的最佳位置,gbest为全局最佳位置,x(t)表示当前位置位置更新通过使用公式:x(t+1) = x(t) + v(t+1)。 循环以上过程,直到满足终止条件(如达到最大迭代次数或适应度值收敛),算法停止。最后,返回全局最佳位置和适应度作为结果。 MATLAB中可以使用循环和矩阵运算来实现以上过程,同时可以使用plot函数实时显示粒子位置变化过程。通过调整参数(如惯性权重、加速因子、初始位置范围等),可以对算法进行优化。 以上就是多个自变量的粒子群优化算法的简要介绍和MATLAB实现

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值