您好, 访客   登录/注册

解排列优化的整数编码多智能体进化算法

来源:用户上传      作者: 袁志

  摘要:为解排列优化问题,在多智能体进化算法的基础上,提出一种整数编码的多智能体进化算法。重新定义了竞争算子和自学习算子。在网格内,智能体与周围的8个智能体构成竞争域,优胜智能体将编码段植入失败智能体,只有优胜者能获得自学习机会,自学习算子中智能体通过两种编码段换位方式来提升能量。使用本算法在旅行商问题典型数据上进行测试,与现有文献比较,表明该算法具有更好的全局寻优能力而且收敛稳定性更好。
  关键词:排列优化;多智能体进化算法;旅行商问题;进化算法;整数规划
  中图分类号:TP18 文献标识码:A
  
  Number Coding Multi-Agent Evolutionary Algorithm for Deployment Optimization
  YUAN Zhi
  (South-China Institute of Software Engineering, Guangzhou University, Guangzhou 510990, China)
  Abstract: For deployment optimization, Number Coding MAEA named as NC-MAEA is proposed based on Multi-agent Evolutionary Algorithm, the competition operator and learning operator are redefined. In grids, a agent and 8 agents around constitute a competing area, the winner plants it’s codes fragment into failure’s codes series, only winner obtains learning chance, in learning process it swap code fragments in two ways to improve energy. Simulated with the typical test data of in traveling salesman problems, compared with other related literatures, it has been proved that NC-MAEA has better global optimization ability and convergence stability.
  Key Words: deployment optimization; Multi-Agent Evolutionary Algorithm; traveling salesman problem; Evolution Algorithm; integer programming
  
  1.引言
  排列优化问题广泛应用在生产调度、工程规划等方面。不失一般性,排列优化问题可以转换为一个整数规划下的函数极值问题,描述为:
  minZ =F(x1, x2, …, xn) (xi∈N;1≤xi≤n;若i≠j,xi≠xj)minZ =F(x1, x2, …, xn)
  旅行商问题是排列优化问题的典型代表。旅行商问题是个NP完全问题,传统算法中用分支定界法来求解,但当数据规模过大时,会出现“组合爆炸”问题,目前多用智能算法求解[1]。文献[2][3][4]使用0-1编码,通过遗传算法和二进制粒子群算法求解旅行商问题,文献[5]使用整数编码,通过模拟退火粒子群算法来求解旅行商问题,文献[6]使用混合蚂蚁算法来求解旅行商问题。通过分析以上文献的计算结果,发现它们的全局寻优能力和收敛稳定性都有待提高。
  多智能体进化算法(Multi-Agent Evolutionary Algorithm,MAEA)用智能体网格构造进化环境,每个智能体依据目标自我学习以提升能量,并在邻域中参与竞争,竞争失败便被邻域中能量最大的智能体淘汰,不需要全局消息,更接近于自然界进化模式[7]。文献[8]提出了组合优化多智能体进化算法,证明了算法的全局收敛性。但以该算法求解排列优化问题时存在明显不足:采用0-1编码产生大量重复编码段属于非法解,导致大量无效计算;0-1编码使解空间编码规模庞大,迭代运算时间长;以逻辑运算为基础的淘汰算子和学习算子在排列优化问题中难以赋予清晰的自然语义。
  本文提出整数编码的多智能体进化算法(NC-MAEA),在原算法的基础上重新设计竞争算子和自学习算子。在旅行商问题的典型测试数据上进行仿真,实验表明,它的全局寻优能力和收敛稳定性更好。
  2.整数编码的多智能体进化算法
  2.1 智能体网格初始化
  设排列的规模为n,构造一个规模为m×m的智能体网格,每个网格中放置一个的智能体,智能体包含一个学习状态LearnMethod和[1~n]的全排列。LearnMethod有两种取值,初始状态下为1。
  2.2竞争算子
  网格中的每个智能体与其邻域中的智能体竞争。将网格看作一个球面,智能体的竞争域是所有与它距离不超过1的8个智能体。从竞争域中寻找能量最大的智能体Amax,如果Energy(Amax)>Energy(Aij),则执行淘汰算子,用Amax去感染Aij。方法如下:
  从Amax的随机位置取一段随机长度的编码D,插入到Aij的相应位置。删除Aij中与D相同的编码,然后重新排序,保持插入段的位置不变,并将当前智能体的学习状态赋值为1.例如:智能体A1(6 5 |3 2 1| 4 )淘汰A2(2 1 5 6 4 3), |表示随机产生的分割位置,首先将A1中的|3 2 1|放入A2的相应位置,得到(2 1 |3 2 1| 5 6 4 3),删除重复的3,2,1,重新整理编码位置(5 6 3 2 1 4 )。
  2.3自学习算子
  一个竞争域中,只有能量最大的智能体获得学习机会。学习行为通过编码段的移位来试图提升能量。智能体有两种学习方法,当LearnMothod为1时,采用第一种学习方法,当LearnMethod为2时,采用第二种学习方法。只有当第一种学习无法获得更高的能量时,才会转入第二种学习方法。
  第一种学习方法使用遍历的方法来交换两位编码,一旦发现交换后能量得到提高,即终止学习。如果遍历之后仍然无法提升量,则将LearnMethod置为2。
  第二种学习方法的过程:(1)产生一个随机的[1到n]排列P,k置为1;(2)从智能体的P(k)位置开始,选择一段随机长度的编码,将其移动到随机的位置,得到一个新的智能体newAw;(3)如果Energy(newA)>Energy(Aij),则Aij替换为newAw,转步骤4;否则k加1,转到步骤2;(4)LearnMothod置为1,学习结束。
  2.4算法流程
  (1)设定进化代数和网格规模,构造智能体网格;(2)一次群体进化,智能体竞争,如果竞争失败则被优胜智能体感染,优胜的智能体执行学习算子;(3)达到优化目标或进化代数,则输出最优解,结束。
  NC-MAEA算法的基本框架与MAEA相同,可基于文献[7]、[8],证明其时间复杂度为O(na),全局收敛的概率为1。

  3.仿真实验
  在2G主频2G内存的微机上,用MATLAB7.1编程,使用NC-MAEA算法进行仿真。
  3.1 在实数排序问题上的实验
  为了验证算法的收敛性稳定性,用整数排序来实验。对100个随机整数降序排列,易知优化目标为:minF=∑(k*ak)。为了让算法在找到完全降序排列的时候停止,引入函数G=∑ek(当ak


转载注明来源:https://www.xzbu.com/8/view-45574.htm