群体智能与演化博弈
上QQ阅读APP看书,第一时间看更新

1.2.1 优化求解

优化求解涉及两个基本概念,即优化问题和优化方法。优化问题是指在满足一定的条件下,在众多方案或参数值中寻找最优方案或参数值,以使系统的某个或多个功能指标达到最优,或使系统的某些性能指标达到最大值或最小值。优化方法是一种以数学为基础,用于求解各类优化问题的技术。对于在电子、自动化、计算机等领域出现的众多组合优化问题,传统的优化方法(如牛顿法、单纯形法等)需要遍历整个搜索空间,无法在短时间内完成搜索,且容易产生搜索的“组合爆炸”。因此,鉴于实际工程优化问题的复杂性、非线性、约束性以及建模困难等诸多特点,基于生物群体行为规律的优化算法,如粒子群优化算法、蚁群优化算法、人工蜂群算法、狼群算法等,展现出了不错的求解性能。

1.粒子群优化算法

粒子群优化算法[3]是由社会心理学家Kennedy和Eberhart在1995年研究群鸟觅食行为时共同提出来的。鸟类捕食时,找到食物的最简单有效的策略就是搜寻当前距离食物最近的鸟的周围区域。

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

假设在一个N维搜索空间中,种群X=(X1,X2,…,Xm)由m个粒子组成。其中,粒子i(i=1,2,…,m)在N维搜索空间中的位置向量Xi=(xi1,xi2,…,xiN)T,速度向量Vi=(vi1,vi2,…,viN)T。根据目标函数 f(Xi)可计算出每个粒子Xi对应的适合度,并根据适合度的大小衡量其优劣。粒子在每次迭代中有两个关键变量是非常重要的,这两个关键变量也是粒子速度更新的决定因素:一是粒子i(i=1, 2,…,m)自身的历史最优位置 Pi=(Pi1,Pi2,…,PiN)T;二是粒子群的全局最优位置Pg=(Pg1,Pg2,…,PgN)T

在每一次迭代过程中,粒子i可通过自身的历史最优位置和粒子群的全局最优位置来更新自己的速度和位置,即

式中,d=1,2,…,N; j=1,2,"表示迭代次数;c1c2表示信息权重。为防止粒子的盲目搜索,一般建议将其位置和速度限制在一定的区间内。

粒子群优化算法的具体实现步骤如下。

步骤1:对相关参数进行初始化,包括粒子群速度和位置、信息权重、最大迭代次数、算法终止的最小允许误差等。

步骤2:计算每个粒子的初始适合度。

步骤3:将各初始适合度作为对应的每个粒子的当前局部最优值,并将各初始适合度对应的位置作为当前每个粒子的局部最优位置。

步骤4:将最佳初始适合度作为当前全局最优值,并将最佳初始适合度对应的位置作为当前粒子群的全局最优位置。

步骤5:依据式(1-1)更新每个粒子当前的速度。

步骤6:对每个粒子的速度进行限幅处理,使之不能超过设定的最大速度。

步骤7:依据式(1-2)更新每个粒子当前所在的位置。

步骤 8:比较当前每个粒子的适合度是否比历史局部最优值好,如果是,则将当前粒子的适合度作为粒子的局部最优值,其对应的位置作为每个粒子的局部最优位置。

步骤 9:在当前粒子群中找出全局最优值,并将当前全局最优值对应的位置作为粒子群的全局最优位置。

步骤10:重复步骤5~9,直到满足设定的最小允许误差或达到最大迭代次数。

步骤 11:输出粒子群的全局最优值和其对应的位置以及每个粒子的局部最优值和其对应的位置。

2.蚁群优化算法

蚁群优化算法由意大利学者 Dorigo 等于1991年提出。蚁群优化算法受启发于自然界中蚁群的觅食行为,整个蚁群通过觅食行为就可以寻找到一条获取食物的最优路径。图1-1所示为蚁群的觅食过程,其中黑色圆点代表蚂蚁。

