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

程序猿声
关注

算法解析

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

1. 初始化

ICA的个体是国家,相当于遗传算法中的染色体,对于一个N维的优化问题,国家可以表示成如下形式:

国家的势力大小通过代价函数来衡量:

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

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

STEP 2:其次,根据帝国主义国家的势力大小划分殖民地。每个帝国的殖民地个数按照式(1)~(3)计算:

其中,是第个帝国主义国家的代价函数值。是它的标准化代价。是它的标准化势力大小。 是第个帝国的初始殖民地个数。最后,对于每个帝国主义国家,从个殖民地中随机选择相应的个数分配给它,最终形成初始的个帝国。[2]

不过这里解释一下,一个国家其实可以看成一个解的表示,与遗传中染色体类似。国家的势力通常由该国家所表示的解的好坏决定的。一般可以采用随机或者贪心的方式生成初始国家,然后计算目标函数,计算势力,再划分帝国主义国家和殖民地国即可。

2. 殖民地同化

帝国主义国家为了更好地控制其殖民地国家,将自己的思想模式及文化风俗推广到殖民地国家的过程,称为同化。ICA中通过所有殖民地向其所属帝国主义国家移动来模拟同化过程。[2] 当然这个移动可以看出解在解空间上的移动,与邻域搜索那个移动也有点类似,本质还是解的变换。

一个同化的例子如下,其实跟GA中的交叉很相似:

3. 殖民地革命

殖民地革命是对殖民地进行一定的移动,希望其能更靠近最优解的位置。但通常而言,对于一个社会来讲,不是说有的革命都是成功的有益的。革命也可能导致资源内耗,无法进行有效的社会变革从而降低殖民地的力量(参照苏联)。一个殖民地革命的例子如下(和GA中的变异很像对不对):

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存