粒子群算法PSO求解连续函数问题

目录

一、粒子群算法的概念

二、粒子群算法分析

三、粒子群算法种类

1.基本粒子群算法

2.标准粒子群算法

3.压缩粒子群算法

4.离散粒子群算法

四、粒子群算法流程

五、例题


一、粒子群算法的概念

  粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
  PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。

二、粒子群算法分析

  粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。下面的动图很形象地展示了PSO算法的过程:

三、粒子群算法种类

1.基本粒子群算法

假设在一个D维的目标搜索空间中,有N个粒子组成一个群体,其中第i个粒子表示为一个D维的向量:

第i个粒子的飞行速度也是一个D维的向量,记为

第i个粒子迄今为止搜索到最优位置称为个体极值,记为

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

在找到这两个最优值是,粒子根据如下公式来更新自己的速度和位置

2.标准粒子群算法

带有惯性权重的改进粒子群算法,该算法能够保证较好 的收敛效果。 

惯性权重表示在多大程度上保留原来的速度:w越大,则全局收敛能力较强,局部收敛能力较弱;w在0.8~1.2之间时,粒子群算法有更快收敛速度,当w>1.2,算法容易陷入局部极值

在算法开始时可给w赋予较大正值,随着搜索进行,可以线性地使w主键减小。目前,采用较多的动态惯性权重值时Shi提出的线性递减权值策略,其表达式如下 

粒子群算法PSO求解连续函数问题_第1张图片

3.压缩粒子群算法

利用约束因子控制系统行为的最终收敛。压缩因子更新公式。

式中\lambda为压缩因子

粒子群算法PSO求解连续函数问题_第2张图片

4.离散粒子群算法

基本粒子群算法时在连续域中搜索函数极值,下面是一种离散二进制版的粒子群算法。在此离散粒子群方法中,将离散问题空间映射到连续粒子运动空间,并适当求改粒子群算法来求解,在计算上仍保留经典粒子群算法速度-位置更新运算规则。

粒子群算法PSO求解连续函数问题_第3张图片

r是从(0,1)产生的随机数。  

四、粒子群算法流程

粒子群算法基于“种群”和“进化”的概念,通过个体间的协作与竞争,实现复杂空间最优解的搜索,其流程如下:

1)初始化粒子群,包括群体规模N,每个粒子的位置x和速度v

2)计算每个粒子的适应度值fit[i]

3)对每个粒子,用它的适应度值fit[i]和个体极值P_{best}(i)比较。如果fit[i]<P_{best}(i),则用fit[i]替换掉P_{best}(i)

4)对每个粒子,用它的适应度值fit[i]和全局极值g_{best}t比较。如果fit[i]<g_{best},则用fit[i]替换g_{best}

5)迭代更新粒子的速度v_{i}和位置x_{i}

6)进行边界条件处理

7)判断算法终止条件是否满足:若是,则结束算法并输出优化结果:否则返回步骤2)

粒子群算法PSO求解连续函数问题_第4张图片

五、例题

求函数f(x,y)=3cos(xy)+x+y^{2}的最小值,x的取值范围为[-4,4],y的取值范围[-4,4]。其函数图像如下。

粒子群算法PSO求解连续函数问题_第5张图片

仿真过程如下

1)初始化种群粒子个数N=100,粒子维数D=2,最大迭代次数为T=200,学习因子c_{1}=c_{2}=1.5,惯性权重最大值W_{max}=0.8,惯性权重最小值为W_{min}=0.4,位置最大值为X_{max}=4,位置最小值X_{min}=-4,速度最大值V_{max}=1,速度最小值V_{min}=-1

2) 初始化种群粒子位置x和速度v,粒子个体最优位置P和最优值P_{best},粒子群全局最优位置g和最优值g_{best}

3)计算动态惯性权重值w,更新位置x和速度值v,并进行边界条件处理,判断是否替换粒子个体最优位置P和最优值P_{best},以及粒子群全局最优位置g和最优值g_{best}

4)判断是否满足终止条件:若满足,则结束搜索过程,输出最优值;若不满足,则继续进行迭代优化

粒子群算法PSO求解连续函数问题_第6张图片

%%%%%%%%%%%%%%%%%粒子群算法求函数极值%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;              %清除所有变量
close all;              %清图
clc;                    %清屏
N=100;                  %群体粒子个数
D=2;                    %粒子维数
T=200;                  %最大迭代次数
c1=1.5;                 %学习因子1
c2=1.5;                 %学习因子2
Wmax=0.8;               %惯性权重最大值
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)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
g;                         %最优个体         
gb(end);                   %最优值
figure
plot(gb)
xlabel('迭代次数');
ylabel('适应度值');
title('适应度进化曲线')
%%%%%%%%%%%%%%%%%%%%%适应度函数%%%%%%%%%%%%%%%%%%%%%%%
function value=func2(x)
value=3*cos(x(1)*x(2))+x(1)+x(2)^2;
end

你可能感兴趣的:(优化算法,算法,matlab,机器学习)