【智能算法】回溯搜索算法(BSA)原理及实现

目录


1.背景

2013年,P Civicioglu等人受到当前种群与历史种群之间的差分向量的引导启发,提出了回溯搜索算法(Backtracking Search Algorithm, BSA)。

2.算法原理

2.1算法思想

BSA通过当前种群与历史种群之间的差分向量的引导来执行搜索任务,主要分为三部分:筛选-I、交叉和变异和筛选-II

2.2算法过程

筛选-I

更新历史种群 Xoldt ,分为以下两步:
X o l d t = { X t , i f φ > θ X o l d t , o t h e r w i s e (1) \boldsymbol{X}{\mathrm{old}}^t=\begin{cases}\boldsymbol{X}^t,&\mathrm{if~}\varphi{>}\theta\\\boldsymbol{X}{\mathrm{old}}^t,&\mathrm{otherwise}&\end{cases}\tag{1} Xoldt={Xt,Xoldt,if φ>θotherwise(1)

其中, φ , θ \varphi,\theta φ,θ为随机数。接下来:
X o l d t = p e r m u t i n g ( X o l d t ) (2) \boldsymbol{X}\mathrm{old}^t\mathrm{=permuting}{\left(\boldsymbol{X}\mathrm{old}^t\right)}\tag{2} Xoldt=permuting(Xoldt)(2)

permuting 是一个随机改组函数,使得历史种群 Xold t 中包含的 N 个个体随机排序。

交叉和变异

变异操作由历史种群 Xold t 引导:
z i t = x i t + F × ( x o l d , i t − x i t ) (3) \boldsymbol{z}_i^t=\boldsymbol{x}i^t+F\times\left(\boldsymbol{x}{\mathrm{old},i}^t-\boldsymbol{x}_i^t\right)\tag{3} zit=xit+F×(xold,it−xit)(3)

F 为缩放因子,表述为:
F = 3 × ξ (4) F{=}3{\times}\xi \tag{4} F=3×ξ(4)

交叉操作是由一个 N 行 D 列的二进制矩阵 M 来引导:
x i , j t + 1 = { x i , j t , i f M i , j = 1 z i , j t , i f M i , j = 0 (5) x_{i,j}^{t+1}=\begin{cases}x_{i,j}^t,\mathrm{if~}\boldsymbol{M}{i,j}=1\\z{i,j}^t,\mathrm{if~}\boldsymbol{M}_{i,j}=0\end{cases}\tag{5} xi,jt+1={xi,jt,if Mi,j=1zi,jt,if Mi,j=0(5)

筛选-II

为了加快收敛过程,执行:
x i t + 1 = { x i t , i f f ( x i t ) < f ( x i t + 1 ) x i t + 1 , o t h e r w i s e (6) \boldsymbol{x}_i^{t+1}=\begin{cases}\boldsymbol{x}_i^t,&\mathrm{if~}f(\boldsymbol{x}_i^t)<f(\boldsymbol{x}_i^{t+1})\\\boldsymbol{x}_i^{t+1},&\mathrm{otherwise}&\end{cases}\tag{6} xit+1={xit,xit+1,if f(xit)<f(xit+1)otherwise(6)

伪代码

3.结果展示

作者提供了拟合圆、图像聚类两个案例:


4.参考文献

1 Civicioglu P. Backtracking search optimization algorithm for numerical optimization problemsJ. Applied Mathematics and computation, 2013, 219(15): 8121-8144.

相关推荐
云絮.39 分钟前
数据库操作
数据库·mysql·算法·oracle
小林ixn1 小时前
LeetCode 206. 反转链表(迭代 + 递归详解)
算法·leetcode·链表
凡人叶枫1 小时前
Effective C++ 条款17:以独立语句将 newed 对象置入智能指针
java·linux·开发语言·c++·算法
菜鸟‍3 小时前
LeetCode 1 27 和 704 || 两数之和 移除元素 二分查找
算法·leetcode·职场和发展
退休倒计时4 小时前
【每日一题】LeetCode 142. 环形链表 II TypeScript
算法·leetcode·链表·typescript
popcorn_min4 小时前
Digits 手写数字识别:随机森林多分类 + 像素级特征热力图
算法·随机森林·分类
liulilittle5 小时前
拥塞控制:排水终止的两种决策:OR 与 AND
网络·tcp/ip·计算机网络·算法·信息与通信·tcp·通信
weixin_307779135 小时前
从脚本执行到智能体协作:AI辅助测试能力的范式重构
运维·开发语言·人工智能·算法·测试用例
量化君也5 小时前
从回测到全自动实盘交易,全天候策略需要经历哪些改造?
大数据·人工智能·python·算法·金融
fox_lht6 小时前
第十五章 函数式语言:迭代器和闭包
开发语言·后端·学习·算法·rust