SCI一区:章鱼优化算法(Octopus Optimization Algorithm, OOA)求解23个测试函数,出图丰富,提供完整MATLAB代码

章鱼优化算法(Octopus Optimization Algorithm, OOA)是一种受自然启发的元启发式优化算法,由 Song 等人于 2025 年提出。该算法模拟章鱼在海洋环境中的捕食行为与运动模式,将种群划分为猎人(Hunter)与侦察兵(Scout)两类角色,分别执行局部精细搜索与全局探索。

1 生物灵感与算法框架

章鱼(Octopus)属于头足纲软体动物,其神经系统高度发达:约 500 亿神经元中,约 2/5 位于头部,3/5 分布于八条腕足。这种分布赋予腕足一定程度的自主决策能力,允许其在无需大脑直接干预的情况下完成局部运动与感知。OOA 借鉴这一生物学特性,构建了分层协同搜索机制。

算法将种群分为以下两类角色:

  • 猎人(Hunter):模拟章鱼在海底用腕足爬行捕食的行为,负责局部开发。每只猎人由一个头部(head)和八条腕足(tentacles)构成,头部记录该猎人当前最优腕足的位置,腕足独立探索解空间。
  • 侦察兵(Scout):模拟章鱼通过喷水推进快速游动的行为,负责全局探索。侦察兵从猎人群体中选取位置,并执行大范围跳跃式搜索。

种群中总个体数 NNN 满足下式:
N=Nh×9+Ns, N = N_h \times 9 + N_s, N=Nh×9+Ns,

其中 NhN_hNh 为猎人数量,NsN_sNs 为侦察兵数量。


2 数学模型与更新公式

2.1 参数定义与初始化

  • DDD:问题维度
  • UBj,LBjUB_j, LB_jUBj,LBj:第 jjj 维搜索上、下界
  • TTT:最大迭代次数,ttt:当前迭代次数
  • vr=3vr = 3vr=3:视野范围(field of view)
  • ll=0.8ll = 0.8ll=0.8:抓取阈值(grasping threshold)
  • p∈[0.7,0.9]p \in [0.7, 0.9]p∈[0.7,0.9]:猎人比例控制参数(原文取 p=0.8p=0.8p=0.8)

初始种群位置均匀随机生成:
Xi,j=LBj+r⋅(UBj−LBj),r∼U(0,1). X_{i,j} = LB_j + r \cdot (UB_j - LB_j), \quad r \sim U(0,1). Xi,j=LBj+r⋅(UBj−LBj),r∼U(0,1).

依据下式计算猎人数量与侦察兵数量:
Nh=⌊N⋅p9⌋,Ns=N−Nh. N_h = \left\lfloor \frac{N \cdot p}{9} \right\rfloor, \quad N_s = N - N_h. Nh=⌊9N⋅p⌋,Ns=N−Nh.

2.2 捕食距离与抓取判断

定义迭代依赖的有效距离 ldldld 与随机变换量 transtranstrans:
ld=vr⋅(1−tT),(10) ld = vr \cdot \left(1 - \frac{t}{T}\right), \tag{10} ld=vr⋅(1−Tt),(10)
trans=(2⋅rand−1)⋅ld,rand∼U(0,1).(11) trans = (2 \cdot \text{rand} - 1) \cdot ld, \quad \text{rand} \sim U(0,1). \tag{11} trans=(2⋅rand−1)⋅ld,rand∼U(0,1).(11)

判断规则:

  • 若 trans<lltrans < lltrans<ll,则认为猎物(当前全局最优解)位于腕足可触及范围内,执行抓取模式更新;
  • 若 trans≥lltrans \ge lltrans≥ll,则执行头部引导模式更新。

2.3 腕足更新

记第 iii 只猎人的第 jjj 条腕足的位置为 Ti,j\mathbf{T}_{i,j}Ti,j,头部位置为 Hi\mathbf{H}iHi,当前全局最优位置为 Pprey\mathbf{P}{\text{prey}}Pprey。

2.3.1 抓取模式(trans<lltrans < lltrans<ll)

选取距离猎物最近的腕足索引 idx=arg⁡min⁡j∥Ti,j−Pprey∥\text{idx} = \arg\min_j \|\mathbf{T}{i,j} - \mathbf{P}{\text{prey}}\|idx=argminj∥Ti,j−Pprey∥,则所有腕足向该腕足与猎物的方向移动:
Ti,j:=Ti,j+rand⋅(Pprey−Ti,idx)⊙LF(D),(12) \mathbf{T}{i,j} := \mathbf{T}{i,j} + \text{rand} \cdot \left(\mathbf{P}{\text{prey}} - \mathbf{T}{i,\text{idx}}\right) \odot \mathbf{LF}(D), \tag{12} Ti,j:=Ti,j+rand⋅(Pprey−Ti,idx)⊙LF(D),(12)

