本文章以 《Parameter optimization of multi-pass turning using chaotic PSO》为基准,描述该文章中描述的完全受扰的混沌粒子群算法。
本文的作者为何会提出该算法,又是如何对粒子群进行改进的,现在就让我们来了解该改进算法的来由。 该算法提出的目的是为了确定一组最佳加工参数,以生产具有可观质量和最低制造成本的订购产品。 加工模型的非线性和高度约束的性质限制了基于经典梯度的技术处理此类问题的应用。 所以在该文章中的重点是在多道次车削操作中获得最佳加工条件。
上面描述了提出该改进算法需要解决的问题,倘若你不是机械专业的,或者对多道次车削操作不了解的话,对上面的描述基本是一头雾水。
但是无妨,本文主要是为了介绍算法,不需要对它的当前应用场景太过于熟知。下面才是重点!!
为了解决上面的问题,该文章提出了一种混沌 PSO,即完全受扰粒子群优化 (TDPSO),PSO 的增强变体用于在受到各种约束的多道次车削操作期间获得最佳加工条件。 在 TDPSO 中,混沌现象嵌入在 PSO 的不同阶段,以提高搜索过程的效率。 将 TDPSO 获得的结果与文献中可用的结果进行比较,可以看出 TDPSO 对处理此类问题非常有效。
混沌 PSO 的随机性是由选择各种 PSO 参数所需的随机序列引起的。 在这里,采用混沌系统而不是均匀分布来在搜索过程的不同阶段生成随机序列。
在开始时引入混沌以生成初始种群。 这与基本 PSO 形成对比,其中初始种群是使用均匀分布的随机数生成的。 其次,为了防止局部优化器上的“粒子停滞”,当算法接近平衡状态时,在以后的迭代中嵌入混沌。 为此,根据“速度指数标准”从群中选择一些粒子进行扰动。 通过这种方式,将混沌嵌入 PSO 以增强全局搜索能力并避免停滞现象。 混沌是使用 Henon 混沌系统产生的,以扰乱搜索过程。
混沌一词原指宇宙未形成之前的混乱状态,中国及古希腊哲学家对于宇宙之源起即持混沌论,主张宇宙是由混沌之初逐渐形成现今有条不紊的世界。在井然有序的宇宙中,西方自然科学家经过长期的探讨,逐一发现众多自然界中的规律,如大家耳熟能详的地心引力、杠杆原理、相对论等。这些自然规律都能用单一的数学公式加以描述,并可以依据此公式准确预测物体的行径。 混沌现象起因于物体不断以某种规则复制前一阶段的运动状态,而产生无法预测的随机效果。所谓“差之毫厘,失之千里”正是此一现象的最佳批注。具体而言,混沌现象发生于易变动的物体或系统,该物体在行动之初极为单纯,但经过一定规则的连续变动之后,却产生始料所未及的后果,也就是混沌状态。但是此种混沌状态不同于一般杂乱无章的的混乱状况,此一混沌现象经过长期及完整分析之后,可以从中理出某种规则出来。混沌现象虽然最先用于解释自然界,但是在人文及社会领域中因为事物之间相互牵引,混沌现象尤为多见。如股票市场的起伏、人生的平坦曲折、教育的复杂过程。
- 混沌系统:简单来讲就是指一种系统呈现出一种杂乱无章且无法预测结果的系统。
Henon Map(也称 Henon 映射)是一个二维离散时间动力系统,表现出混沌行为。 1976年由法国天文学家米歇尔·海农提出,作为洛伦兹模型的庞加莱图的简化模型。 它是一个耗散二次映射,它将平面中的点 $(x_n, y_n)$ 映射到一个新点,映射规则如下所示: \(\begin{align} x_{n+1} = y_n+1-ax_n^2\\ y_{n+1} = bx_n \end{align}\) 这里以$x_0=0,y_0=0$为起始值,迭代一百次,其对应的y和x值的分布如下所示:
从上图中可以看出x和y都是呈现一种无序的状态,现在关键是用混沌时间序列取代伪随机序列值,所以需要将x或者y值映射到[0,1]范围内。这里使用如下公式进行映射: \(\begin{align} z=z-min(z)\\ z=\frac{z}{max(z)} \end{align}\)
z的取值范围为数组x,y
这样就将$z$约束在[0,1]范围内,这里以约束y为例,可得下图的时间序列:
如此就将 Henon Map 映射值约束在[0,1]之间,完成了归一化的操作。这就完成了在算法中使用混沌随机数取代 rand 函数产生的伪随机数的第一步。
在2.1.2节我们已经拿到了归一化的基于 Henon Map 映射的混沌时间序列,现在就是分析如何编写chaos函数,函数是如何运行的。在原期刊中并未有详细的介绍,以下是基于个人推测:
完成以上操作,其实质和所用的rand函数基本一致。在接下来的操作中,就可以直接调用 chaos 函数。
在本小节,只会描述与标准粒子群优化算法所不一样的算法公式,所以没有提及的,则说明和标准粒子群优化算法是一样的。
混沌粒子群优化算法的位置初始化和原始的标准粒子群优化算法一样,虽然表达公式不一样,但其核心是一样的,只不过该文中使用的是混沌随机数,标准粒子群优化中使用的是rand普通随机数。详见公式(5)。但是其速度更新公式却是有点不一样,不过根据公式来看的话,刚好是在-1和1的附近,详见公式(6)。 \(\begin{align} x_{i,d} = x_{i,min}+(x_{i,max}-x_{i,min})\times chaos()\\ v_{i,d} = \begin{cases} \frac{x_{i,min}-chaos()}{x_{i,max}-chaos()} &\text{if rand<0.5}\\ \vert\frac{x_{i,min}-chaos()}{x_{i,max}-chaos()}\vert &\text{if rand>= 0.5} \end{cases} \end{align}\)
扰动现象首先需要了解扰动指数,也称为每个粒子的“相对速度系数”。
在该文中,使用 Henon 映射生成初始种群后,评估和更新粒子的过程与标准 PSO 中的过程保持一致。 但是,经过指定次数的迭代后,会为每个维度中的每个粒子计算一个相对速度指数。相对速度指数计算方法如下:
粒子扰动是根据最大相对速度系数,选择粒子通过混沌时间序列扰乱其当前状态。
在该文中,通过一系列实验表明,并不需要对最大相对粒子速度在[0,0.5]之间的粒子的所有维度都进行扰动,当问题解的维度大于等于10的时候,只需要对其维度空间的一般进行扰动,当问题解的维度小于10的时候,可以对其所有的维度进行扰动。(当然,这只是在该文中的建议,比较不一定刚好以10为界限,但是可能在作者的实验中,当大于10时候进行全维度扰动效果会比较不理想。)
对粒子的扰动并不是一开始就进行的,首先要了解目的。扰动的目的是为了使粒子跳出局部最优,所以一般是在粒子陷入局部最优,一直在某个范围内跳动无法进一步搜索的时候进行扰动的。
在该文中,作者提出,当迭代进行到70%之后,开始对粒子进行扰动。扰动方法如下:
其中t为迭代次数,chaos() 是一个使用 Henon 映射产生混沌随机数的函数。
在该文中,对以下参数进行了设置:
代码在code文件中,命名为 TDPSO,请自行获取。
[1]Chauhan P, Pant M, Deep K. Parameter optimization of multi-pass turning using chaotic PSO[J]. International Journal of Machine Learning and Cybernetics, 2015, 6(2): 319-337.