100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > cec(python):鱼鹰优化算法(Osprey optimization algorithm OOA)

cec(python):鱼鹰优化算法(Osprey optimization algorithm OOA)

时间:2020-11-09 16:28:45

相关推荐

cec(python):鱼鹰优化算法(Osprey optimization algorithm OOA)

一、鱼鹰优化算法

鱼鹰优化算法(Osprey optimization algorithm,OOA)由Mohammad Dehghani 和 Pavel Trojovský于提出,其模拟鱼鹰的捕食行为。鱼鹰优化算法详细信息:鱼鹰优化算法

1.1鱼鹰优化算法原理

鱼鹰优化算法包含两个阶段:第一阶段为鱼鹰识别鱼的位置并捕鱼(全局勘探), 第二阶段为将鱼带到合适的位置( 局部开采),其详细设计如下:

1.1.1 种群初始化

采用下式随机初始化鱼鹰种群:

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 i , j = l b j + r i , j ⋅ ( u b j − l b j ) , i = 1 , 2 , … , N , j = 1 , 2 , … , m , \begin{array}{c} 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 & \ddots & \vdots \\ x_{i, 1} & \cdots & x_{i, j} & \cdots & x_{i, m} \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ x_{N, 1} & \cdots & x_{N, j} & \cdots & x_{N, m} \end{array}\right]_{N \times m}, \\ x_{i, j}=l b_{j}+r_{i, j} \cdot\left(u b_{j}-l b_{j}\right), i=1,2, \ldots, N, j=1,2, \ldots, m, \end{array} 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​,xi,j​=lbj​+ri,j​⋅(ubj​−lbj​),i=1,2,…,N,j=1,2,…,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​

1.1.2 全局勘探(第一阶段:位置识别和捕鱼)

鱼鹰是强大的猎人,由于其强大的视力,能够探测到水下鱼类的位置。在确定鱼的位置后,他们攻击它并通过潜入水下捕猎鱼。OOA中种群更新的第一阶段是基于对鱼鹰这种自然行为的模拟而建模的。对鱼鹰攻击鱼类进行建模会导致鱼鹰在搜索空间中的位置发生显著变化,这增加了OOA在识别最优区域和逃离局部最优方面的探索能力。在OOA设计中,对于每只鱼鹰,搜索空间中具有较好目标函数值的其他鱼鹰的位置被视为水下鱼类。每只鱼鹰的位置使用下式指定。

F P i = { X k ∣ k ∈ { 1 , 2 , … , N } ∧ F k < F i } ∪ { X best } \boldsymbol{F P _ { i }}=\left\{X_{k} \mid \boldsymbol{k} \in\{1,2, \ldots, N\} \wedge \boldsymbol{F}_{k}<\boldsymbol{F}_{i}\right\} \cup\left\{\boldsymbol{X}_{\text {best }}\right\} FPi​={Xk​∣k∈{1,2,…,N}∧Fk​<Fi​}∪{Xbest​}

其中, F P i F P _ { i } FPi​为第i只鱼鹰的位置集合, X best {X}_{\text {best }} Xbest​为最佳鱼鹰的位置。

鱼鹰随机检测其中一条鱼的位置并攻击它。基于鱼鹰向鱼的运动模拟,使用下式计算相应鱼鹰的新位置。这个新位置,如果它的目标函数的值更好,则替换鱼鹰的先前位置。