其中 ⊙\odot⊙ 表示逐元素乘法,LF(D)\mathbf{LF}(D)LF(D) 为 Lévy 飞行向量。

2.3.2 头部引导模式(trans≥lltrans \ge lltrans≥ll)

腕足向本猎人的头部位置收缩:
Ti,j:=Hi+rand⋅(Hi−Ti,j)⊙LF(D).(15) \mathbf{T}_{i,j} := \mathbf{H}_i + \text{rand} \cdot \left(\mathbf{H}i - \mathbf{T}{i,j}\right) \odot \mathbf{LF}(D). \tag{15} Ti,j:=Hi+rand⋅(Hi−Ti,j)⊙LF(D).(15)

2.4 Lévy 飞行

Lévy 飞行用于增强搜索的随机性与长程跳跃能力,其生成方式如下:
LF(D)=0.01⋅u⊙σ∣v∣1/β,(13) \mathbf{LF}(D) = 0.01 \cdot \frac{\mathbf{u} \odot \boldsymbol{\sigma}}{|\mathbf{v}|^{1/\beta}}, \tag{13} LF(D)=0.01⋅∣v∣1/βu⊙σ,(13)
σ=(Γ(1+β)⋅sin⁡(πβ2)Γ(1+β2)⋅β⋅2(β−1)/2)1/β,(14) \boldsymbol{\sigma} = \left( \frac{\Gamma(1+\beta) \cdot \sin(\frac{\pi\beta}{2})}{\Gamma(\frac{1+\beta}{2}) \cdot \beta \cdot 2^{(\beta-1)/2}} \right)^{1/\beta}, \tag{14} σ=(Γ(21+β)⋅β⋅2(β−1)/2Γ(1+β)⋅sin(2πβ))1/β,(14)

其中:

  • u,v∈RD\mathbf{u}, \mathbf{v} \in \mathbb{R}^Du,v∈RD,各分量独立服从标准正态分布 N(0,1)\mathcal{N}(0,1)N(0,1);
  • β=1.5\beta = 1.5β=1.5 为常数;
  • Γ(⋅)\Gamma(\cdot)Γ(⋅) 为伽马函数。

2.5 猎人头部更新

每轮腕足更新后,猎人头部更新为其八条腕足中适应度最优(最小化目标 fff)的位置:
Hi:=arg⁡min⁡j∈{1,...,8}f(Ti,j).(隐含) \mathbf{H}i := \arg\min{j \in \{1,\dots,8\}} f(\mathbf{T}_{i,j}). \tag{隐含} Hi:=argj∈{1,...,8}minf(Ti,j).(隐含)

2.6 侦察兵生成与角色转换

从所有猎人的头部集合中选取 NsN_sNs 个位置,具体包括:

  • 全局最优头部 Hbest\mathbf{H}_{\text{best}}Hbest;
  • 全局最差头部 Hworst\mathbf{H}_{\text{worst}}Hworst;
  • 随机选取的 Ns−2N_s-2Ns−2 个不同头部(不含上述两者)。

第 zzz 个侦察兵的位置 Sz\mathbf{S}_zSz 由对应的猎人头部 Hz\mathbf{H}_zHz 生成:
Sz=Hz+rand⋅ld⋅(UB+LB−2Hz).(16) \mathbf{S}_z = \mathbf{H}_z + \text{rand} \cdot ld \cdot \left( \mathbf{UB} + \mathbf{LB} - 2 \mathbf{H}_z \right). \tag{16} Sz=Hz+rand⋅ld⋅(UB+LB−2Hz).(16)

若 f(Sz)<f(Hz)f(\mathbf{S}_z) < f(\mathbf{H}_z)f(Sz)<f(Hz),则侦察兵转化为新猎人,更新头部并重新初始化八条腕足:
Hz:=Sz,(17) \mathbf{H}_z := \mathbf{S}z, \tag{17} Hz:=Sz,(17)
Tz,i:=rand⋅(Sz+ll)−(Sz−ll),i=1,...,8.(18) \mathbf{T}
{z,i} := \text{rand} \cdot (\mathbf{S}_z + ll) - (\mathbf{S}_z - ll), \quad i=1,\dots,8. \tag{18} Tz,i:=rand⋅(Sz+ll)−(Sz−ll),i=1,...,8.(18)


