竞争粒子群(competitive swarm optimizer,CSO)优化算法学习笔记

竞争粒子群(competitive swarm optimizer,CSO)优化算法学习笔记

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

先导知识

粒子群优化算法:
https://blog.csdn.net/chensanwa/article/details/79284698?spm=1001.2014.3001.5506

参考文献:
R. Cheng and Y. Jin, A competitive swarm optimizer for large scale optimization, IEEE Transactions on Cybernetics, 2014, 45(2): 191-204.

竞争粒子群与粒子群的不同

竞争粒子群与粒子群优化算法不同,竞争粒子群中的每个粒子的最佳位置和全局最佳位置不再由pbest和gbest更新,而是由一种竞争机制更新。

每次竞争后,将根据胜者的信息更新败者的信息。

算法思想

一个种群P(t)有m个粒子,t为迭代次数。
每个粒子位置为:Xi(t) = (xi,1(t),xi,2(t), . . . ,xi,n(t))
速度为:Vi(t) = (vi,1(t),vi,2(t) ,…,vi,n(t))
种群被分成m/2对(假设m为偶数),每对间两个粒子进行竞争。
拥有更好适应值得为胜者,直接进入下一代种群,败者则根据胜者信息更新自己的位置和速度。更新完毕后传入下一代种群

图片来源R. Cheng and Y. Jin, A competitive swarm optimizer for large scale optimization, IEEE Transactions on Cybernetics, 2014, 45(2): 191-204.
更新公式为:
V(l,k) (t+1)=R1 (k,t) V(l,k) (t)+R2 (k,t) (X(w,k) (t)-X(l,k) (t))
+ φR3k,t(Xkt -Xl,kt)(1)
X(l,k) (t+1)=X(l,k) (t))+V(l,k) (t+1) (2)
l表示败者,w表示胜者,R()为随机产生的向量,X ̅k (.)模式是全局粒子平均位置,φ为控制X ̅k (.)影响的参数。
公式(1)的第一部分与PSO中的惯性部分类似,第二部分为败者从胜者处学习,第三部分则是全局学习,可以与PSO中的三部分对照看。

由上可以得出伪代码

图片来源R. Cheng and Y. Jin, A competitive swarm optimizer for large scale optimization, IEEE Transactions on Cybernetics, 2014, 45(2): 191-204.
文章图片均来自:R. Cheng and Y. Jin, A competitive swarm optimizer for large scale optimization, IEEE Transactions on Cybernetics, 2014, 45(2): 191-204.

示例代码

代码来自PlatEMO工具箱,下载地址:https://github.com/BIMK/PlatEMO

classdef CSO < ALGORITHM
% <large/none> <constrained/none>
% Competitive swarm optimizer
% phi — 0.1 — Social factor

%------------------------------- Reference --------------------------------
% R. Cheng and Y. Jin, A competitive swarm optimizer for large scale
% optimization, IEEE Transactions on Cybernetics, 2014, 45(2): 191-204.
%------------------------------- Copyright --------------------------------
% Copyright © 2021 BIMK Group. You are free to use the PlatEMO for
% research purposes. All publications which use this platform or any code
% in the platform should acknowledge the use of “PlatEMO” and reference “Ye
% Tian, Ran Cheng, Xingyi Zhang, and Yaochu Jin, PlatEMO: A MATLAB platform
% for evolutionary multi-objective optimization [educational forum], IEEE
% Computational Intelligence Magazine, 2017, 12(4): 73-87”.
%--------------------------------------------------------------------------

methods
    function main(Algorithm,Problem)
        %% Parameter setting
        phi = Algorithm.ParameterSet(0.1);
        
        %% Generate random population
        Population = Problem.Initialization();
        
        %% Optimization
        while Algorithm.NotTerminated(Population)
            % Determine the losers and winners
            rank    = randperm(Problem.N);
            loser   = rank(1:end/2);
            winner  = rank(end/2+1:end);
            replace = FitnessSingle(Population(loser)) < FitnessSingle(Population(winner));
            temp            = loser(replace);
            loser(replace)  = winner(replace);
            winner(replace) = temp;
            % Update the losers by learning from the winners
            LoserDec  = Population(loser).decs;
            WinnerDec = Population(winner).decs;
            LoserVel  = Population(loser).adds(zeros(size(LoserDec)));
            R1  = repmat(rand(Problem.N/2,1),1,Problem.D);
            R2  = repmat(rand(Problem.N/2,1),1,Problem.D);
            R3  = repmat(rand(Problem.N/2,1),1,Problem.D);
            LoserVel = R1.*LoserVel + R2.*(WinnerDec-LoserDec) + phi.*R3.*(repmat(mean(Population.decs,1),Problem.N/2,1)-LoserDec);
            LoserDec = LoserDec + LoserVel;
            Population(loser) = SOLUTION(LoserDec,LoserVel);
        end
    end
end

end

  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
粒子群优化算法 (particle swarm optimization, PSO) 是一种基于群体智能的优化算法,其算法原理可以概括为以下几个步骤: 1. 初始化一群粒子的位置和速度,并随机分配其初始位置和速度。 2. 计算每个粒子的适应度值,并根据适应度值更新每个粒子的最佳位置和全局最佳位置。 3. 根据每个粒子的最佳位置和全局最佳位置,更新粒子的速度和位置。 4. 判断是否满足停止条件,若满足则输出结果,否则回到第 2 步。 具体来说,PSO 算法的每个粒子都有一个位置向量和一个速度向量。在算法的每一轮迭代中,粒子的速度和位置会根据以下公式进行更新: $v_{i}(t+1)=wv_{i}(t)+c_{1}r_{1}(p_{i}-x_{i}(t))+c_{2}r_{2}(p_{g}-x_{i}(t))$ $x_{i}(t+1)=x_{i}(t)+v_{i}(t+1)$ 其中,$v_{i}(t)$ 表示粒子 $i$ 在时间 $t$ 的速度向量,$x_{i}(t)$ 表示粒子 $i$ 在时间 $t$ 的位置向量,$p_{i}$ 表示粒子 $i$ 的历史最佳位置,$p_{g}$ 表示全局最佳位置,$w$、$c_{1}$ 和 $c_{2}$ 是常数,$r_{1}$ 和 $r_{2}$ 是 $[0,1]$ 之间的随机数。 在算法的每轮迭代中,粒子的速度和位置会不断地更新,直到满足停止条件为止。通常,停止条件可以是达到最大迭代次数、适应度值达到一定阈值等。 PSO 算法通过模拟鸟群、鱼群等群体的行为,将一群粒子看作是搜索空间中的一个个潜在解,通过不断更新粒子的位置和速度,最终找到全局最优解或近似最优解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值