[源码] MATLAB实现粒子群算法 源代码(附解析)

[复制链接]
joythink89 发表于 2017-9-22 12:08 | 显示全部楼层 |阅读模式
  1. clc;
  2. clear all;
  3. c1 = 1.49445;
  4. c2 = 1.49445;%速度学习因子
  5. max_genxin = 100;%最大迭代次数
  6. size_zhongqun = 20;%种群规模
  7. max_geti = 5;%个体(自变量取值)最大值(位置)
  8. min_geti = -5;
  9. v_max = 1;%速度最大值
  10. v_min = -1;%速度最小值
  11. %%种群初始化
  12. var_num = 2;%适应度函数自变量个数
  13. zhongqun = 5*rand(size_zhongqun,var_num);%初始化粒子
  14. v_zhongqun = rand(size_zhongqun,var_num);%初始化粒子速度
  15. for i = 1:size_zhongqun
  16.    fitness(i) = fun_shiyingdu(zhongqun(i,:)); %计算适应度值
  17. end
  18. %%寻找初始极值
  19. [bestfitness_value, bestfitness_weizhi] = min(fitness);
  20. jizhi_zhongqun = zhongqun(bestfitness_weizhi,:);%群体极值位置
  21. jizhi_geti = zhongqun;%个体极值位置
  22. fitnessbest_geti = fitness;%个体极值适应度值
  23. fitnessbest_group = bestfitness_value;%群体极值适应度值
  24. %%迭代寻优
  25. for i = 1:max_genxin
  26.     for j = 1:size_zhongqun
  27.         %速度更新
  28.         v_zhongqun(j,:) = v_zhongqun(j,:)+c1*rand*(jizhi_geti(j,:)-zhongqun(j,:))+c2*rand*(jizhi_zhongqun-zhongqun(j,:));
  29.         v_zhongqun(j,v_zhongqun(j,:)>v_max) = v_max;
  30.         v_zhongqun(j,v_zhongqun(j,:)<v_min) = v_min;
  31.         %粒子更新
  32.         zhongqun(j,:)  = zhongqun(j,:)+0.5*v_zhongqun(j,:);
  33.         zhongqun(j,zhongqun(j,:) >max_geti) = max_geti;
  34.         zhongqun(j,zhongqun(j,:)< min_geti) = min_geti;
  35.         %粒子适应度值
  36.         fitness(j) = fun_shiyingdu(zhongqun(j,:));
  37.     end
  38.    
  39.     %个体极值和群体极值更新
  40.     for j = 1:size_zhongqun
  41.         %个体极值更新
  42.         if fitness(j) < fitnessbest_geti(j)
  43.             jizhi_geti(j,:) = zhongqun(j,:);
  44.             fitnessbest_geti(j) = fitness(j);
  45.         end
  46.         %群体极值更新
  47.         if fitness(j) < fitnessbest_group
  48.             jizhi_zhongqun = zhongqun(j,:);
  49.             fitnessbest_group = fitness(j);
  50.         end
  51.     end
  52.     %没代最优值记录到yy数组
  53.     yy(i) = fitnessbest_group;
  54. end
  55. %%画出每代最优个体适应度值
  56. plot(yy);
  57. title('最优个体适应度值','fontsize',12);
  58. xlabel('进化次数');
  59. ylabel('适应度值');


  60. %需要在同一个工作区存以下函数文件: fun_shiyingdu.m
  61. function y = fun_shiyingdu(x) %计算适应度值的函数
  62. % x input 粒子的初始位置
  63. % y output
  64. y = -20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+exp(1);

复制代码


粒子群算法.docx

12.79 KB, 下载次数: 8, 下载积分: 军费 -2

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关于我们
关于我们
免责声明
帮助中心
常见问题
意见反馈
论坛规则
加入我们
版主招募
人才招聘
竞赛合作
高校合作
社团加盟
联系我们
客服QQ:249558871
官方微信号:
请在工作日10:00-19:00联系客服
关注微信公众号
快速回复 返回顶部 返回列表