这一专栏将介绍电机控制算法,为接下来的课题研究提供参考。
本文首先介绍粒子群算法原理及其改进算法,后续文章将介绍其他群智能算法。
绪论
智能优化算法
智能优化算法是为解决信号解析、图像辨析、模式识别、任务调度、生产规划分配、控制系统设计等各行各业的复杂优化类问题,受到人类智能、生物种群的社会行为或者是自然界的固有现象而启发,通过现代化的计算机技术手段所设计出的算法。
广义上的智能优化算法包括群体智能类算法、进化类算法、神经网络算法、模拟退火算法、禁忌搜索算法等各类新型算法。
群体智能类算法
群体智能类算法是一种新兴的智能优化算法,其思想来源于对鸟群、鱼群等生物群体行为的研究。它是一种在自然界生物群体所表现出来的智能现象启发下提出的智能方法,具有自组织、自学习、自适应和内在并行性等特征。和传统的纯数学方法相比,群智能算法通过达尔文的“适者生存、优胜劣汰”的自然法则来求解问题,对问题的连续性和可微性没有要求,通用性较好,更易于求解复杂的优化问题。
粒子群算法
粒子群优化算法(Particle Swarm Optimization,
PSO)是由肯尼迪和埃伯哈特提出的一种新型智能优化算法,属于演化类智能优化算法,其算法灵感来源于自然界中鸟群觅食时的群体行为特点。粒子群算法将鸟群中的一只只觅食的鸟抽象为一个个粒子,这些粒子只具备坐标与速率这两个属性,鸟群中的鸟不知道食物的具体位置,但是知道其余各个鸟的具体位置,以及它们各自离食物的距离。
可以将这里的食物想象成一种有味道但透明不可见的物质,这意味着距离越近,食物味道越浓。我们假设距离越近且食物味道越浓的情况下,鸟儿的“表情”越兴奋,并且鸟儿可以通过观察其他鸟的“表情”的方式来得知它们与食物的距离。
粒子群中各个粒子存在的信息共享机制,虽然单独的鸟未必每次运动都会离目标越近,但鸟群整体会越来越靠近目标食物位置。
粒子群算法易于理解,快速高效,在实时性强的复杂函数优化问题的最优化求解上效果显著,目前广泛应用于模式识别、神经网络、深度学习、控制系统参数整定、目标函数最优化等各个场景。其缺点是运算过程中容易陷入局部最优解,导致所求解的不全面,使问题处理效果不尽人意。
粒子群算法原理
内容参见基于粒子群算法的电机控制器参数整定研究。为确保文章的完整性,这里再次复述一遍。
假设粒子群参数维度为\(N\),粒子群中粒子总数\(m\),迭代次数为\(n\),设定迭代速度系数为\(c_1\)、\(c_2\)、\(\omega\)。
注:\(N\)体现的是优化目标的变量个数,比如说鸟群所寻找的食物,这个食物的在三维空间中的坐标\((x,y,z)\)就是优化目标,即\(N=3\)。\(m\)是鸟的数量,\(n\)是鸟移动的次数。
为确保每个粒子在限定范围内呈随机分散分布,输入向量\(x=(x_1,x_2,\cdots,x_N )^T\)的限制范围为:
\[\left\{ \begin{gathered} x_{\min }^{(1)}
< {x_1} < x_{\max }^{(1)} \hfill \\ x_{\min }^{(2)} < {x_2}
< x_{\max }^{(2)} \hfill \\ ... \hfill \\ x_{\min }^{(N)} <
{x_N} < x_{\max }^{(N)} \hfill \\ \end{gathered} \right.\]
记\(X_{min}=(x_{min}^{(1)},x_{min}^{(2)},\cdots,x_{min}^{(N)}
)\),\(X_{max}=(x_{max}^{(1)},x_{max}^{(2)},\cdots,x_{max}^{(N)})\)
输入向量应满足\(X_{min}<x<X_{max}\)
这里设定每个粒子的初始速度\(v_0 =
0\),则第\(j\)个粒子\((1 \leqslant j \leqslant
m)\)下一步的迭代速度可以用公式表示成:
\[{v^{(j)}} = \omega \cdot {v_0} + {c_1}
\cdot rand \cdot ({P^{(j)}} - {X^{(j)}}) + {c_2} \cdot rand \cdot ({P_G}
- {X^{(j)}})\]
迭代速度公式由三个部分相加而得,其中\(rand\)表示调用函数生成的0到1之间的随机数。
公式第一部分体现了粒子的自身因素,其包含粒子上一次迭代时的速度信息,\(v_0\)是上一次迭代时的粒子速度;
第二部分体现了粒子的学习因素,\(P^{(j)}\)为第\(j\)个粒子在历次迭代运动过程中最接近于待优化问题结果的那一次迭代时的位置(鸟离食物最近时的位置);
第三部分体现粒子的交流因素,\(P_G\)表示当前的最接近于待优化问题结果的粒子的所在位置(鸟群离食物最近时的位置)。
粒子迭代速度系数可以根据仿真实际需要加以修改,结合实际情况与工程实践经验,可以取\(\omega=1,c_1=c_2=2\),对于粒子群中粒子数量较多的情况,为确保运算结果能得到较快收敛,可以适当减小\(\omega\)的值。
首先鸟可以获取自身在空间中的速度与位置。第一部分体现鸟移动时的惯性,下一次移动的速度会受到上一次速度的影响;对于第二部分与第三部分,鸟可以记住自身闻到食物味道最大(离食物最近)时的位置,还知道整个鸟群离食物最近的位置,这两个位置也会影响到下一次移动的速度。
根据迭代速度公式计算下一时刻的速度及其粒子位置,其公式可表达为:
\[X_{k + 1}^{(j)} = X_k^{(j)} + v_{k +
1}^{(j)} \cdot dt\] 式中\(X_{k+1}^{(j)}\)表示第\((k+1)\)步迭代的位置,\(X_k^{(j)}\)表示第\(k\)步迭代的位置,\(v_{k+1}^{(j)}\)表示第\((k+1)\)步迭代的速度,\(dt\)是仿真间隔,默认值为1,适当减小该值可以使仿真更慢更平滑。
计算\(P_G\)与\(P^{(j)}\)的公式如下所示,用于迭代过程中的最优粒子与粒子群的更新: \[{P_G} = \left\{ \begin{gathered} P_G^{(k)},F(P_G^{(k)}) > F(P_G^{(k + 1)}) \hfill \\ P_G^{(k + 1)},F(P_G^{(k)}) < F(P_G^{(k + 1)}) \hfill \\ \end{gathered} \right.\] \[P_G^{(j)} = \left\{ \begin{gathered} P_k^{(j)},F(P_k^{(j)}) > F(P_{k + 1}^{(j)}) \hfill \\ P_{k + 1}^{(j)},F(P_k^{(j)}) < F(P_{k + 1}^{(j)}) \hfill \\ \end{gathered} \right.\]

改进粒子群算法
在粒子群算法的参数调整中,惯性因子\(\omega\)以及学习因子\(c_1,c_2\)是关键。
学习因子主要影响粒子的目标方向感,即目标识别能力。
在进化上,\(c_1\)相对越大,粒子行为越独立,“分散”现象越明显,即学习因素比重较大,全局最优解颇具盲目性,算法收敛速度慢;
\(c_2\)相对越大,粒子群体意识越强,“群聚”现象越明显,交流因素比重大,但容易陷入局部最优解。
为解决传统的粒子群算法存在的收敛速度慢、容易陷入局部最优解等问题。需要对算法的惯性权重与学习因子在迭代过程中动态调整。
对于学习因子,在前期应当有较大的搜索空间,随着粒子的进化逐渐缩小搜索区域,向全局最优解加速进化,这就要求\(c_1\)应当先大后小,\(c_2\)先小后大。
学习因子在迭代过程中的公式如下所示,这里引入了反正切函数进行优化。设定\(c_1\)与\(c_2\)的值域为\([0.1,2]\)。\(n\)为迭代总次数,\(k\)为当前迭代次数。
\(c_1=-\frac{4.265}{2\pi}arctan[\frac{8}{n}(k-\frac{n}{2})]+1\)
\(c_2=\frac{4.265}{2\pi}arctan[\frac{8}{n}(k-\frac{n}{2})]+1\)
注:arctan的结果单位是角度,式中\(2\pi\)为360°
对于惯性因子,应当先大后小,使算法在迭代初期增强全局搜索能力,更大范围遍历整体空间,避免陷入局部最优解;而在后期增强局部搜索能力,在更小范围内搜索到精确解。
惯性因子\(\omega\)在迭代过程中的公式如下所示,其在迭代过程中由权重最大值\(\omega_{max}\)线性衰减至权重最小值\(\omega_{min}\)。\(n\)为迭代总次数,\(k\)为当前迭代次数。
\(\omega=\omega_{max}-\frac{k}{n}(\omega_{max}-\omega_{min})\)
这里取\(\omega_{max}=0.9\)、\(\omega_{min}=0.4\)
选取评价函数
评价函数通过一定的公式将各个评价指标与目标优化效果联系起来,体现的是当前结果与期望中的优化结果的差距,评价函数值越小意味着与控制目标越接近,越符合理想控制要求。在鸟群觅食的过程中,评价函数是鸟到食物的空间距离,距离值越小意味着鸟越接近食物。
评价函数有多种选取方式,对于电机控制系统,可以将与系统动态、稳态性能相关的指标代入公式。
在文章基于粒子群算法的电机控制器参数整定研究中,根据实际控制需求,选取了五个性能参数,它们分别是电机转速环调节时间\(T_{sn}\)、转速环超调量\(\omega_{sn}\)、突加负载最大转速降落\(n_d\)、突加负载转速环恢复时间\(T_{sd}\)与系统稳定后的转速波动\(n_{err}\)。
最后将上述参数带入如下式所示的评价函数,其中\(T_{sn0},\omega_{sn0},n_{d0},T_{sd0}\)为常数。
\[f=3*\log(\frac{T_{sn}}{T_{sn0}}+1)+3*\log(\frac{\omega_{sn}}{\omega_{sn0}}+1)+\log(\frac{n_d}{n_{d0}}+1)+\log(\frac{T_{sd}}{T_{sd0}}+1)+10*n_{err}\]
显然上述五个性能参数值都是越小越好,所以要确保构造的评价函数值与五个性能参数值呈正相关。
随后对评价函数各项前乘以一定的系数,以体现不同参数对控制效果好坏的影响程度,或者说评价时更侧重于考虑其中的哪些性能参数。
在一些文献中,常常仅考虑误差一项,使用对误差积分的方式来体现电机的控制性能,这一类函数被称作适应度函数。
常见的适应度函数有:
平方误差积分(ISE)——\(f=\int_0^{\infty}e(t)^2dt\)
绝对误差积分(IAE)——\(f=\int_0^{\infty}|e(t)|dt\)
时间乘以误差平方积分(ITSE)——\(f=\int_0^{\infty}te(t)^2dt\)
时间乘以绝对误差积分(ITAE)——\(f=\int_0^{\infty}t|e(t)|dt\)
其中ITAE、ITSE考虑到了电机起动时的误差较大,但起动阶段控制器对电机速度的影响较小,因此将时间乘到积分项中,使得稳态运行阶段的误差对于适应度函数值的影响更大。目前ITAE在这几种适应度函数中最为常用。