粒子群优化算法验证及实现
文章目录
算法背景简介
粒子群优化算法(Partical Swarm Optimization PSO)
粒子群中的每一个粒子都代表一个问题的可能解,通过粒子个体的简单行为,群体内的信息交互实现问题求解的智能性。
由于PSO操作简单、收敛速度快,因此在函数优化、 图像处理、大地测量等众多领域都得到了广泛的应用。 随着应用范围的扩大,PSO算法存在早熟收敛、维数灾难、易于陷入局部极值等问题需要解决.
粒子群算法最早是由Eberhart和Kennedy于1995年提出,它的基本概念源于对鸟群觅食行为的研究。设想这样一个场景:一群鸟在随机搜寻食物,在这个区域里只有一块食物,所有的鸟都不知道食物在哪里,但是它们知道当前的位置离食物还有多远。最简单有效的策略?寻找鸟群中离食物最近的个体来进行搜素。PSO算法就从这种生物种群行为特性中得到启发并用于求解优化问题。
用一种粒子来模拟上述的鸟类个体,每个粒子可视为N维搜索空间中的一个搜索个体,粒子的当前位置即为对应优化问题的一个候选解,粒子的飞行过程即为该个体的搜索过程.粒子的飞行速度可根据粒子历史最优位置和种群历史最优位置进行动态调整.粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子单独搜寻的最优解叫做个体极值,粒子群中最优的个体极值作为当前全局最优解。不断迭代,更新速度和位置。最终得到满足终止条件的最优解。
算法实现思路
1、初始化
首先,我们设置最大迭代次数,目标函数的自变量个数,粒子的最大速度,位置信息为整个搜索空间,我们在速度区间和搜索空间上随机初始化速度和位置,设置粒子群规模为M,每个粒子随机初始化一个飞翔速度。
2、 个体极值与全局最优解
定义适应度函数,个体极值为每个粒子找到的最优解,从这些最优解找到一个全局值,叫做本次全局最优解。与历史全局最优比较,进行更新。
3、 更新速度和位置的公式
4、 终止条件
(1)达到设定迭代次数;
(2)代数之间的差值满足最小界限
以上就是最基本的一个标准PSO算法流程。和其它群智能算法一样,PSO算法在优化过程中,种群的多样性和算法的收敛速度之间始终存在着矛盾.对标准PSO算法的改进,无论是参数的选取、小生境技术的采用或是其他技术与PSO的融合,其目的都是希望在加强算法局部搜索能力的同时,保持种群的多样性,防止算法在快速收敛的同时出现早熟收敛。
算法运行及其分析
在粒子群算法当中,我们一共有三个参数需要修改对比,分别是:
c1、c2 %加速因子
w %惯性权重
同时,还有一个种群规模和待优化的函数,也需要在实验过程中进行修改。他们是:
sizepop %种群规模
dim %适应度函数维数
(其中func中:1为Rastrigin函数,2为Schaffer函数,3为Griewank函数)
下面就先演示一次随机数据迭代1000次的运行结果截图:
参数如下:
c1 = 1.21345;%加速因子
c2 = 1.31345;
w = 0.9 %惯性权重
dim=9 %适应度函数维数
func=1; %选择待优化的函数,1为Rastrigin,2为Schaffer,3为Griewank
(本次实验默认func = 1)
运行结果如下:
迭代次数
从第654代开始最优适应度为0.000000
探究c1、c2 、w、sizepop、dim各参数对算法的影响(默认func = 1 (Rastrigin))
一、dim=9、sizepop=400时,变化c1、c2、w参数,查看结果(取五次最佳适应度作平均值)
1、c1 = 1.21345/ c2 = 1.31345/ w = 0.9
最优适应度 0.000000
2、c1 = 1.71345/ c2 = 1.11345/ w = 0.6
最优适应度:0.000000
3、c1 = 1.91345/ c2 = 1.18845/ w = 0.9
最优适应度:4.045842
4、c1 = 1.31345/ c2 = 1.19945/ w = 0.7
最优适应度:1.989919
5、c1 = 1.11345/ c2 = 1.51945/ w = 0.9
最优适应度:0.000000
平均最佳适应度:
(0.000000+0.000000+0.000000+1.989919+4.045842)/5 = 1.2071522
二、 c1 = 1.19945/ c2 = 1.19945、w=0.9时,变化dim、sizepop参数,查看结果(取五次最佳适应度作平均值)
1、dim = 7/ sizepop = 300
最优适应度:0.000000
2、dim = 8/ sizepop =200
最优适应度:2.044594
3、dim = 8/ sizepop = 250
最优适应度:2.985490
4、dim = 8/ sizepop = 300
最优适应度:1.451769
5、dim = 8/ sizepop = 150
最优适应度:0.006576
平均最佳适应度:
(2.044594+0.000000+2.985490+1.451769+0.006576)/5 = 1.2976856
PSO代码块展示
1、PSO.m函数
%% 清空环境
clc
clear
%% 参数初始化
%粒子群算法中的三个参数
c1 = 1.49345;%加速因子
c2 = 1.44345;
w = 0.9 %惯性权重
ws = 0.9
we = 0.4
maxgen=1000; % 进化次s数
sizepop=400; %种群规模
Vmax=1; %限制速度围
Vmin=-1;
popmax=5; %变量取值范围
popmin=-5;
dim=9; %适应度函数维数
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,:),func); %粒子的适应度
end
%% 个体极值和群体极值
[bestfitness bestindex]=min(fitness);
gbest=pop(bestindex,:); %全局最佳
pbest=pop