粒子群算法

1.1标准的粒子群算法
粒子群算法( Particle Swarm Optimization, PSO )最开始是 Eberhart 和
Kennedy 通过观察自然界中动物的群体行为而创作出来的。鸟儿在天空中寻找
食物,在一定的飞行范围内存在一块食物,食物的具体位置需要鸟儿自己去搜寻,
鸟群通过合作共享信息,每只鸟会回顾自己的路径,综合考虑自己走过的最优的
位置和群体最优位置决定下一步的方向,鸟群需要飞行一定的距离才能够寻找到
范围内的食物,如果大家都到了同一个地方附近,就会停止寻找。
1.2粒子群的进化方程
Vij(t+1)= (t)vij(t)+c1r1(pij(t)-xij(t))+c2r2(pgj(t)-xij(t))
Xij(t+1)=vij(t)+xij(t)
其中:
t:表示粒子的进化代数;
j:表示粒子的第j维;
r1,r2:表示独立随机数,r1∈[0,1],r2∈[0,1];
c1,c2:表示学习因子,加速权重;
1.3标准的惯性权重
在这里插入图片描述
1.4粒子群算法仿真

clear;clc;

N = 80;                              % 群体例子个数

D = 2;                                  % 粒子维度

T = 200;                              % 最大迭代次数

c1 = 2;                              % 学习因子1  

c2 = 2;                              % 学习因子2

Wmax = 0.9;                         % 惯性权重最大值

Wmin = 0.4;                         % 惯性权重最小值

Xmax = 4;                           % 位置最大值

Xmin =  -4;                         % 位置最小值

Vmax = 1;                            % 速度最大值

Vmin = -1;                           % 速度最小值

%%%%%%%%%%  初始化种群个体(限定位置和速度) %%%%%%%%%

x = rand(N, D)*(Xmax - Xmin) + Xmin;

v = rand(N, D)*(Vmax - Vmin) + Vmin;

%%%%%%%%%%  初始化个体最优位置和最优值 %%%%%%%%%

p = x;

pbest = ones(N, 1);

for i = 1:N

   pbest(i) = func2(x(i, :));

end

%%%%%%%%%%  初始化全局最优位置和最优值 %%%%%%%%%

g = ones(1, D);

gbest = inf;

for i = 1:N

   if pbest(i) < gbest

      g = p(i, :);

      gbest = pbest(i);

   end

end

gb = ones(1, T);

%%%%%%%%%%  按照公式依次迭代直到满足精度或者迭代次数 %%%%%%%%%

for i = 1:T

   for j = 1:N

      %%%%%%%%%%  更新个体最优位置和最优值 %%%%%%%%%

      if func2(x(j, :)) < pbest(j)

         p(j, :) = x(j, :);

         pbest(j) = func2(x(j, :));

      end

      %%%%%%%%%%  更新全局最优位置和最优值 %%%%%%%%%

      if pbest(j) < gbest

         g = p(j, :);

         gbest = pbest(j);

      end

      %%%%%%%%%%  动态计算惯性权重值 %%%%%%%%%

      w = Wmax -(Wmax - Wmin)*i/T;

      %%%%%%%%%%  更新位置和速度值 %%%%%%%%%

      v(j, :) = w*v(j, :) + c1*rand*(p(j, :) - x(j, :)) + c2*rand*(g - x(j, :));

      x(j, :) = x(j, :) + v(j, :);

      %%%%%%%%%%  边界条件处理 %%%%%%%%%

      for ii = 1:D

         if (v(j, ii) > Vmax) || (v(j, ii) < Vmin)

            v(j, ii) = rand*(Vmax - Vmin) + Vmin;

         end

         if (x(j, ii) > Xmax) || (x(j, ii) < Xmin)

            x(j, ii) = rand*(Xmax - Xmin) + Xmin;

         end

      end

   end

      %%%%%%%%%%  记录历代全局最优值 %%%%%%%%%

      gb(i) = gbest;

end

disp(['最优个体:' num2str(g)]);

disp(['最优值:' num2str(gb(end))]);

plot(gb, 'LineWidth', 2);

xlabel('迭代次数');

ylabel('适应度值');

title('适应度进化曲线');

功能函数

function result = func2(x)
% F = 0;
% for i = 1:30
    % F = F+x(i)^2+x(i)-6;
 result = cos(x(2))*cos(x(1))*x(1)-sin(x(1)) ;

1.5 运行结果
在这里插入图片描述

迭代图
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值