帝国竞争算法(imperialist competitive algorithm, ICA )详解+Java代码实现

前言

这段时间用过这个算法做过相关的工作,今天就介绍一下吧。虽然感觉效果嘛,勉勉强强啦。不过每种算法肯定有其适用的地方,用到了就Mark一下方便后人吧~

介绍

帝国竞争算法(imperialist competitive algorithm,ICA)是Atashpaz-Gargari和Lucas于2007年提出的一种基于帝国主义殖民竞争机制的进化算法,属于社会启发的随机优化搜索方法。目前,ICA已被成功应用于多种优化问题中,如调度问题、分类问题和机械设计问题等。[2]

帝国主义竞争算法,借鉴了人类历史上政治社会殖民阶段帝国主义国家之间的竞争、占领、吞并殖民殖民地国家从而成为帝国国家的演化,是一种全局性的优化算法。该算法把所有初始化的个体都称作国家,按照国家势力分成帝国主义国家及殖民地两种,前者优势大于后者。[1]

其实,从另一个角度来看,ICA可以被认为是遗传算法(GA)的社会对应物。ICA是基于人类社会进化的过程,而GA是基于物种的生物进化过程。二者其实有异曲同工之妙。

不过话说回来,大多数群体仿生类算法都有异曲同工之妙~

流程图

学习算法框架,当然先搞懂流程图啦。算法的流程图我就不重新画了,找了一篇文献上的直接挪过来:[1]

整个流程大体如上,可能大家在其他地方看到的有些专有名词可能对不上,但描述的都是一个东西,本质是一样的。我们下面来一步步分析这个过程吧。

算法解析

其实和群体进化类算法还是非常像的,只不过把个体的概念换成了国家而已。我们一步步来看。

1. 初始化

ICA的个体是国家,相当于遗传算法中的染色体,对于一个N维的优化问题,国家可以表示成如下形式:
c o u n t r y = [ p 1 , p 2 , . . . , p N ] country =[p1, p2, ..., pN] country=[p1,p2,...,pN]

国家的势力大小通过代价函数来衡量:
c o s t = f ( c o u n t r y ) = f ( [ p 1 , p 2 , . . . , p N ] ) cost = f (country) = f ([p1, p2, ..., pN]) cost=f(country)=f([p1,p2,...,pN])

国家的势力和代价函数值成反比,即代价函数值越小,国家势力越大。初始帝国的产生分为以下几个步骤:

STEP 1:首先,随机产生$ N_{pop} 个 国 家 , 从 中 选 出 势 力 较 大 的 前 个国家,从中选出势力较大的前 N_{imp} 个 国 家 作 为 帝 国 主 义 国 家 , 剩 下 的 个国家作为帝国主义国家,剩下的 N_{col} $个国家作为殖民地。

STEP 2:其次,根据帝国主义国家的势力大小划分殖民地。每个帝国的殖民地个数按照式(1)~(3)计算:
C n = c n − max ⁡ i { c i } (1) C_{n}=c_{n}-\max _{i}\left\{c_{i}\right\} \tag{1}

  • 13
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值