3 算法步骤

步骤 描述
1 初始化参数 T,N,D,vr,ll,pT, N, D, vr, ll, pT,N,D,vr,ll,p。
2 随机生成初始种群 X∈RN×D\mathbf{X} \in \mathbb{R}^{N \times D}X∈RN×D。
3 根据 Nh=⌊Np/9⌋N_h = \lfloor N p / 9 \rfloorNh=⌊Np/9⌋,Ns=N−NhN_s = N - N_hNs=N−Nh 划分猎人/侦察兵,构建猎人结构(每个猎人包含头部与8条腕足)。
4 计算所有个体的适应度,确定全局最优 Pprey\mathbf{P}_{\text{prey}}Pprey。
5 for t=1t = 1t=1 to TTT do
6 ld=vr⋅(1−t/T)\quad ld = vr \cdot (1 - t/T)ld=vr⋅(1−t/T)。
7 \quad for 每只猎人 i=1i = 1i=1 to NhN_hNh do
8 trans=(2⋅rand−1)⋅ld\qquad trans = (2 \cdot \text{rand} - 1) \cdot ldtrans=(2⋅rand−1)⋅ld。
9 \qquad if trans<lltrans < lltrans<ll then
10 \qquad\quad 按公式 (12) 更新该猎人的所有腕足。
11 \qquad else
12 \qquad\quad 按公式 (15) 更新该猎人的所有腕足。
13 \qquad end if
14 \qquad 更新该猎人头部为八条腕足中的最优位置。
15 \quad end for
16 \quad 从猎人头部集合中选择 Hbest,Hworst\mathbf{H}{\text{best}}, \mathbf{H}{\text{worst}}Hbest,Hworst 及 Ns−2N_s-2Ns−2 个随机头部。
17 \quad for 每个侦察兵 z=1z = 1z=1 to NsN_sNs do
18 \qquad 按公式 (16) 生成 Sz\mathbf{S}_zSz。
19 \qquad if f(Sz)<f(Hz)f(\mathbf{S}_z) < f(\mathbf{H}_z)f(Sz)<f(Hz) then
20 \qquad\quad 按公式 (17)-(18) 将侦察兵转化为猎人。
21 \qquad end if
22 \quad end for
23 \quad 更新全局最优 Pprey\mathbf{P}_{\text{prey}}Pprey。
24 end for
25 输出 Pprey\mathbf{P}_{\text{prey}}Pprey。

4、性能评估

复制代码
clear;
clc;
close all;
warning off all;

SearchAgents_no=30;    %Number of search solutions
Max_iteration=100;    %Maximum number of iterations

Function_name='F7'; % Name of the test function
% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_F(Function_name); 

tic;
[Best_score,Best_pos,cg_curve,search_history,ave_fit,x_1st]=OOA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj); 
tend=toc
Best_score
%% plot
figure(1);
set(gcf, 'Position', [150, 350, 1500, 300]);




5、参考文献

  1. Song M, Lin J, Liu X, et al. Octopus optimization algorithm: a novel single- and multi-objective optimization algorithm for optimization problems [J]. Cluster Computing, 2025, 28(8): 484.

  2. Wang K, Abualigah L, Smerat A, et al. A nature recoil mechanism-based Octopus optimization algorithm for solving the global and constraint optimization from engineering structural design problems [J]. Journal of Computational Design and Engineering, 2025, qwaf139. DOI: 10.1093/jcde/qwaf139

6、一键三连私信获取完整MATLAB代码

相关推荐
程序员JerrySUN1 小时前
Jetson边缘嵌入式实战课程第二讲:JetPack 和 SDK Manager 是什么
c语言·开发语言·网络·udp·音视频
不知名的老吴1 小时前
后端知识点:Python处理加权点赞
开发语言·python
superior tigre1 小时前
739 每日温度
算法·leetcode·职场和发展
忡黑梨1 小时前
eNSP_从直连到BGP全网互通
c语言·网络·数据结构·python·算法·网络安全
海参崴-1 小时前
C++ STL篇 AVL树的模拟实现
开发语言·c++
Cyber4K1 小时前
【Python专项】基础语法(2)
开发语言·python
Run_Teenage1 小时前
算法:离散化模板
算法
乐迪信息1 小时前
乐迪信息:实时预警,秒级响应:船舶AI异常行为检测算法
大数据·人工智能·算法·安全·目标跟踪
6Hzlia1 小时前
【Hot 100 刷题计划】 LeetCode 15. 三数之和 | C++ 排序+双指针
c++·算法·leetcode