写在前面

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

  • 1.帝国竞争算法的研究与改进
  • 2.智能优化算法与涌现计算,在狗东可以免费试读
  • 3.算法的可视化例子

帝国竞争算法

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

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

制定规则

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

初始化帝国

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

Step 2. 同化机制

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

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

  • 2.1 殖民地的向帝国移动(靠近。移动的角度和距离如图18.2所示。移动的角度是θ∈U{−γ,γ}\theta \in U\{- \gamma, \gamma\}θ∈U{−γ,γ}. UUU表示均匀分布,γ\gammaγ是自定义的参数,通常设置为π/10\pi / 10π/10。图中ddd是殖民地坐标和帝国的距离,用初中学过的坐标公式算出。移动距离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.Cn=f(impn)+ζ∗∑f(coli)N.CmT.C_n = f(imp_n)+ \zeta * \frac{\sum{f(col_i)}}{N.C_m}T.Cn​=f(impn​)+ζ∗N.Cm​∑f(coli​)​

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

  • 3.2 将最垃圾帝国的最垃圾殖民地拿出来供全部帝国竞争,这个垃圾殖民地称为猎物国。
  • 3.3 各个帝国获得3.2 中的殖民地概率是
    Pn=∣N.T.Cn∑N.T.Ci∣P_n = |\frac{N.T.C_n}{\sum{N.T.C_i}}|Pn​=∣∑N.T.Ci​N.T.Cn​​∣
    N.T.Cn=T.Cn−max{T.Ci}N.T.C_n = T.C_n - max\{T.C_i\}N.T.Cn​=T.Cn​−max{T.Ci​}
    所有帝国的对猎物国的占有率为P=[P1,P2......PNimp]P = [P_1, P_2......P_{Nimp}]P=[P1​,P2​......PNimp​],再构造一个与P同维的向量R,R=[r1,r2....rNimp]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−RD = P-RD=P−R, 算出来D最大的帝国将会获得该猎物国。

Step 4. 帝国灭亡

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

代码

帝国竞争算法(ICA)详解与python 实现相关推荐

  1. 快速对帝国竞争算法ICA的了解

    帝国竞争算法ICA 帝国竞争算法通过模拟帝国主义殖民竞争机制而建立其数学模型,本质上是基于群体的随机优化搜索方法. 算法流程图: 1. 初始化帝国 对于一个N维的优化问题,国家可以表示成如下形式: 国 ...

  2. 帝国竞争算法(ICA)(Matlab代码实现)

    目录 1 帝国竞争算法(ICA) 2 运行结果 3 参考文献 4 Matlab代码实现 1 帝国竞争算法(ICA) 帝国竞争算法(ICA)是2007年]提出,具

  3. Xgboost算法原理详解及python实现

    Xgboost算法(回归树) 1.算法原理 2.对数据的要求(无需规范化) 3.算法的优缺点 4.XGB.GBDT.LR与RF 5.python代码实现 导入相关包 读取数据并预处理 训练 贝叶斯初步 ...

  4. KNN算法原理详解及python代码实现

    KNN算法 算法原理 对数据的要求 算法的优缺点 算法需要注意的点 算法实现(python) 算法原理 计算待测样本与train_data的距离d并保存数组中 对d进行排序,取d最近的k个样本 统计样 ...

  5. pythonsort函数时间复杂度_合并排序算法——时间复杂度详解和python代码实现

    递归形式 递归形式是算法中常用到的一种构造思路.递归允许函数或过程对自身进行调用,是对算法中重复过程的高度概括,从本质层面进行刻画,避免算法书写中过多的嵌套循环和分支语法.因此,是对算法结构很大的简化 ...

  6. 蚁群算法(详解)python

    only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays ...

  7. SVM算法原理详解及python实现

    SVM算法 算法原理 对数据的要求 算法的优缺点 算法需要注意的点 算法实现(python)(待更.........) 算法原理 {wTx+b>0yi=1⟺y(xi)>0wTx+b< ...

  8. Dijkstra 路径规划算法原理详解及 Python 代码实现

    荷兰数学家 E.W.Dijkstra 于 1959 年提出了 Dijkstra 算法,它是一种适用于 非负权值 网络的 单源最短路径算法,同时也是目前求解最短路径问题的理论上最完备.应用最广的经典算法 ...

  9. 感知器算法原理详解及python实现

    感知器算法PLA 感知器算法是对一种分类学习机模型的称呼,属于有关机器学习的仿生学领域中的问题,由于无法实现非线性分类而下马.但"赏罚概念(reward-punishment concept ...

最新文章

  1. 浅析 SpringMVC 中返回对象的循环引用问题
  2. 本机发邮件测试mail函数
  3. 《毅力–如何培养自律的习惯》读书笔记
  4. Mariadb学习总结(十二):复合语句和流程控制
  5. 第五周博客作业西北师范大学|李晓婷
  6. AcWing 101. 最高的牛
  7. c语言图像处理毕业设计,基于matlab数字图像处理毕业设计论文.doc
  8. 第6篇 熊猫烧香专杀工具编写
  9. Java处理图片和视频文件——视频抽帧与图片压缩
  10. Flutter圆形图片
  11. 计算机远程桌面修复,大师教您Win10远程桌面连接的修复手段
  12. 成功解决微信跳转到手机默认浏览器下载
  13. 【数据分析】电商平台订单报表分析思路及案例
  14. python画图方法_python画图的两种方法
  15. 安装telnet macOS High Sierra 10.13
  16. Spring注解开发配置
  17. vivoX30是android5的吗,深度剖析揭秘opporeno5质量和vivox30区别是?选哪个更好?独家揭秘报道...
  18. 带你白嫖程序带宽限制命令Trickle
  19. 数据库开发-8-并发处理
  20. 用Python实现文本内容生成二维码

热门文章

  1. 图文并茂详细教程之-- 用pixhawk飞控组装一台F450四轴无人机(下)
  2. 【C语言】总体脉络-知识框架
  3. Oracle基础之保留字和关键字
  4. Android Telephony 9.0通话挂断连接处理机制(opt/Telephony)
  5. 小Y看浮屠世界-纸杯世界:含有荧光增白剂的爆米花桶只是冰山一角
  6. java字符转成ncr_用Java打印所有可能的nCr组合
  7. NCR介绍演示2021-10-02
  8. java-集合-set(不重复集合)知识分解——庖丁解牛版
  9. GPS-BEIDOU-GLONASS-GALILEO
  10. Qt输出缓冲区大小设置