购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.1 理论基础

采用传统优化算法进行一般情况下神经网络优化问题的研究通常能够取得较好的效果。然而,随着人们的认识和研究日益深化,人类应用日益广泛,生活和学习中出现越来越多的大规模的、复杂的神经网络优化问题,这些问题维数高、有约束项,存在多个局部极值点或难以建立数学模型的缺陷。以往的经典优化方法在解决这些优化问题时会出现运行效率低、计算复杂度高、收敛性慢等缺点,无法满足实际问题的要求。因而,寻找一种高效的,具有智能特征的优化方法尤为重要。

随着人们对自然界的逐渐认识和生物学的飞速发展,许多学者和专家观察研究生物群体并利用它们之间的行为产生的群体智能设计仿生算法来解决复杂系统的优化问题。智能优化算法是借鉴和利用自然界中的自然现象或人体的各种原理和机理而开发的具有自适应环境能力的计算方法。

粒子群算法具有很强的通用性,优化目标函数时,不需要计算函数的梯度信息,不要求目标函数和约束的连续性、凸性、可导、可行域连通,甚至有无解析表达式,只需要依据适应度函数,通过粒子的速度和位置更新公式进行更新来优化函数。粒子群算法本身策略简单,需要调整的参数少,没有遗传算法中的编码、交叉和变异等操作,因而操作简便、易于实现,对于计算复杂的神经网络学习优化问题表现出很大的优势。这些优点使粒子群算法有别于经典的优化算法,使粒子群算法受到广大学者的关注而飞速发展,在许多科学和工程领域得到了广泛应用。

4.1.1 粒子群算法的原理

粒子群算法是近些年发展起来的一种新的进化算法(Evolutionary Algorithm,EA)。粒子群算法起源于对简单社会系统的模拟,是目前计算机领域中一种基于群智能的算法,由Ebethart博士和Kennedy博士发明。他们最初设想用来模拟鸟群觅食的过程,不过后来逐步用于优化方面。它和遗传算法的基本原理很相似,也是以随机解为初始条件的,经过多次迭代寻找最优解,它也是通过适应度函数来评价解的品质的。但是,粒子群算法比遗传算法的计算规则更为简单,它不需要像遗传算法那样烦琐的交叉(Crossover)和变异(Mutation)操作,而是通过跟踪当前搜索到的最优值来寻找全局最优。因此,这种算法具有实现容易、精度高和收敛快等优点。

基本粒子群优化算法的数学描述如下。

在D维搜索空间内,一个群体包含N个粒子,记作 、粒子i的位置变化率(速度)记作 ,其位置记作 ,其中i=1,2,…,N;粒子i到当前迭代为止自身发现的最优位置记作 ,到当前迭代为止全部粒子发现的最优位置记作 在找到这两个值之后,粒子通过下列公式进行更新:

式中,i=1,2,…,N,d=1,…,D; 2; [0,1]内的随机数;v id (t),x id (t)分别是粒子i当前的速度与位置; 是粒子i发现的个体最优位置; 是粒子i发现的全局最优位置。

基本粒子群优化算法需要调整的参数较少,是其中一个最大的优点,然而如下参数却对算法的收敛性影响很大。

1)粒子的规模

算法搜索的空间范围会随着粒子规模的增多而越来越大,这样有助于发现全局最优值,但是算法运行时间也会越长,故应该选择适合的粒子规模。

很多研究人员经过大量实验分析得出一般取20~40个粒子为宜。对大多数优化问题而言,取30个粒子的规模就能够得到很好的结果。然而,对一些较难的问题,可以取100或200个粒子。

2)粒子的范围

粒子的范围[-x max ,x max ]取决于具体的优化问题,一般设置为优化问题参数的取值范围。此外,粒子的每一维度也可设置不同的粒子范围。

3)粒子的最大速度

粒子群优化算法是在每一次迭代过程中通过调整每个粒子在每一维度上所移动的距离来进行的,而粒子的最大速度就是决定这个最大距离的,所以必须要对粒子的最大速度进行限制,不然粒子就有可能飞过最优解,甚至会飞出搜索空间。一般来说,粒子的最大速度可设置成粒子范围的宽度。

4)学习因子

学习因子c 1 ,c 2 起调节作用。若c 1 =0,粒子就没有自身经验;若c 2 =0,粒子就没有社会群体经验。一般c 1 ,c 2 取一样的值,即c 1 =c 2 =2,赋予两者同等的权重。

除了以上所述的主要参数外,还有对粒子群优化算法所用的适应度函数及其终止条件的设置也很重要。

5)适应度函数的选择

粒子群优化算法适应度函数的选择较为简单,一般可直接将目标优化函数当作适应度函数,也可以对目标优化函数进行变换作为适应度函数。

6)算法的终止条件

粒子群优化算法的终止条件通常可设置为满足一定的误差准则或达到最大迭代次数后终止。

由于基本粒子群算法难以同时兼具全局探索和局部开发的能力,为了更好地改善基本粒子群优化算法整体的收敛性能,平衡其全局探索能力与局部开发能力之间的关系,于1998年举行的IEEE国际进化计算会议中,Y.Shi 和 R.C.Eberhart 发表“A Modified Particle Swarm Optimizer”一文,提出一种修正算法,首次将惯性权重引入粒子群优化算法的速度更新方程式中,如下所示:

