本仓库为作者为北航自动化学院2023秋季计算智能算法课程大作业编写的算法和相应实验。包含蜜蜂算法和一种粒子群优化算法的变体。 请注意仓库作者大概率不会进一步维护。
蜜蜂算法是课程中讲授的第一种基于群的算法,与蚁群算法和蝙蝠算法 等算法一样属于仿生算法的一种,模拟了自然界中蜜蜂的行为模式。具体而 言,算法考虑这样一种现象:一个蜂群中,侦查蜜蜂可以在一个较大范围内 搜寻花蜜较多的花朵并将其位置告知群体中的其他蜜蜂;蜂群中较多的工 蜂会前往侦查蜜蜂探测到具有较多花蜜的花朵处采蜜,花蜜较少的花只会 有少数工蜂光顾。受到启发,算法在待解决问题自变量的整个定义域内首先 进行一定次数的随机采样(模拟侦查蜜蜂的侦查);对于适应度最高的一批 采样点进行最为密集的局部搜索,适应度较高的采样点进行中等密集的局 部搜索,其余采样点不予局部搜索(模拟分配工蜂的过程);此后将局部搜 索得到的适应度最高的蜜蜂集合保存,并再次随机采样补满下一代蜜蜂种 群进行循环。从数学的角度看,该算法可以理解为建立在目标函数具有较好 的连续性,优质解的邻域中较定义域的其他区域而言更有可能存在优质解 这一前提上。
粒子群优化算法是最有名的智能优化算法之一,广泛用于各类优化问 题,它同样是一种仿生群体算法,受到自然界中群体行为的如下三种特征启 发:
- 分隔:群体中所有个体有避免相互碰撞的趋势;
- 对准:群体内个体有与其相邻个体速度保持一致的趋势;
- 内聚:群体中所有个体有趋向邻近个体的趋势。 算法使用多个个体粒子构成种群,各粒子在解空间中移动并寻找最优的位 置,每个粒子通过个体飞行经验和其他粒子的飞行经验调整自身的飞行行 为,所有粒子运动一定迭代次数后算法终止;最基本的粒子群优化算法中, 粒子遵循运动律(1)更新自身的状态,其中 xi, vi 代表粒子的位置和速度; c1 ∗ r1 ∗ (pi − xi) 项为粒子受到个体飞行经验的影响项,c1 为比例系数,r1 为 (0,1) 范围内的随机数,pi 为粒子自身所经历的局部最优解;c2 ∗ r2 ∗ (g − xi) 为粒子所受到群体飞行经验的影响项,c2 为比例系数,r2 为 (0,1) 范围内的 随机数,g 为整个粒子群所经历过的全局最优解;此外引入惯性概念,粒子 有系数 k 的倾向继承上一次迭代的速度。 禁忌搜索是一种历史悠久的寻优算法。其中心思想是让搜索过程具备 短期记忆,不去搜索最近几次迭代搜索过的区域,为此需要维护一个“禁忌 表”作为算法的记忆。这一算法虽然简单,但是可以有效地跳出局部最优解, 同时也能减少重复搜索的情况,提高搜索效率。 本文尝试将禁忌搜索的思想与粒子群优化算法相结合,形成“禁忌粒子 群算法”。在基本的粒子群优化算法更新速度的公式之上,引入一个斥力项, 这样粒子在运动接近禁忌表中的位置时将损失速度甚至向相反方向前 进,以此非强迫性地抑制了算法向禁忌表中的位置搜索的倾向。禁忌表采用 队列的数据结构实现,维护队长为 5,每次迭代使当前群体最优位置进队、 队首位置出队不再设为禁忌。