A New Bio-Inspired Optimization Algorithm for Solving Optimization Algorithm
参考文献:
M. Dehghani, Š. Hubálovský and P. Trojovský, “Tasmanian Devil Optimization: A New Bio-Inspired Optimization Algorithm for Solving Optimization Algorithm,” in IEEE Access, vol. 10, pp. 19599-19620, 2022, doi: 10.1109/ACCESS.2022.3151641.
如有侵权,联系删除
简介
袋獾是一种食肉有袋类野生动物属于Dasyuridae科的动物,袋獾是机会主义者动物,虽然它们能捕猎,但它们也吃东西如果存在腐肉[41]。袋獾有两种策略喂养。在第一种策略中,如果袋獾找到一个它以腐肉为食。在第二种策略中,它捕食通过攻击猎物。TDO算法设计来源
原理
初始化
X
=
[
X
1
⋮
X
i
⋮
X
N
]
N
×
m
=
[
x
1
,
1
⋯
x
1
,
j
⋯
x
1
,
m
⋮
⋱
⋮
⋮
x
i
,
1
⋯
x
i
,
j
⋯
x
i
,
m
⋮
⋮
⋱
⋮
x
N
,
1
⋯
x
N
,
j
⋯
x
N
,
m
]
N
×
m
X=\left[\begin{array}{c} X_{1} \\ \vdots \\ X_{i} \\ \vdots \\ X_{N} \end{array}\right]_{N \times m}=\left[\begin{array}{ccccc} x_{1,1} & \cdots & x_{1, j} & \cdots & x_{1, m} \\ \vdots & \ddots & \vdots & & \vdots \\ x_{i, 1} & \cdots & x_{i, j} & \cdots & x_{i, m} \\ \vdots & & \vdots & \ddots & \vdots \\ x_{N, 1} & \cdots & x_{N, j} & \cdots & x_{N, m} \end{array}\right]_{N \times m}
X=⎣⎢⎢⎢⎢⎢⎢⎡X1⋮Xi⋮XN⎦⎥⎥⎥⎥⎥⎥⎤N×m=⎣⎢⎢⎢⎢⎢⎢⎡x1,1⋮xi,1⋮xN,1⋯⋱⋯⋯x1,j⋮xi,j⋮xN,j⋯⋯⋱⋯x1,m⋮xi,m⋮xN,m⎦⎥⎥⎥⎥⎥⎥⎤N×m
F
=
[
F
1
⋮
F
i
⋮
F
N
]
N
×
1
=
[
F
(
X
1
)
⋮
F
(
X
i
)
⋮
F
(
X
N
)
]
N
×
1
F=\left[\begin{array}{c} F_{1} \\ \vdots \\ F_{i} \\ \vdots \\ F_{N} \end{array}\right]_{N \times 1}=\left[\begin{array}{c} F\left(X_{1}\right) \\ \vdots \\ F\left(X_{i}\right) \\ \vdots \\ F\left(X_{N}\right) \end{array}\right]_{N \times 1}
F=⎣⎢⎢⎢⎢⎢⎢⎡F1⋮Fi⋮FN⎦⎥⎥⎥⎥⎥⎥⎤N×1=⎣⎢⎢⎢⎢⎢⎢⎡F(X1)⋮F(Xi)⋮F(XN)⎦⎥⎥⎥⎥⎥⎥⎤N×1
位置更新方式
在TDO每次迭代过程中,更新方式假定选择这两种策略的概率等于百分之50
策略一:通过吃腐肉进食
C
i
=
X
k
,
i
=
1
,
2
,
…
,
N
,
k
∈
{
1
,
2
,
…
,
N
∣
k
≠
i
}
C_{i}=X_{k}, \quad i=1,2, \ldots, N, k \in\{1,2, \ldots, N \mid k \neq i\}
Ci=Xk,i=1,2,…,N,k∈{1,2,…,N∣k=i}
x
i
,
j
n
e
w
,
S
1
=
{
x
i
,
j
+
r
⋅
(
c
i
,
j
−
I
⋅
x
i
,
j
)
,
F
C
i
<
F
i
;
x
i
,
j
+
r
⋅
(
x
i
,
j
−
c
i
,
j
)
,
otherwise
,
X
i
=
{
X
i
n
e
w
,
S
1
,
F
i
n
e
w
,
S
1
<
F
i
X
i
,
otherwise
,
\begin{aligned} x_{i, j}^{n e w, S 1} &= \begin{cases}x_{i, j}+r \cdot\left(c_{i, j}-I \cdot x_{i, j}\right), & F_{C_{i}}<F_{i} ; \\ x_{i, j}+r \cdot\left(x_{i, j}-c_{i, j}\right), & \text { otherwise },\end{cases} \\ X_{i} &= \begin{cases}X_{i}^{n e w, S 1}, & F_{i}^{n e w, S 1}<F_{i} \\ X_{i}, & \text { otherwise },\end{cases} \end{aligned}
xi,jnew,S1Xi={xi,j+r⋅(ci,j−I⋅xi,j),xi,j+r⋅(xi,j−ci,j),FCi<Fi; otherwise ,={Xinew,S1,Xi,Finew,S1<Fi otherwise ,
具体参数设置请参照原文
策略二:通过吃猎物进食
P
i
=
X
k
,
i
=
1
,
2
,
…
,
N
,
k
∈
{
1
,
2
,
…
,
N
∣
k
∣
=
i
}
P_{i}=X_{k}, \quad i=1,2, \ldots, N, k \in\{1,2, \ldots, N|k|=i\}
Pi=Xk,i=1,2,…,N,k∈{1,2,…,N∣k∣=i}
x
i
,
j
n
e
w
,
S
2
=
{
x
i
,
j
+
r
⋅
(
p
i
,
j
−
I
⋅
x
i
,
j
)
,
F
P
i
<
F
i
,
x
i
,
j
+
r
⋅
(
x
i
,
j
−
p
i
,
j
)
,
otherwise
,
X
i
=
{
X
i
n
e
w
,
S
2
,
F
i
new
,
S
2
<
F
i
;
X
i
,
otherwise
,
\begin{aligned} x_{i, j}^{n e w, S 2} &= \begin{cases}x_{i, j}+r \cdot\left(p_{i, j}-I \cdot x_{i, j}\right), & F_{P_{i}}<F_{i}, \\ x_{i, j}+r \cdot\left(x_{i, j}-p_{i, j}\right), & \text { otherwise },\end{cases} \\ X_{i} &= \begin{cases}X_{i}^{n e w, S 2}, & F_{i}^{\text {new }, S 2}<F_{i} ; \\ X_{i}, & \text { otherwise },\end{cases} \end{aligned}
xi,jnew,S2Xi={xi,j+r⋅(pi,j−I⋅xi,j),xi,j+r⋅(xi,j−pi,j),FPi<Fi, otherwise ,={Xinew,S2,Xi,Finew ,S2<Fi; otherwise ,
R
=
0.01
(
1
−
t
T
)
,
x
i
,
j
new
=
x
i
,
j
+
(
2
r
−
1
)
⋅
R
⋅
x
i
,
j
,
X
i
=
{
X
i
new
,
F
i
new
<
F
i
X
i
,
otherwise
,
\begin{aligned} R &=0.01\left(1-\frac{t}{T}\right), \\ x_{i, j}^{\text {new }} &=x_{i, j}+(2 r-1) \cdot R \cdot x_{i, j}, \\ X_{i} &= \begin{cases}X_{i}^{\text {new }}, & F_{i}^{\text {new }}<F_{i} \\ X_{i}, & \text { otherwise },\end{cases} \end{aligned}
Rxi,jnew Xi=0.01(1−Tt),=xi,j+(2r−1)⋅R⋅xi,j,={Xinew ,Xi,Finew <Fi otherwise ,
具体参数设置请参照原文
流程图
伪代码
测试及结果分析
单峰、多峰、固定维数各一个。
F5
F12
F23
结果分析选择测试函数是F12
独立运行20次源码
%%
clc
clear
close all
%%
Fun_name='F12'; % number of test functions: 'F1' to 'F23'
SearchAgents=30; % number of Tasmanian Devil (population members)
Max_iterations=500; % maximum number of iteration
for i=1:20
[lowerbound,upperbound,dimension,fitness]=fun_info(Fun_name); % Object function information
[Best_score_TDO,Best_pos_TDO,TDO_curve]=TDO(SearchAgents,Max_iterations,lowerbound,upperbound,dimension,fitness);
[Best_score_DTBO,Best_pos_DTBO,DTBO_curve]=DTBO(SearchAgents,Max_iterations,lowerbound,upperbound,dimension,fitness);
[Best_score_NGO,Best_pos_NGO,NGO_curve]=NGO(SearchAgents,Max_iterations,lowerbound,upperbound,dimension,fitness);
[Best_score_POA,Best_pos_POA,POA_curve]=POA(SearchAgents,Max_iterations,lowerbound,upperbound,dimension,fitness);
result{i,:}=[Best_score_TDO,Best_score_DTBO,Best_score_NGO,Best_score_POA];
end
%% Result Analysis
format shortEng
fr=cell2mat(result);
fmean=mean(fr);
fstd=std(fr);
fbsf=min(fr);
fmedian=median(fr);
final=[fmean;fstd;fbsf;fmedian];
单独测试一个函数的源码
%%
clc
clear
close all
%%
Fun_name='F1'; % number of test functions: 'F1' to 'F23'
SearchAgents=30; % number of Tasmanian Devil (population members)
Max_iterations=500; % maximum number of iteration
[lowerbound,upperbound,dimension,fitness]=fun_info(Fun_name); % Object function information
for i=1:20
[Best_score_TDO,Best_pos_TDO,TDO_curve]=TDO(SearchAgents,Max_iterations,lowerbound,upperbound,dimension,fitness);
result(i)=Best_score_TDO;
end
display(['The mean obtained by TDO is : ', num2str( mean(result))]);%平均值
display(['The std obtained by TDO is : ', num2str( std(result))]); %标准差
display(['The var obtained by TDO is : ', num2str( var(result))]); %方差
学习交流,无偿分享已有源码