x i , j P 1 = x i , j + r i , j ⋅ ( S F i , j − I i , j ⋅ x i , j ) , x i , j P 1 = { x i , j P 1 , l b j ≤ x i , j P 1 ≤ u b j ; l b j , x i , j P 1 < l b j ; u b j , x i , j P 1 > u b j . X i = { X i P 1 , F i P 1 < F i ; X i , else , \begin{array}{l} x_{i, j}^{P 1}=x_{i, j}+r_{i, j} \cdot\left(S F_{i, j}-I_{i, j} \cdot x_{i, j}\right), \\ x_{i, j}^{P 1}=\left\{\begin{array}{ll} x_{i, j}^{P 1}, & l b_{j} \leq x_{i, j}^{P 1} \leq u b_{j} ; \\ l b_{j}, & x_{i, j}^{P 1}<l b_{j} ; \\ u b_{j}, & x_{i, j}^{P 1}>u b_{j} . \end{array}\right. \\ X_{i}=\left\{\begin{array}{l} X_{i}^{P 1}, F_{i}^{P 1}<F_{i} ; \\ X_{i}, \text { else }, \end{array}\right. \\ \end{array} xi,jP1​=xi,j​+ri,j​⋅(SFi,j​−Ii,j​⋅xi,j​),xi,jP1​=⎩ ⎨ ⎧​xi,jP1​,lbj​,ubj​,​lbj​≤xi,jP1​≤ubj​;xi,jP1​<lbj​;xi,jP1​>ubj​.​Xi​={XiP1​,FiP1​<Fi​;Xi​,else,​​

其中, x i , j P 1 x_{i, j}^{P 1} xi,jP1​为第i只鱼鹰在第一阶段时,其第j维的新位置, F i , j P 1 F_{i, j}^{P 1} Fi,jP1​是其对应的适应度值。 S F i , j S F_{i, j} SFi,j​为[0,1]之间的随机数, I i , j I_{i, j} Ii,j​为集合{1,2}中的随机数。

1.1.3 局部开采(第二阶段:将鱼带到合适的位置)

捕食鱼后,鱼鹰将其带到合适(对他来说安全)的位置,并在那里吃。OOA中更新种群的第二阶段是基于鱼鹰这种自然行为的模拟建模的。将鱼带到合适位置的建模导致鱼鹰在搜索空间中的位置发生微小变化,从而导致 OOA 在本地搜索中的开发能力增加,并在发现的解决方案附近收敛到更好的解决方案。在OOA的设计中,为了模拟鱼鹰的这种自然行为,首先,针对种群的每个成员,使用下式计算一个新的随机位置作为“适合吃鱼的位置”。然后,如果目标函数的值在这个新位置得到改善,则替换相应鱼鹰的先前位置。

x i , j P 2 = x i , j + l b j + r ⋅ ( u b j − l b j ) t , i = 1 , 2 , … , N , j = 1 , 2 , … , m , t = 1 , 2 , … , T , x i , j P 2 = { x i , j P 2 , l b j ≤ x i , j P 2 ≤ u b j ; l b j , x i , j P 2 < l b j u b j , x i , j P 2 > u b j , X i = { X i P 2 , F i P 2 < F i ; X i , else , \begin{array}{c} x_{i, j}^{P 2}=x_{i, j}+\frac{l b_{j}+r \cdot\left(u b_{j}-l b_{j}\right)}{t}, i=1,2, \ldots, N, j=1,2, \ldots, m, t=1,2, \ldots, T, \\ x_{i, j}^{P 2}=\left\{\begin{array}{l} x_{i, j}^{P 2}, l b_{j} \leq x_{i, j}^{P 2} \leq u b_{j} ; \\ l b_{j}, x_{i, j}^{P 2}<l b_{j} \\ u b_{j}, x_{i, j}^{P 2}>u b_{j}, \end{array}\right. \\ X_{i}=\left\{\begin{array}{l} X_{i}^{P 2}, F_{i}^{P 2}<F_{i} ; \\ X_{i}, \text { else }, \end{array}\right. \end{array} xi,jP2​=xi,j​+tlbj​+r⋅(ubj​−lbj​)​,i=1,2,…,N,j=1,2,…,m,t=1,2,…,T,xi,jP2​=⎩ ⎨ ⎧​xi,jP2​,lbj​≤xi,jP2​≤ubj​;lbj​,xi,jP2​<lbj​ubj​,xi,jP2​>ubj​,​Xi​={XiP2​,FiP2​<Fi​;Xi​,else,​​

其中, x i , j P 2 x_{i, j}^{P 2} xi,jP2​为第i只鱼鹰在第二阶段时,其第j维的新位置, F i , j P 2 F_{i, j}^{P 2} Fi,jP2​是其对应的适应度值。 r r r为[0,1]之间的随机数, t t t和 T T T分别为当前迭代次数和最大迭代次数。

1.2算法描述

1.3算法流程

1.4参考文献

Dehghani Mohammad, Trojovský Pavel.Osprey optimization algorithm: A new bio-inspired metaheuristic algorithm for solving engineering optimization problems[J].Frontiers in Mechanical Engineering,,8.

二、OOA求解cec

cec测试函数简介

部分代码

完整代码添加博客下方博主微信

from OOA import OOAimport matplotlib.pyplot as pltimport numpy as npimport cec.functions as functions#主程序function_name =1 #测试函数 1-30SearchAgents_no = 50#种群大小Max_iter = 100#最大迭代次数dim=10;#维度只能是 10/30/50/100lb = -100*np.ones(dim)#下界ub = 100*np.ones(dim)#上界fobj= functions.all_functions[function_name-1]BestX,BestF,curve = OOA(SearchAgents_no, Max_iter,lb,ub,dim,fobj)#问题求解#画收敛曲线图if BestF>0:plt.semilogy(curve,color='r',linewidth=2,label='OOA')else:plt.plot(curve,color='r',linewidth=2,label='OOA')plt.xlabel("Iteration")plt.ylabel("Fitness")plt.xlim(0,Max_iter)plt.title("F"+str(function_name))plt.legend()plt.savefig(str(function_name)+'.png')plt.show()print('\nThe best solution is:\n'+str(BestX))print('\nThe best optimal value of the objective funciton is:\n'+str(BestF))

部分结果

三、参考代码

完整代码添加博客下方博主微信

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。