文章目录
一、粒子群算法概述
1、算法思想
粒子群算法(PSO)是通过模拟鸟群觅食行为而发展起来的一种基于群体协作的随机搜索算法。PSO模拟鸟群的觅食行为。一群分散的鸟在随机地飞行觅食,它们不知道食物所在的具体位置,但是有一个间接的机制会让小鸟知道它当前位置离食物的距离(例如食物香味的浓淡等),于是各个小鸟就会在飞行过程中不断记录和更新它曾经到达的离食物最近位置,同时,它们通过信息交流的方式比较大家所找到的最好位置,得到一个当前整个群体已经找到的最佳位置。这样,每个小鸟在飞行的时候就有了一个指导的方向,它们会结合自身的经验和整个群体的经验,调整自己的飞行速度和所在位置,不断地寻找更加接近食物的位置,最终使得群体聚集到食物位置。
2、算法步骤
(1)初始化所有的粒子,初始化他们的速度和位置,并且将个体的历史最优pBest设为当前位置,而群体中最优的个体作为当前的gBest。
(2)在每一代的进化中,计算各个粒子的适应度函数值。
(3)如果该粒子当前的适应度函数值比其历史最优值要好,那么历史最优将会被当前位置所替代;如果该粒子的历史最优比全局最优要好,那么全局最优将会被该粒子的历史最优所替代。
(4)更新每个粒子的速度和位置。
(5)如果还没有到达结束条件,则转到 (2),否则输出gBest并结束。
二、matlab实现
%% 清空环境
clc
clear
%% 参数初始化
%粒子群算法中的三个参数
c1 = 1.49445;%加速因子
c2 = 1.49445;
w=0.9; %惯性权重
maxgen=1000; % 进化次数
sizepop=200; %种群规模
Vmax=1; %限制速度围
Vmin=-1;
popmax=5; %变量取值范围
popmin=-5;
dim=10; %适应度函数维数
func=1; %选择待优化的函数,1为Rastrigin,2为Schaffer,3为Griewank
Drawfunc(func);%画出待优化的函数,只画出二维情况作为可视化输出
%% 产生初始粒子和速度
for i=1:sizepop
%随机产生一个种群
pop(i,:)=popmax*rands(1,dim); %初始种群
V(i,:)=Vmax*rands(1,dim); %初始化速度
%计算适应度
fitness(i)=fun(pop(i,:),<