2.1 粒子群算法思想的起源

      粒子群优化(Particle Swarm Optimization, PSO)算法是Kennedy和Eberhart受人工生命研究结果的启发、通过模拟鸟群觅食过程中的迁徙和群聚行为而提出的一种基于群体智能的全局随机搜索算法,自然界中各种生物体均具有一定的群体行为,而人工生命的主要研究领域之一是探索自然界生物的群体行为,从而在计算机上构建其群体模型。自然界中的鸟群和鱼群的群体行为一直是科学家的研究兴趣,生物学家Craig Reynolds在1987年提出了一个非常有影响的鸟群聚集模型,在他的仿真中,每一个个体遵循:

      (1) 避免与邻域个体相冲撞;

      (2) 匹配邻域个体的速度;

      (3) 飞向鸟群中心,且整个群体飞向目标。

      仿真中仅利用上面三条简单的规则,就可以非常接近的模拟出鸟群飞行的现象。1995年,美国社会心理学家James Kennedy和电气工程师Russell Eberhart共同提出了粒子群算法,其基本思想是受对鸟类群体行为进行建模与仿真的研究结果的启发。他们的模型和仿真算法主要对Frank Heppner的模型进行了修正,以使粒子飞向解空间并在最好解处降落。Kennedy在他的书中描述了粒子群算法思想的起源。

2.2 算法原理

     PSO从这种模型中得到启示并用于解决优化问题。PSO 中,每个优化问题的潜在解都是搜索空间中的一只鸟,称之为粒子。所有的粒子都有一个由被优化的函数决定的适值( fitness value) ,每个粒子还有一个速度决定它们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。

PSO初始化为一群随机粒子(随机解),然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个极值来更新自己;第一个就是粒子本身所找到的最优解,这个解称为个体极值;另一个极值是整个种群目前找到的最优解,这个极值是全局极值。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。

    假设在一个

【优化求解】基于tent混沌改进粒子群优化算法_优化求解
维的目标搜索空间中,有
【优化求解】基于tent混沌改进粒子群优化算法_优化求解_02
个粒子组成一个群落,其中第
【优化求解】基于tent混沌改进粒子群优化算法_matlab_03
个粒子表示为一个
【优化求解】基于tent混沌改进粒子群优化算法_matlab_04
维的向量

【优化求解】基于tent混沌改进粒子群优化算法_matlab_05
【优化求解】基于tent混沌改进粒子群优化算法_matlab_06

     第

【优化求解】基于tent混沌改进粒子群优化算法_matlab_07
个粒子的“飞行 ”速度也是一个
【优化求解】基于tent混沌改进粒子群优化算法_优化求解_08
维的向量,记为

【优化求解】基于tent混沌改进粒子群优化算法_优化求解_09
【优化求解】基于tent混沌改进粒子群优化算法_优化求解_10

     第

【优化求解】基于tent混沌改进粒子群优化算法_优化求解_11
个粒子迄今为止搜索到的最优位置称为个体极值,记为

【优化求解】基于tent混沌改进粒子群优化算法_优化求解_12
【优化求解】基于tent混沌改进粒子群优化算法_matlab_13

     整个粒子群迄今为止搜索到的最优位置为全局极值,记为

【优化求解】基于tent混沌改进粒子群优化算法_matlab_14

      在找到这两个最优值时,粒子根据如下的公式(2-1)和( 2-2)来更新自己的速度和位置:

【优化求解】基于tent混沌改进粒子群优化算法_matlab_15
 (2-1)

【优化求解】基于tent混沌改进粒子群优化算法_优化求解_16
 (2-2)

     其中:

【优化求解】基于tent混沌改进粒子群优化算法_matlab_17
【优化求解】基于tent混沌改进粒子群优化算法_优化求解_18
为学习因子,也称加速常数(acceleration constant),w为惯性因子,
【优化求解】基于tent混沌改进粒子群优化算法_优化求解_19
【优化求解】基于tent混沌改进粒子群优化算法_matlab_20
为[0,1]范围内的均匀随机数。式(2-1)右边由三部分组成,第一部分为“惯性(inertia)”或“动量(momentum)”部分,反映了粒子的运动“习惯(habit)”,代表粒子有维持自己先前速度的趋势;第二部分为“认知(cognition)”部分,反映了粒子对自身历史经验的记忆(memory)或回忆(remembrance),代表粒子有向自身历史最佳位置逼近的趋势;第三部分为“社会(social)”部分,反映了粒子间协同合作与知识共享的群体历史经验,代表粒子有向群体或邻域历史最佳位置逼近的趋势, 
【优化求解】基于tent混沌改进粒子群优化算法_matlab_21
,
【优化求解】基于tent混沌改进粒子群优化算法_优化求解_22
是粒子的速度,
【优化求解】基于tent混沌改进粒子群优化算法_matlab_23
【优化求解】基于tent混沌改进粒子群优化算法_matlab_24
是常数,由用户设定用来限制粒子的速度。
【优化求解】基于tent混沌改进粒子群优化算法_优化求解_25
【优化求解】基于tent混沌改进粒子群优化算法_优化求解_26
是介于
【优化求解】基于tent混沌改进粒子群优化算法_优化求解_27
之间的随机数。

