• 基于技能优化算法的函数寻优算法


    一、理论基础

    1、技能优化算法

    文献[1]提出了一种新的元启发式算法——技能优化算法(Skill Optimization Algorithm, SOA)来解决优化问题。设计SOA的基本灵感来自于人类获取和改进技能的努力。SOA的各个阶段在数学上分为两个阶段,分别为:(1)探索,从专家那里获得技能;(2)开发,基于实践和个人努力的技能改进。

    (1)初始化种群

    SOA是一种基于人群的方法,其成员是努力学习和提高技能的人。SOA总体成员实际上是给定优化问题的候选解决方案。这些成员在搜索空间中的位置显示了问题决策变量的值。SOA成员的位置在算法开始时随机初始化。SOA总体可以根据式(1)使用一个矩阵进行数学建模。 X = [ X 1 ⋮ X i ⋮ X N ] N × m = [ x 1 , 1 ⋯ x 1 , d ⋯ x 1 , m ⋮ ⋱ ⋮ ⋱ ⋮ x i , 1 ⋯ x i , d ⋯ x i , m ⋮ ⋱ ⋮ ⋱ ⋮ x N , 1 ⋯ x N , d ⋯ x N , m ] N × m (1) X=

    [X1XiXN]" role="presentation" style="position: relative;">[X1XiXN]
    _{N\times m}=
    [x1,1x1,dx1,mxi,1xi,dxi,mxN,1xN,dxN,m]" role="presentation" style="position: relative;">[x1,1x1,dx1,mxi,1xi,dxi,mxN,1xN,dxN,m]
    _{N\times m}\tag{1} X= X1XiXN N×m= x1,1xi,1xN,1x1,dxi,dxN,dx1,mxi,mxN,m N×m(1)其中, X X X是SOA的人群矩阵, X i X_i Xi表示第 i i i个候选解, X i , d X_{i,d} Xi,d是第 i i i个成员的第 d d d维变量的值, N N N表示SOA的成员数, m m m是变量数。
    人群中的每个成员都是问题的候选解决方案。换句话说,通过将每个成员放在问题变量中,就可以求出目标函数的值。因此,目标函数得到的值可以根据式(2)用向量进行数学建模。 F = [ F 1 ⋮ F i ⋮ F N ] N × 1 = [ F ( X 1 ) ⋮ F ( X i ) ⋮ F ( X N ) ] N × 1 (2) F=
    [F1FiFN]" role="presentation" style="position: relative;">[F1FiFN]
    _{N\times1}=
    [F(X1)F(Xi)F(XN)]" role="presentation" style="position: relative;">[F(X1)F(Xi)F(XN)]
    _{N\times 1}\tag{2}
    F= F1FiFN N×1= F(X1)F(Xi)F(XN) N×1(2)
    其中, F F F为目标函数的向量, F i F_i Fi为基于第 i i i个候选解的目标函数值。考虑到为目标函数评估的值,最好的值标识最好的成员,同样,最差的值标识最差的成员。由于在每次迭代中更新了群体的成员和目标函数的值,因此在每次迭代中也更新了最佳成员和最差成员。
    SOA中更新种群成员的过程分为探索和开发两个阶段。探索阶段基于模拟从专家那里学习技能的过程。开发阶段基于通过个人努力和活动模拟技能提高。在SOA设计中,更新过程分为两个阶段进行,目的是在问题解决空间中进行全局搜索,而开发阶段的目的是进行局部搜索。在探索阶段,SOA的设计是为了让SOA成员在不同成员的指导下在搜索空间中移动,并防止其仅向最佳成员的方向移动。这增加了算法在精确扫描搜索空间和识别原始最佳区域方面的探索能力。另一方面,在开发阶段,基于种群中每个成员附近的局部搜索,算法能够收敛到更好的可能解。

    (2)第一阶段:从专家那里获得技能(探索)

    在第一个阶段,每个SOA成员在社区专家成员的指导下努力获得一项技能。每个群体成员的质量与该群体成员获得的目标函数值相称。SOA成员的专家成员是基于目标函数值拥有更好条件的成员。对于每个SOA成员,所有具有比该成员更好的目标函数值的成员都被视为“专家集”。在这个集合的成员中,随机选择一个成员作为专家来训练这个成员。因此,被选来指导SOA成员的专家不一定是最佳的候选解决方案。事实上,对于所有SOA成员来说,最佳候选解决方案是专家集合的永久成员。专家成员通过学习技能使群体成员被引导到搜索空间的不同位置,即算法的全局搜索和探索能力。如果为总体的每个成员计算的新位置改进了目标函数的值,则是可以接受的。因此,更新的第一阶段可以利用式(3)和式(4)根据上面提到的概念建模。 X i P 1 : x i , d P 1 = x i , d + r × ( E i , d − I × x i , d ) ,    E i = X k , w h e r e    F k < F i    a n d    k    i s    r a n d o m l y    s e l e c t e d    f r o m    { 1 , 2 , … , N } ,    k ≠ i (3)

    XiP1:xi,dP1=xi,d+r×(Ei,dI×xi,d),Ei=Xk,whereFk<Fiandkisrandomlyselectedfrom{1,2,,N},ki" role="presentation" style="position: relative;">XiP1:xi,dP1=xi,d+r×(Ei,dI×xi,d),Ei=Xk,whereFk<Fiandkisrandomlyselectedfrom{1,2,,N},ki
    \tag{3} XiP1:xi,dP1=xi,d+r×(Ei,dI×xi,d),Ei=Xk,whereFk<Fiandkisrandomlyselectedfrom{1,2,,N},k=i(3) X i = { X i P 1 ,   F i P 1 < F i X i , e l s e (4) X_i=
    \begin{dcases}X_i^{P1},\quad\, F_i^{P1}<F_i\\[2ex]X_i,\quad\quad else\end{dcases}" role="presentation" style="position: relative;">