智能优化算法:帝国主义竞争算法-附代码

2024-06-18 07:38

本文主要是介绍智能优化算法:帝国主义竞争算法-附代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

智能优化算法:帝国主义竞争算法-附代码

文章目录

  • 智能优化算法:帝国主义竞争算法-附代码
    • 1.算法原理
      • 1.1 帝国集团的初始化
      • 1.2 帝国集团内部调整
      • 1.3 交换帝国和殖民地的位置
      • 1.4 帝国集团竞争
    • 2.算法结果
    • 3.参考文献
    • 4.Matlab代码

摘要:帝国主义竞争算法最初是由 Atashpaz-Gargari and Lucas 于 2007 年在对基于人口数量最优化算法的著作中提出。在算法中, 每一个个体都被定义为一个国家,同时,所有的国家被分类为两类,即帝国主义国家和殖民地。帝国主义国家为最初时人口数量最有优势的国家,而剩下的国家即为殖民地。每个国家的力量被用来指明它的
健康程度。在该算法的反复使用过程中,帝国之间相互竞争以获得尽可能多的殖民地为目的。更有力量的帝国有更高的可能性去占领更多的殖民地,而力量薄弱的帝国将逐渐失去他们的殖民地。当所有的殖民地都被一个帝国占有时,该算法即为结束。在连续函数优化方面帝国主义竞争算法在效率和质量方面超过遗传算法和粒子群优化算法。

1.算法原理

1.1 帝国集团的初始化

在一个 N V A R N_{VAR} NVAR 维的最优化问题中,一个国家即为一个 1 ∗ N V A R 1*N_{VAR} 1NVAR的矩阵。该矩阵定义如下:
c o u n t r y = [ p 1 , p 2 , . . . , p N v a r ] country = [p_1,p_2,...,p_{N_{var}}] country=[p1,p2,...,pNvar]
此处, P i P_i Pi为被优化的变量。这些在国家属性中的变量为浮点数。国家中的每个变量可以被理解为这个国家的社会政治属性。在算法中几时要求我们寻找到最小的成本值。每个国家的成本由变量所组成的函数 f f f决定:
c o s t = f ( c o u n t r y ) = f ( p 1 , p 2 , . . . , p N v a r ) cost = f(country)=f(p_1,p_2,...,p_{N_{var}}) cost=f(country)=f(p1,p2,...,pNvar)
为了开始该最优化算法,必须初始化国家数量 N c o u n t r y N_{country} Ncountry . 我们选择 N i m p N _{imp} Nimp个最优力量的国家来形成帝国集团。剩下的 N c o l N_{col} Ncol个最初国家作为这些帝国集团中的殖民地。
为了形成最初的帝国集团,殖民地依据各帝国的力量情况决定。即:一个帝国集团最初拥有的殖民地数量应直接与其力量所占比例相关。为了能按比例分配殖民地,每个帝国的成本被定义为:
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 n n个帝国的成本。计算了所有帝国的成本后,帝国的相对力量定义为:
p n = ∣ c n ∑ i = 1 N i m p c i ∣ p_n=|\frac{c_n}{\sum_{i=1}^{Nimp}}c_i| pn=i=1Nimpcnci
最初的殖民地的分配依赖于其所属的帝国集团的力量。从而最初的殖民地分配为:
N . C . n = r o u n d { p n . N c o l } N.C._n=round\{p_n.N_{col}\} N.C.n=round{pn.Ncol}
在这里, N . C . n N.C._n N.C.n 为第 n n n 个帝国所拥有的殖民地数量。如图 1 所示的初始化帝国集团,越大的帝国集团拥有更多的殖民地数量,同时,弱小的集团拥有较少的殖民地。在该图中,帝国 1 组成最有力量的帝国集团,于是它拥有最多的殖民地数量。

在这里插入图片描述

图1.初始化帝国集团:帝国拥有的殖民地越多,它所代表的五角星越大

1.2 帝国集团内部调整

为了实现吸收壮大的目的,帝国试图去吸收它们的殖民地并使其成为帝国的一部分。更准确的说,殖民地沿着坐标轴向着帝国移动。移动过程如图 2 所示。考虑一个二维最优化问题,殖民地在由文化和语言组成的坐标轴中被帝国吸收。殖民地将会不断地向帝国移动,最终将使殖民地完全被帝国吸收。
在这里插入图片描述

图2.殖民地向其相关帝国的移动

