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

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

相关文章

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.