当蚁巢和食物之间不存在障碍物时,蚂蚁将沿着蚁巢和食物之间的直线路径进行觅食和返巢,如图1-1(a)所示。当出现一个矩形障碍物挡在蚁巢和食物之间时,蚂蚁需要转向绕过障碍物,由于蚂蚁在觅食过程中会以一定的挥发速度留下信息素以便同其他蚂蚁进行信息交换,并且直线路径两侧会残留相同浓度的信息素,故蚂蚁会以相同的概率选择向左或向右转向,如图1-1(b)所示。随着后续蚂蚁觅食过程的进行,障碍物左侧较长路径上的信息素浓度会降低,而右侧较短路径上的信息素浓度会越来越高,从而吸引更多的蚂蚁沿着这条路径行进,如图1-1(c)所示。

图1-1 蚁群的觅食过程

蚁群优化算法具有分布式特性、鲁棒性强并且容易与其他算法结合等优点,但是同时也存在收敛速度慢、容易陷入局部最优(local optimal)等缺点。蚁群优化算法最早用来求解旅行商问题(traveling salesman problem,TSP),并且表现出了很大的优越性。TSP 假设有一个旅行商人要拜访 n个城市,他必须选择要走的路径,对路径的限制是每个城市都要经历且仅经历一次,而且最后要回到最初出发的城市。选择路径的目标是要求所选路径路程为所有可选路径路程之中的最小值。这是一种NP困难问题,此类问题采用一般的算法是很难得到最优解的,所以一般需要借助一些启发式算法来求解。TSP可以表达为:求解遍历图G=(V,E,C)的所有节点一次并且回到起始节点,使连接这些节点的路径成本最低。其中,V是所有节点的集合;E是所有节点连接的集合;C是所有节点之间连接路径的成本度量。

下面以TSP为例介绍蚁群优化算法的具体实现步骤。

步骤1:对相关参数进行初始化,包括蚁群规模、信息素因子、启发函数因子、信息素挥发因子、信息素常数、最大迭代次数等。

步骤2:随机将蚂蚁放于不同的出发点(城市),并计算每个蚂蚁下一个访问的城市,直到有蚂蚁访问完所有城市。

步骤3:计算各蚂蚁经过的路径长度,记录当前迭代次数的最优解,并对路径上的信息素浓度进行更新。

步骤4:判断是否达到最大迭代次数,若否,返回步骤2;若是,则结束程序。

步骤5:输出结果,并根据需要输出寻优过程中的相关指标,如运行时间、收敛迭代次数等。

3.人工蜂群算法

人工蜂群(artifical bee colony,ABC)算法由Karaboga于2005年提出,是一种新兴的优化算法。其受启发于蜜蜂群的采蜜行为——蜜蜂群体按照各自的分工通过一系列有序的行为动作进行信息交流,从而获得最优(即蜜量最大)蜜源。

人工蜂群算法通过模拟实际蜜蜂的采蜜机制将人工蜂群分为三类:(1)采蜜蜂——利用已知蜜源的信息寻找新的蜜源,与此同时,传递蜜源信息(包括离蜂巢远近、采集难度等)给观察蜂;(2)观察蜂——在蜂巢中待命,在获取到采蜜蜂发出的信息后进行新蜜源的寻找工作;(3)侦察蜂——在蜂巢附近随机搜寻新的蜜源。

算法原理:假设问题的解空间是D维的,采蜜蜂与观察蜂的个数都是SN,采蜜蜂的数量或观察蜂的数量与蜜源的数量相等。则人工蜂群算法将优化问题的求解过程看成是在D维搜索空间中进行搜索。每个蜜源的位置代表问题的一个可能解,蜜源的蜜量对应于相应解的适合度。一个采蜜蜂与一个蜜源是相对应的。与第i个蜜源相对应的采蜜蜂依据式(1-3)寻找新的蜜源。

式中,i=1,2,…,SN;d=1,2,…,D;ϕid是区间[−1,1]上的随机数;k=1,2,…,SN,但ki。在人工蜂群算法中需要将新的可能解的适合度和原来的解Xi=(xi1, xi2,…,xiD) T的适合度进行比较,并采用贪心策略(若新的可能解的适合度优于原来的解,则采蜜蜂记住新的可能解而忘记原来的解。反之,它将保留原来的解)对解进行选择。

在所有采蜜蜂完成搜寻过程之后,采蜜蜂会把解的信息与观察蜂分享。观察蜂根据下面的概率式选择一个蜜源。