在图 2 中, x x x 为一个服从均匀分布的随机数 x ∼ U ( 0 , β × d ) x\sim U(0, β×d) xU(0,β×d), 在这里 $β 为 比 1 大 的 数 , 同 时 为比 1 大的数,同时 1d 为 殖 民 地 与 帝 国 的 距 离 。 为殖民地与帝国的距离。 b>1$将使殖民地从两边都离帝国更近。帝国对殖民地的吸收并不直接导致殖民地向帝国的移动。即是说,殖民地并不一定依照向量所示方向向帝国移动。为了更好模型化这个事实,引入一个随机的角度作为移动的方向。

革命是指在力量和组织结构的基础方面在相对短时间内发生变化。在 ICA 的术语中,革命使一个国家的社会政治特征突然产生变化。即是说,与帝国的吸收不同,殖民地是随机的在社会政治坐标轴中突然发生位置上的改变。图 2 和图 3 是在文化语言坐标轴中的革命过程。这种革命增加了该算法的搜索过程同时组织了国家形成早期的局部收敛。算法中的革命率显示的是每个殖民地随机改变它们位置的比例。一个较高的革命率会降低算法的搜索效果并降低收敛率。在我们的应用中,我们将革命率设定为 0.3. 即是指帝国集团中有 30% 的殖民地会随机改变它们的位置。

在这里插入图片描述

图3 一个国家社会政治特征的突然改变

1.3 交换帝国和殖民地的位置

当殖民地向帝国移动的过程中,殖民地可能会到达一个成本比帝国要低的点。在这种情况下,帝国和殖民地即交换它们的位置。而后,算法将由在新位置的帝国吸收新位置的殖民地过程继续下去。如图 4 所示为帝国和殖民地交换位置的过程。在改图中,最好的殖民地由深色表示,该殖民地比其帝国的成本要小。如图 5 所示为殖民地和帝国交换位置后的状态。
在这里插入图片描述

图4 交换殖民地和帝国的位置

在这里插入图片描述

图5 交换位置后的帝国和殖民地的状态

在殖民地和帝国向着目标最小值移动的过程中,一些帝国可能会移动到相似的位置,如果两帝国之间的位置要小于初始位置,它们将会合并为一个新的帝国集团。原帝国集团的殖民地将会成为新帝国集团的殖民地,同时新帝国的位置将由原帝国中二者之一的位置所决定。图 6 和图 7显示的合并过程。
在这里插入图片描述

图6 合并前的帝国集团

在这里插入图片描述

图7 两帝国合并后的状态

1.4 帝国集团竞争

一个帝国集团的总力量主要由它的帝国力量所决定。可是殖民地的力量也对帝国集团的力量有影响。一个帝国集团的总成本由下式所决定:
T . C . = C o s t ( i m p r i a l i s t n ) + ξ m e a n { C o s t ( c o l o n i e s o f e m p i r e n ) } T.C.=Cost(imprialist_n)+\xi mean\{Cost(coloniesofempire_n)\} T.C.=Cost(imprialistn)+ξmean{Cost(coloniesofempiren)}
此处, T . C . T.C. T.C. 为第 n n n 个帝国集团的总成本。 ξ ξ ξ 为一个较小的正数。 ξ ξ ξ 越大会使殖民地对帝国集团的影响越大。在大部分的情况下 ξ ξ ξ 取 0.1 被认为是最好的。

每个帝国集团都试图占领并控制其他帝国集团的殖民地。帝国竞争过程中,强国将更强,弱国将更弱。帝国竞争一般先选出最弱帝国集团,并使其他帝国集团竞争去占领该集团。图 8显示帝国竞争。在这个过程中,基于各自的力量,每个集团都有占领最弱集团的可能性。从另一个方面来说,最弱国不一定确定被最强国家占领,但是越强的集团占领弱集团的可能性越大。

在这里插入图片描述

图8 帝国竞争:帝国越有力量,越有可能占领最弱帝国集团的殖民地