其中,

式中, ω (t)为惯性权重;t为迭代次数;T max 为最大迭代次数。

4.1.2 粒子群算法的矩阵形式

从粒子群算法的表达式中可以看出,该算法存在大量的循环运算,而且变量众多,造成了编程困难、程序过长、MATLAB运行效率低下等问题。本节根据MATLAB矩阵运行效率高的特点,对粒子群算法进行了矩阵化。算法的矩阵化不仅有利于提高MATLAB的运行效率,而且对于理解算法,进一步推导算法有极大的帮助,希望读者引起足够的重视。

根据4.1.1小节的算法,粒子群算法的矩阵形式表述如下。

Step 1: 将粒子的速度和各粒子的最优位置等变量与参数矩阵化和初始化(粒子的位置和全局最优位置的矩阵形式在上节中已有表述),令

Step 2: 按惯性权重法更新各粒子的速度。

Step 3: 根据粒子速度的限值更新速度。

Step 4: 更新各粒子的位置。

Step 5: 根据适应度函数为f(●)更新各粒子的最优位置及总的最优位置。

Step 6: 检查是否已经达到最大迭代步数。若达到最大迭代步数,则输出总的最优位置与最佳适应度,否则转至Step 2。

从以上算法可以看出,实现粒子群算法矩阵化后,算法简洁了许多,原来的循环求和已经没有了,变量的个数得到了有效减少,程序的执行效率得到了大幅提高。本章将在后面介绍该算法的MATLAB实现方法。

4.1.3 MATLAB粒子群算法工具箱

MATLAB粒子群工具箱还提供了非常先进的粒子群优化工具箱PSot,可指定惯性因子的起始值和中止值,可约定各维变量的取值范围,粒子在遇到边界时是否反弹等各种参数,除此以外,粒子群工具箱既可以在用户约定的范围内自动随机生成指定群体规模的初始粒子群,也可人工输入小于群体规模的任意数目的初始粒子,具备非常强的灵活性。

在实际使用粒子群工具箱时,用户只要根据需求编写好目标函数(求最大值或最小值),并设置好函数自变量的取值范围和每步迭代允许的最大变化量等,PSot即可自动进行优化计算。

该工具箱的使用方法主要分为以下几个步骤。

(1)编写待优化函数。

(2)调用粒子群算法的核心模块pso_Trelea_vectorized.m,其调用方法为:

[optOUT,tr,te]=pso_Trelea_vectorized(functname,D,mv,VarRange,minmax,PSOparams,plotfcn,PSOseedValue)

其中,

functname:目标函数名。

D:待优化问题的维数。

mv:表示各粒子飞行的最大速度,默认值为4,为D×1的向量。

VarRange:表示粒子位置的范围,为D×2的矩阵。第一列为各粒子的最小位置,默认值为-100,第二列为各粒子的最大位置,默认值为100。

minmax:寻优类型(取0代表求目标函数的最小值(默认值),取l代表求目标函数的最大值)。

PSOparams:参数矩阵。P(1)表示显示更新的频率,默认值为100次迭代更新显示一次;P(2)表示最大迭代次数,默认值为2000;P(3)表示种群规模,默认值为24;P(4)表示参数c1,默认值为2;P(5)表示参数c2,默认值为2;P(6)表示惯性权值 ω max ,默认值为0.9;P(7)表示惯性权值 ω min ,默认值为0.4;P(8)表示惯性权值达到最终值时需要的迭代次数,默认值为1500;P(9)表示最小全局误差梯度,默认值为1e-25;P(10)表示梯度误差停滞后的迭代次数,默认值为150;P(11)表示误差目标,如果是NaN,则无要求,默认值为NaN;P(12)表示PSO的类型,0为标准类(默认值)。1和2为Trelea1和Trelea类。3为Clerc约束类PSO;P(13)表示PSO初始化种群,0表示所有初始位置随机(默认值),1表示根据用户的输入初始化。

plotfcn:表示寻优过程中用于展示寻优过程的画图函数,默认值为goplotpso。

PSOseedValue:表示初始化的粒子位置,此时P(13)=1或者2。

optOUT:表示最优的输入与相应最优输出构成的列向量,列向量的上面为最优输入,下面为最优输出。

tr:表示训练的次数。为1,length(tr)。

te:表示每步迭代的最优个体。

该工具箱使用方法举例如下。

设求函数:

z=0.5(x-3) 2 +0.2(y-5) 2 -0.1

的最小值。

Step 1: 列子函数代码。

Step 2: 在主函数中设置PSO算法的参数,并利用工具箱搜索子函数的最优解。

最优解即为:

即[x,y,z]=[3,5,-0.1]为最优解。 1F24IdCGo67r3y3/oBCeEUZq7AJJW84bGXBgWwy3sjj4phI7UjfQ3n70Ltkma8/A

点击中间区域
呼出菜单
上一章
目录
下一章
×