写在前面

最近需要用帝国竞争算法,百度出来基本千篇一律 Ctrl + C, Ctrl + V. 所以打算自己写一篇。
Reference:

帝国竞争算法

对于一个优化算法,cost function 是用来衡量优化效果的优劣。对于最小化问题,求一个函数的全局最优,cost funcition 越小越好。最大化问题反之。本文的优化目标函数Rastrigin的全局最小值。 Rastringin函数参考百度百科。

Step 1. 制定规则,初始化帝国

制定规则

假设有100个国家,每个国家有一个独特的编号,例如1号国家,2号国家…100号国家这样。每个国家有个cost function: c 1 , c 2 . . . . . c 100 c_1, c_2 .....c_{100} c1,c2.....c100100个国家中,有10个帝国,90个殖民地。

初始化帝国

  • 1.1 让cost function 最小的10个国家作为帝国,其余国家作为这些帝国的殖民地。
  • 1.2 计算帝国之间的相对势力.
    C n = c n − m a x { c i } C_n = c_n - max\{c_i\} Cn=cnmax{ci}
    其中, C n C_n Cn表示n号帝国的相对势力, c n c_n cn 是n号帝国的cost function, m a x { c i } max\{c_i\} max{ci}是所有帝国的cost function 最大值。注意C是大写还是小写
  • 1.3 计算帝国的标准势力:
    P n = ∣ C n ∑ C i ∣ P_n = |\frac{C_n}{\sum{C_i}}| Pn=CiCn
  • 1.4 根据每个帝国的标准势力,计算出每个帝国初始有多少个殖民地
    N . C . n = r o u d { P n ∗ N c o l } N.C.n = roud\{P_n * N_{col}\} N.C.n=roud{PnNcol}
    其中, N . C . n N.C.n N.C.n是n号帝国拥有殖民地的个数。 N c o l N_{col} Ncol是殖民地的总数,制定规则中设置了一共有90个殖民地。
  • 1.5 根据每个帝国的殖民地个数不同,随机分配 N . C . n N.C.n N.C.n个殖民地给该帝国。

Step 2. 同化机制

对于求Rastrigin 函数全局最优问题,就是求一个二维坐标坐标下, x 和 y的值。

同化简单说就是殖民地向领主(帝国)靠近。同化完成过后,重新比对某个帝国的cost function 与其 拥有的殖民地的 cost function,如果某个帝国的cost function 比 被殖民的某个国家还大(最小化优化问题),则两级反转,帝国变殖民地,殖民地变帝国。帝国竞争算法(ICA)详解与python 实现

  • 2.1 殖民地的向帝国移动(靠近。移动的角度和距离如图18.2所示。移动的角度是 θ ∈ U { − γ , γ } \theta \in U\{- \gamma, \gamma\} θU{γ,γ}. U U U表示均匀分布, γ \gamma γ是自定义的参数,通常设置为 π / 10 \pi / 10 π/10。图中 d d d是殖民地坐标和帝国的距离,用初中学过的坐标公式算出。移动距离 x ∈ U { 0 , β ∗ d } x \in U\{0, \beta * d\} xU{0,βd}, β \beta β也是预设的参数,一般小于1。
  • 2.2 重新确定谁是帝国。移动过后,判断是否殖民地cost function 比帝国还小,如果是的,交换两个国家的地位。

Step 3. 竞争机制

竞争靠的是实力。帝国算法竞争步骤需要计算一个帝国的综合势力:帝国自己的势力与全部殖民地的势力的总和。

竞争的对象就是最弱帝国的最弱殖民地。

  • 3.1 计算帝国的总价值
    T . C n = f ( i m p n ) + ζ ∗ ∑ f ( c o l i ) N . C m T.C_n = f(imp_n)+ \zeta * \frac{\sum{f(col_i)}}{N.C_m} T.Cn=f(impn)+ζN.Cmf(coli)

T . C n T.C_n T.Cn是一个帝国的全部总价值, f ( i m p n ) f(imp_n) f(impn)是一个帝国的cost function值。 ζ \zeta ζ是自定义参数,相对于殖民地势力的权重。 f ( c o l i ) f(col_i) f(coli)是i号殖民地的cost function 值。

  • 3.2 将最垃圾帝国的最垃圾殖民地拿出来供全部帝国竞争,这个垃圾殖民地称为猎物国。
  • 3.3 各个帝国获得3.2 中的殖民地概率是
    P n = ∣ N . T . C n ∑ N . T . C i ∣ P_n = |\frac{N.T.C_n}{\sum{N.T.C_i}}| Pn=N.T.CiN.T.Cn
    N . T . C n = T . C n − m a x { T . C i } N.T.C_n = T.C_n - max\{T.C_i\} N.T.Cn=T.Cnmax{T.Ci}
    所有帝国的对猎物国的占有率为 P = [ P 1 , P 2 . . . . . . P N i m p ] P = [P_1, P_2......P_{Nimp}] P=[P1,P2......PNimp],再构造一个与P同维的向量R, R = [ r 1 , r 2 . . . . r N i m p ] R=[r_1, r_2....r_{Nimp}] R=[r1,r2....rNimp], 其中, r ∈ U ( 0 , 1 ) r \in U(0,1) rU(0,1). 各个国家对猎物国的占有率为 D = P − R D = P-R D=PR, 算出来D最大的帝国将会获得该猎物国。

Step 4. 帝国灭亡

当一个帝国没有了殖民地,这个帝国就会灭亡。

代码

相关文章:

  • 2021-08-29
  • 2022-12-23
  • 2021-09-16
  • 2022-12-23
  • 2021-11-20
  • 2021-11-26
  • 2022-02-06
  • 2021-07-07
猜你喜欢
  • 2021-09-16
  • 2021-08-11
  • 2021-12-07
  • 2023-03-05
  • 2021-06-01
  • 2021-09-16
  • 2022-01-21
相关资源
相似解决方案