式中,fiti为可能解Xi(t)的适合度。对于被选择的蜜源,观察蜂根据式(1-4)搜寻新的可能解。当所有的采蜜蜂和观察蜂都搜索完整个搜索空间时,如果一个蜜源的适合度在给定的步骤内(定义为控制参数limit)没有被提高,则丢弃该蜜源,而与该蜜源相对应的采蜜蜂变成侦察蜂。侦察蜂通过式(1-5)搜索新的可能解。

式中,分别为第d维蜜源的最大值、最小值;r为区间[0,1]内的随机数。

人工蜂群算法的具体实现步骤如下。

步骤1:初始化各个参数,包括采蜜蜂个数SN、蜜源被采集次数(即最大迭代次数)及控制参数 limit,确定问题搜索范围,并且在搜索范围内随机产生初始解(蜜源)Xi(i=1,2,…,SN)。

步骤2:计算并评估每个初始解的适合度。

步骤3:设定循环条件并开始循环。

步骤 4:采蜜蜂对解Xi按照式(1-3)进行邻域搜索产生新解(蜜源),并计算其适合度。

步骤5:采蜜蜂根据贪心策略选择蜜源。

步骤6:根据式(1-4)计算蜜源的概率Pi

步骤7:观察蜂依照概率Pi选择解(蜜源),按照式(1-3)搜索产生新解(蜜源),并计算其适合度。

步骤8:观察蜂根据贪心策略选择蜜源。

步骤9:判断是否有要放弃的解(蜜源)。若有,则侦察蜂按照式(1-5)随机产生新解(蜜源)将其替换。

步骤10:记录到目前为止的最优解。

步骤11:判断是否满足循环终止条件。若满足,循环结束,输出最优解,否则返回步骤4继续搜索。

4.狼群算法

狼群搜索(wolf pack search,WPS)算法是基于狼群行为特征设计的,最早由Yang等提出[4],并将其应用于解决蜜蜂婚姻的优化问题。为了求解优化问题, Liu等[5]又提出了新的狼群算法(wolf colony algorithm,WCA),WCA成功地对狼群的搜索、围攻等行为进行了模拟。WCA与其他智能算法相比具有很大的优势,这种优势体现在算法的收敛速度更快,并且精度更高。虽然WCA近几年才被提出,但是其卓越的性能使大量学者对其做了众多深入而细致的研究,同时受关注度也越来越高。

例如,吴虎胜[6]对WCA进行了更加细致而全面的改进,并于2013年正式提出了一种更新的狼群算法(wolf pack algorithm,WPA)。该算法将狼分为三类:头狼、猛狼和探狼,将智能行为归纳提炼为游走、召唤、奔袭与围攻,并且对头狼的产生规则以及整个狼群的更新机制做了详尽的阐述及说明。WPA相比其他智能算法更适合实际应用,更具发展前景和应用价值。

WPA的具体实现步骤如下。

步骤1:在解空间中随机初始化狼群的空间坐标,依据目标函数值的大小角逐出头狼。

步骤2:探狼开始随机游走搜索猎物,若发现某个位置的目标函数值大于头狼的目标函数值,将更新头狼位置,同时头狼发出召唤行为;若未发现,探狼则继续游走直到达到最大游走次数,头狼在原本的位置发出召唤行为。

步骤3:听到头狼召唤的猛狼以较大的步长快速向头狼奔袭,若奔袭途中猛狼的目标函数值大于头狼的目标函数值,则对头狼位置进行更新;否则,猛狼将继续奔袭直到进入围攻范围。

步骤4:靠近头狼的猛狼将联合探狼对猎物(把头狼位置视为猎物)进行围攻,围攻过程中若其他狼(猛狼或探狼)的目标函数值大于头狼的目标函数值,则对头狼位置进行更新,直到捕获猎物。

步骤5:淘汰狼群中目标函数值较小的狼,并在解空间中随机生成新的狼,实现狼群的更新。

步骤6:最后判断头狼的目标函数值是否达到精度要求或算法是否达到最大迭代次数。若达到,则输出头狼的位置(即所求问题的最优解),否则转步骤2继续搜索。

在求解优化的过程中,通过狼群中分工明确的游走、召唤和围攻行为,不断求解比较当前头狼的位置信息,从而得到最优决策方案及收益。