2.3 标准粒子群算法流程

    算法的流程如下:

     Step1:初始化粒子群,包括群体规模

【优化求解】基于tent混沌改进粒子群优化算法_优化求解_28
,每个粒子的位置
【优化求解】基于tent混沌改进粒子群优化算法_matlab_29
和速度
【优化求解】基于tent混沌改进粒子群优化算法_matlab_30

     Step2:计算每个粒子的适应度值

【优化求解】基于tent混沌改进粒子群优化算法_优化求解_31

    Step3: 对每个粒子,用它的适应度值

【优化求解】基于tent混沌改进粒子群优化算法_matlab_32
和个体极值
【优化求解】基于tent混沌改进粒子群优化算法_优化求解_33
比较,如果
【优化求解】基于tent混沌改进粒子群优化算法_优化求解_34
 ,则用
【优化求解】基于tent混沌改进粒子群优化算法_优化求解_35
替换掉
【优化求解】基于tent混沌改进粒子群优化算法_matlab_36

    Step4: 对每个粒子,用它的适应度值

【优化求解】基于tent混沌改进粒子群优化算法_优化求解_37
和全局极值
【优化求解】基于tent混沌改进粒子群优化算法_matlab_38
比较,如果
【优化求解】基于tent混沌改进粒子群优化算法_优化求解_39
则用
【优化求解】基于tent混沌改进粒子群优化算法_matlab_40
【优化求解】基于tent混沌改进粒子群优化算法_matlab_41

    Step5: 根据公式(2-1),(2-2)更新粒子的速度

【优化求解】基于tent混沌改进粒子群优化算法_matlab_42
和位置
【优化求解】基于tent混沌改进粒子群优化算法_matlab_43
 ;

    Step6: 如果满足结束条件(误差足够好或到达最大循环次数)退出,否则返回Step2。

【优化求解】基于tent混沌改进粒子群优化算法_优化求解_44

图2-1. PSO算法流程图

%_________________________________________________________________________%
% 基于Tent混沌映射改进的粒子群优化算法             %
%_________________________________________________________________________%

% 使用方法
%__________________________________________
% fobj = @YourCostFunction        设定适应度函数
% dim = number of your variables   设定维度
% Max_iteration = maximum number of generations 设定最大迭代次数
% SearchAgents_no = number of search agents   种群数量
% lb=[lb1,lb2,...,lbn] where lbn is the lower bound of variable n  变量下边界
% ub=[ub1,ub2,...,ubn] where ubn is the upper bound of variable n   变量上边界
clear all
clc
close all
SearchAgents_no=10; % 种群数量
Function_name='F4'; % Name of the test function that can be from F1 to F23 (Table 1,2,3 in the paper) 设定适应度函数
Vmax=5;%速度上限
Vmin=-5;%速度下限
Max_iteration=50;% 进化次数
a=0.5;%混沌系数
c1 = 1.49445;%个体学习率
c2 = 1.49445;%群体学习率
% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_Functions_details(Function_name);  %设定边界以及优化函数
%lb%粒子最小值
%ub%粒子最大值
%dim%粒子维数
[Best_pos_tent,pso_curve_tent,Best_score_tent]=psoNew(SearchAgents_no,Max_iteration,lb,ub,dim,fobj,Vmax,Vmin,a,c1,c2); %tent混沌粒子群
[Best_pos,pso_curve,Best_score]=pso(SearchAgents_no,Max_iteration,lb,ub,dim,fobj,Vmax,Vmin,c1,c2); %基本粒子群

figure('Position',[269   240   660   290])
%Draw search space
subplot(1,2,1);
func_plot(Function_name);
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel([Function_name,'( x_1 , x_2 )'])

%Draw objective space
subplot(1,2,2);
plot(pso_curve_tent,'Color','r')
hold on;
plot(pso_curve,'Color','b')
title('Objective space')
xlabel('Iteration');
ylabel('Best score obtained so far');

axis tight
grid on
box on
legend('Tent混沌策略pso','基本粒子群')
%
display(['The best solution obtained by Tent混沌策略PSO is : ', num2str(Best_pos_tent)]);
display(['The best optimal value of the objective funciton found by Tent混沌策略PSO is : ', num2str(Best_score_tent)]);
display(['The best solution obtained by PSO is : ', num2str(Best_pos)]);
display(['The best optimal value of the objective funciton found by Tent混沌策略PSO is : ', num2str(Best_score)]);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.

【优化求解】基于tent混沌改进粒子群优化算法_优化求解_45

【优化求解】基于tent混沌改进粒子群优化算法_matlab_46