为了开始这个竞争过程,首先最弱的帝国集团的一个殖民地将被选出来,并确定每个国家占领的可能性。占领可能性 P p P_p Pp 依据帝国集团的总力量所决定:
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.C.n=T.C.nmax{T.C.i}
此处, T . C . n T.C.n T.C.n N . C . n N.C.n N.C.n 为第 n n n 个帝国集团的总成本和相对成本。依据相对成本,每个帝国的占领可能性由下式决定:
P p n = ∣ N . T . C . n ∑ i = 1 N i m p N . T . C . i ∣ P_{pn}=|\frac{N.T.C.n}{\sum_{i=1}^{Nimp}}N.T.C.i| Ppn=i=1NimpN.T.C.nN.T.C.i
为了将在帝国集团中将上述的殖民地分类,我们引入如下向量 P P P
P = [ P p 1 , P p 2 , P p 3 , . . . , P p N i m p ] P=[P_{p1},P_{p2},P_{p3},...,P_{pNimp}] P=[Pp1,Pp2,Pp3,...,PpNimp]
向量 R R R 是与向量 P P P 具有相同规格的向量,其元素服从均匀分布:
R = [ r 1 , r 2 , . . . , r N i m p ] , r 1 , r 2 , . . . , r N i m p ∼ U ( 0 , 1 ) R=[r_1,r_2,...,r_{Nimp}],r1,r2,...,r_{Nimp}\sim U(0,1) R=[r1,r2,...,rNimp],r1,r2,...,rNimpU(0,1)
向量 D D D 由向量 P P P 减去向量 R R R 所得:
D = P − R = [ p p 1 − r 1 , . . . , p p N i m p − r N i m p ] D = P-R = [p_{p1}-r1,...,p_{p_{Nimp}}-r_{Nimp}] D=PR=[pp1r1,...,ppNimprNimp]
向量 D D D 中元素值最大的对应帝国集团即会占领上述的殖民地。这样选择帝国集团的过程与遗传算法中选择母类的轮盘赌过程相似。但是这里的选择方法比相关的轮盘赌过程要快。因为这个过程并不需要
计算累积分布函数,并且选择过程仅仅基于可能性的值。因此,帝国集团的选择过程可以完全替换遗传算法中的轮盘赌,并增加执行速度。上述步骤将会持续下去直至实现国家收敛并且达到成本最小的目标。不同标准可用来结束该算法。一种思想是设定最大迭代次数。或者当仅剩一个帝国集团时即结束该算法。

帝国主义算法流程描述如下:
1)初始化帝国主义竞争算法的参数: N p o p N_{pop} Npop , N i m p N_{imp} Nimp
2)随机生成 N p o p N_{pop} Npop 作为国家的人口数量。选择 N i m p N_{imp} Nimp 最好的国家作为帝国并根据他们的能力规定他们的殖民地数量;

3)如果终止条件未得到满足,则重复下列步骤;
4)内部位置交换;
5)帝国主义竞争;
6)淘汰弱小的帝国;
7)保留最终剩余的帝国,其适应度取值作为
最优解。

流程图如图所示:
在这里插入图片描述

2.算法结果

在这里插入图片描述

3.参考文献

[1] Esmaeil Atashpaz-Gargari,Caro Lucas.ImperialistCompetitive Algorithm: An Algorithm for OptimizationInspired by Imperialistic Competition 1-4244-1340-0/07_c 2007 IEEE.

[2]陈志楚,李聪,张超勇.基于帝国主义竞争算法的切削参数优化[J].制造业自动化,2012,34(24):10-15.

4.Matlab代码

个人资料介绍

这篇关于智能优化算法:帝国主义竞争算法-附代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1071679

相关文章

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、

Java 压缩包解压实现代码

《Java压缩包解压实现代码》Java标准库(JavaSE)提供了对ZIP格式的原生支持,通过java.util.zip包中的类来实现压缩和解压功能,本文将重点介绍如何使用Java来解压ZIP或RA... 目录一、解压压缩包1.zip解压代码实现:2.rar解压代码实现:3.调用解压方法:二、注意事项三、总

Linux实现简易版Shell的代码详解

《Linux实现简易版Shell的代码详解》本篇文章,我们将一起踏上一段有趣的旅程,仿照CentOS–Bash的工作流程,实现一个功能虽然简单,但足以让你深刻理解Shell工作原理的迷你Sh... 目录一、程序流程分析二、代码实现1. 打印命令行提示符2. 获取用户输入的命令行3. 命令行解析4. 执行命令

利用Python实现Excel文件智能合并工具

《利用Python实现Excel文件智能合并工具》有时候,我们需要将多个Excel文件按照特定顺序合并成一个文件,这样可以更方便地进行后续的数据处理和分析,下面我们看看如何使用Python实现Exce... 目录运行结果为什么需要这个工具技术实现工具的核心功能代码解析使用示例工具优化与扩展有时候,我们需要将

SQL Server身份验证模式步骤和示例代码

《SQLServer身份验证模式步骤和示例代码》SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证,本文将详细介绍身份... 目录身份验证方式的概念更改身份验证方式的步骤方法一:使用SQL Server Management S

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动

利用Python实现可回滚方案的示例代码

《利用Python实现可回滚方案的示例代码》很多项目翻车不是因为不会做,而是走错了方向却没法回头,技术选型失败的风险我们都清楚,但真正能提前规划“回滚方案”的人不多,本文从实际项目出发,教你如何用Py... 目录描述题解答案(核心思路)题解代码分析第一步:抽象缓存接口第二步:实现两个版本第三步:根据 Fea