写在前面
最近需要用帝国竞争算法,百度出来基本千篇一律 Ctrl + C, Ctrl + V. 所以打算自己写一篇。
Reference:
- 1.帝国竞争算法的研究与改进
- 2.智能优化算法与涌现计算,在狗东可以免费试读
- 3.算法的可视化例子
帝国竞争算法
对于一个优化算法,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.....c100。100个国家中,有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=cn−max{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{Pn∗Ncol}
其中, 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 比 被殖民的某个国家还大(最小化优化问题),则两级反转,帝国变殖民地,殖民地变帝国。
- 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\} x∈U{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.Cm∑f(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.Cn−max{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) r∈U(0,1). 各个国家对猎物国的占有率为 D = P − R D = P-R D=P−R, 算出来D最大的帝国将会获得该猎物国。
Step 4. 帝国灭亡
当一个帝国没有了殖民地,这个帝国就会灭亡。