【智能算法】回溯搜索算法(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 problems\[J\]. Applied Mathematics and computation, 2013, 219(15): 8121-8144.

相关推荐
颜酱1 分钟前
用填充表格法-继续吃透完全背包及其变形
前端·后端·算法
夏秃然4 分钟前
打破预测与决策的孤岛:如何构建“能源垂类大模型”?
算法·ai·大模型
氷泠8 分钟前
课程表系列(LeetCode 207 & 210 & 630 & 1462)
算法·leetcode·拓扑排序·反悔贪心·三色标记法
代码or搬砖11 分钟前
JVM垃圾回收器
java·jvm·算法
老鼠只爱大米13 分钟前
LeetCode算法题详解 15:三数之和
算法·leetcode·双指针·三数之和·分治法·three sum
客卿12313 分钟前
C语言刷题--合并有序数组
java·c语言·算法
Qhumaing14 分钟前
C++学习:【PTA】数据结构 7-1 实验6-1(图-邻接矩阵)
c++·学习·算法
菜鸟233号28 分钟前
力扣416 分割等和子串 java实现
java·数据结构·算法·leetcode
Swift社区34 分钟前
LeetCode 469 凸多边形
算法·leetcode·职场和发展
chilavert31836 分钟前
技术演进中的开发沉思-298 计算机原理:算法的本质
算法·计算机原理