一种改进的原子搜索算法
文章目录
- 一种改进的原子搜索算法
- 1.原子搜索算法
- 2. 改进原子搜索算法
- 2.1 引入新的共价键约束力
- 2.2 自适应调整系数因子
- 2.3高斯变异策略
- 3.实验结果
- 4.参考文献
- 5.Matlab代码
- 6.Python代码
摘要:原子搜索算法(Atom Search Algorithm,ASO)是模仿自然界中原子运动而提出的一种新型优化算法,针对ASO在求解复杂函数时存在易早熟及收敛速度慢的问题,提出了一种改进ASO算法(Improved Atomic Search Algorithm,IASO)。IASO加入了原子个体历史最优解产生的约束力来修正ASO的加速度,增强全局搜索能力。自适应更新两个乘数系数来协调算法的全局搜索和局部开发能力。适时采用高斯变异策略来重新更新原子位置,提高跳出早熟的能力。
1.原子搜索算法
2. 改进原子搜索算法
2.1 引入新的共价键约束力
ASO 每次迭代中种群最佳原子对周围 原子存在一个共价键约束力 , 由式 (10) 可知它是种群最佳原子位置与当前原子位 置的差值, 这种机制提高了全局最优信息对 当前原子的引导作用, 加强了原子个体之间 的协同合作。为了更好的更新原子加速度方 向, 本文引入原子对自身的认知, 加入原子 个体历史最优解-单个原子在历次迭代中的 最佳位置叫原子个体历史最优解。在每一 次迭代中的个体原子位置都与原子个体历 史最优位置进行比较, 如果当前个体原子位 置优于它的个体历史最优位置, 则把当前个 体原子位置更新为个体历史最优位置, 相反, 则不更新。假设每个原子个体在迭代中产生 的个体历史最优解对周围原子也存在一个 共价键约束力, 因此原子的加速度受种群最 佳原子产生的共价键约束力和个体历史最 优原子产生的共价键约束力共同影响。原子可以利用种群信息和自身经验, 通过信息融 合更新加速度, 提高了算法的全局探索能力。 原子个体历史最优解产生的共价键约束力 定义为 , 其表达式如下(14)所示:
其中 是系数因子, 代表第 次迭代 中原子
2.2 自适应调整系数因子
引入原子个体历史最优解产生的共价 键约束力 之后, 原子加速度 的公式更 新为如下(15)所示:
其中 和 都是超参数, 对算法的寻优 速度和优化结果有着重要的影响, 可以看出 代表了原子向全局历史最优解运动能力的 权重, 代表了原子对自己的认可程度。这 两个参数反映了对种群信息和个体信息的 接受程度, 不同阶段需要设置不同大小。在 算法搜索初期, 为了增强原子的全局搜索能 力, 让 取较大的值, 取较小的值, 这样 可以使原子在整个可行空间进行搜索。在搜 索后期, 取较小的值, 取较大的值, 可 以使原子快速收敛于最优值。所以随着迭代 次数的增加, 逐渐变大, 逐渐变小, 基 于此本文对两个参数采取自适应更新策略, 平衡全局信息与局部信息, 提高信息利用率。 和
其中 分别为参数的最小值; , 为最大值。可知 和 都在
2.3高斯变异策略
优化算法在更新原子全局最优位 置的过程中, 原子通常会表现出早熟的现象, 整个原子种群进入搜索停滞, 陷入局部极值。 为了加快原子的收玫速度, 提高原子跳出早 熟的能力, 将高斯变异策略 引入 IASO 算 法的原子位置更新中, 加入高斯变异因子对 原子位置进行扰动, 使之产生新的位置继续 进行更新。在对原子位置进行高斯变异之前, 首先进行变异系数判断, 变异系数是衡量一 组数据离散程度的一个归一化量度, 变异系 数的定义为如下(17)所示:
其中 是变异系数; 是标准差;
IASO 算法提前设置一个变异系数阈值 , 为了保持算法的效率, 变异系数不宜过 大, 本文设置 , 算法前期迭代收敛 性一般较好, 迭代中后期易陷入局部最优解, 在算法进行 次迭代之后, 再根据变异系 数适时采用高斯变异。对相邻三次的迭代结 果求取高斯变异系数 , 其求解公式如 下(18)所示:
其中 是当前迭代次数, 是第 次 迭代的最优解, mean 是三次迭代结果 的平均值, 其定义如下(19)所示:
如果 , 说明每次迭代的最优 解 变化较大, 算法的收玫性仍然较好, 此时对原子位置更新不采用高斯扰动, 如果 , 则说明迭代结果 变化不大, 算法陷入了局部停滞, 此时对原子的位置进 行高斯变异扰动更新, 提高原子的多样性, 跳出局部极值。加入高斯变异后的原子位置 更新公式如下(20)所示:
其中 为服从 0-1 之间均匀分布的随机 数; Gaussian 是第 次迭代原 子位置,
3.实验结果
4.参考文献
[1]李建锋,卢迪,李贺香.一种改进的原子搜索算法[J/OL].系统仿真学报:1-13[2021-05-06].http://kns.cnki.net/kcms/detail/11.3092.V.20210409.1508.008.html.
5.Matlab代码
6.Python代码