欢迎光临
我的个人博客网站

【优化求解】模拟退火结合粒子群优化算法matlab源码

1 引言

  粒子群算法(Partical Swarm Optimization -PSO)是1995年由Eberhart博士和kennedy 博士共同提出的一种优化算法[1] [2]。它属于群智能算法的一种,和遗传算法相似,它也是从随机解出发,通过迭代寻找最优解,通过适应度来评价解的品质。但是粒子群算法比遗传算法规则更为简单,它没有遗传算法的“交叉”和“变异”操作,它通过追随当前搜索到的最优值来寻找全局最优。这种算法以其实现容易、精度高等优点引起了学术界的重视,并且在解决实际问题中展示了其优越性[3]。

  在标准PSO算法中由于粒子的移动没有选择性,即使粒子的下一个位置的评价函数值很差,粒子依然用这个位置代替当前位置,这就使粒子容易跳出最优解附近的某一邻域,在一定程度上使PSO方法在局部搜索能力上表现较差。因此将粒子群算法与模拟退火算法相结合,利用退火算法在一定概率控制下暂时接受一些劣质解的特性,改善了标准PSO算法的局部寻优能力,并给出了仿真实例,结果证明所提算法具有更好的优化效果。

2 标准粒子群算法

  PSO算法通过个体间的协作与竞争,实现复杂空间中最优解的搜索。PSO先生成初始种群,即在可行解空间中随机初始化一群粒子,每个粒子都为优化问题的一个解,并由目标函数为之确定一个适应值(Fitness Value)。每个粒子将在解空间中运动,并由一个速度决定其方向和距离。通常粒子将追随当前的最优粒子而动,并经逐代搜索,最后得到最优解。

【优化求解】模拟退火结合粒子群优化算法matlab源码【优化求解】模拟退火结合粒子群优化算法matlab源码

【优化求解】模拟退火结合粒子群优化算法matlab源码【优化求解】模拟退火结合粒子群优化算法matlab源码

【优化求解】模拟退火结合粒子群优化算法matlab源码【优化求解】模拟退火结合粒子群优化算法matlab源码

3 模拟退火算法与粒子群算法的结合

  针对上述情况,我们在PSO中引入了模拟退火思想,利用退火算法在一定概率控制下暂时接受一些劣质解的特性改进标准PSO。仿真结果表明,基于模拟退火的粒子群算法能够得到更好的优化效果。

【优化求解】模拟退火结合粒子群优化算法matlab源码【优化求解】模拟退火结合粒子群优化算法matlab源码

  通过对改进后的算法的研究,发现在粒子运动过程中,当粒子下一代位置比当前位置好时,粒子移动到下一代位置;反之,若下一代位置比当前位置差,则粒子并不直接移动到下一代位置,而是以某一概率进行移动,且通过温度 来控制这一概率。这样粒子不会盲目的直接扑向下一代位置,而是以某种概率“试探”后再行动。因此,当温度下降的足够慢时,粒子不会轻易的跳出有“希望”的搜索区域,从而增强了粒子的局部搜索能力。

4 部分代码

function [xm,fv] = SAPSO(fitness,N,c1,c2,wmax,wmin,M,D) format long; %------初始化种群的个体------------  for i=1:N      for j=1:D          x(i,j)=randn;  %随机初始化位置          v(i,j)=randn;  %随机初始化速度      end  end  %------先计算各个粒子的适应度----------------------  for i=1:N      p(i)=fitness(x(i,:));      y(i,:)=x(i,:);  end  pg=x(N,:);             %Pg为全局最优  for i=1:(N-1)      if fitness(x(i,:))<fitness(pg)          pg=x(i,:);      end  end  %------进入主要循环------------  for t=1:M      for j=1:N         fv(j) = fitness(x(j,:));     end     fvag = sum(fv)/N;     fmin = min(fv);     for i=1:N          if fv(i) <= fvag             w = wmin + (fv(i)-fmin)*(wmax-wmin)/(fvag-fmin);         else             w = wmax;         end         v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));          x(i,:)=x(i,:)+v(i,:);          if fitness(x(i,:))<p(i)              p(i)=fitness(x(i,:));              y(i,:)=x(i,:);          end          if p(i)<fitness(pg)              pg=y(i,:);          end      end  end  xm = pg';  fv = fitness(pg);   

【优化求解】模拟退火结合粒子群优化算法matlab源码

【优化求解】模拟退火结合粒子群优化算法matlab源码【优化求解】模拟退火结合粒子群优化算法matlab源码

 

5 结论

  改进的PSO算法通过与模拟退火算法的结合,能够有效地调节全局搜索与局部搜索能力,不容易陷入局部最优,能得到更好的优化效果。粒子群算法与各种优化算法的结合近年来发展很快,但其数学基础比较薄弱,缺乏深刻且具有普遍意义的理论分析,这也是今后需要研究的一个重要方向[9]。

参考文献及代码私信博主

  [1] Kennedy J, Eberhart R C. Particle swarm optimization [A]. Proceedings of IEEE International Conference on Neural Networks [C]. Piscataway, NJ: IEEE Press, 1995.1942-1948.

  [2] Eberhart R C, Kennedy J. A new optimizer using particle swarm theory [A]. Proceeding of the sixth International symposium on micromachine and human science[C]. Piscataway: IEEE Service Center, 1995. 39-43.

  [3] 刘康,余玲.一种仿生优化算法-微粒群算法[J].四川轻化工学院学报, 2003, (3): 9-11.

  [4] Eberhart R C, Simpson P K, Dobbins R W. Computational Intelligence PC Tools [M]. Boston, MA: Academic Press Professional, 1996.

  [5] Shi Y, Eberhart R C. A modified particle swarm optimizer [A]. Proceedings of the IEEE Congress on Evolutionary Computation [C]. Piscataway, NJ: IEEE Press, 1998.303-308.

  [6] Shi Y, Eberhart R C. Empirical study of particle swarm optimization [A]. Proceedings of the IEEE Congress on

【优化求解】模拟退火结合粒子群优化算法matlab源码

 

 

赞(0) 打赏
未经允许不得转载:张拓的天空 » 【优化求解】模拟退火结合粒子群优化算法matlab源码
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专业的IT技术经验分享 更专业 更方便

联系我们本站主机

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