Hello Mat

 找回密码
 立即注册
查看: 6094|回复: 4

60-免疫粒子群算法的函数寻优分析(MATLAB视频)

[复制链接]

1323

主题

1551

帖子

0

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22647
发表于 2018-7-26 23:09:35 | 显示全部楼层 |阅读模式
免疫粒子群算法的函数寻优分析(MATLAB视频)
百度网盘链接:
链接:https://pan.baidu.com/s/125n5yEDQhulsRpj9qzfx6w
具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,并提交给我,我来设置视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1

  1. % 基于免疫粒子群算法的函数寻优
  2. clc,clear,close all
  3. warning off
  4. tic  % 计时开始
  5. %% AIA算法
  6. nvar = 2;   % 2个未知数
  7. % 取值范围
  8. popmin = [-1, -1];  % Lb
  9. popmax =[ 1, 1];    % Ub
  10. itermax = 30; % 迭代次数
  11. sizepop = 30; % 种群
  12. Ak = -0.01;   % 聚合适应度常数k
  13. lamda = 0.9;  % 相似度常数[0.9,1]
  14. %% PSO 参数
  15. c1 = 1.4995;  
  16. c2 = 1.4995;
  17. Vmin = -1;
  18. Vmax = 1;
  19. %% 初始化种群
  20. for i=1:sizepop
  21.     pop(i,:) = code(popmin,popmax);    % 实数编码
  22.     V(i,1:nvar) = 0;
  23.     fitness(i) = fun(pop(i,:));        % 目标函数值
  24. end
  25. [bestfitness,index] = min(fitness); % 极小值
  26. zbest = pop(index,:);        % 最佳个体
  27. fitnesszbest = bestfitness;  % 全局最优
  28. gbest=pop;                   % 个体最佳
  29. fitnessgbest=fitness;        % 个体最佳适应度值
  30. %% 迭代寻优
  31. for i=1:itermax
  32.     % 选择算子
  33.     pop = select_AIA(sizepop,pop,fitness,popmin,popmax);
  34. %     % 交叉算子
  35. %     pop = cross_AIA(sizepop,pop,popmin,popmax);
  36. %     % 变异
  37. %     pop = mutation_AIA(sizepop,pop,popmin,popmax);
  38.     % 计算相似度
  39.     for j=1:sizepop
  40.         % AIA计算相似度
  41.         AN = 1./( 1+norm( zbest-pop(j,:), 2 ) );
  42.         if(AN>lamda)
  43.             Ci = 1;
  44.         else
  45.             Ci = 0;
  46.         end
  47.         fitness(j) = fun( pop(j,:) ) .* exp( Ak*Ci );   % 计算适应度值
  48.         
  49.         % 速度更新
  50.         V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
  51.         % V范围约束
  52.         V(j,:) = lb_ub(V(j,:), Vmin, Vmax);
  53.         % 个体更新
  54.         newpop = pop(j,:) + 0.5 * V(j,:);
  55.         % pop范围约束
  56.         newpop = lb_ub(newpop, popmin, popmax);
  57.         
  58.         % PSO计算相似度
  59.         AN = 1./( 1+norm( zbest-newpop, 2 ) );
  60.         if(AN>lamda)
  61.             Ci = 1;
  62.         else
  63.             Ci = 0;
  64.         end
  65.         newfitness = fun( newpop ) .* exp( Ak*Ci );   % 计算适应度值
  66.         if newfitness<fitness(j)
  67.             fitness(j) = newfitness;
  68.             pop(j,:)=newpop;
  69.         end
  70.         
  71.         % 交叉算子
  72.         pop1 = cross_AIA2(sizepop,pop,popmin,popmax);
  73.         % AIA计算相似度
  74.         AN = 1./( 1+norm( zbest-pop1, 2 ) );
  75.         if(AN>lamda)
  76.             Ci = 1;
  77.         else
  78.             Ci = 0;
  79.         end
  80.         fitness1 = fun( pop1 ) .* exp( Ak*Ci );   % 计算适应度值
  81.         if fitness1<fitness(j)
  82.             fitness(j) = fitness1;
  83.             pop(j,:)=pop1;
  84.         end
  85.         
  86.         % 变异
  87.         pop2 = mutation_AIA2(sizepop,pop,popmin,popmax);
  88.         % AIA计算相似度
  89.         AN = 1./( 1+norm( zbest-pop2, 2 ) );
  90.         if(AN>lamda)
  91.             Ci = 1;
  92.         else
  93.             Ci = 0;
  94.         end
  95.         fitness2 = fun( pop2 ) .* exp( Ak*Ci );   % 计算适应度值
  96.         if fitness2<fitness(j)
  97.             fitness(j) = fitness2;
  98.             pop(j,:)=pop2;
  99.         end
  100.         
  101.         % 比较  个体间比较
  102.         if fitness(j)<fitnessgbest(j)
  103.             fitnessgbest(j) = fitness(j);
  104.             gbest(j,:) = pop(j,:);
  105.         end
  106.         if fitness(j)<bestfitness
  107.             bestfitness = fitness(j);
  108.             zbest =  pop(j,:);
  109.         end
  110.         
  111.     end
  112.    
  113.     fitness_iter(i) = bestfitness;
  114. end
  115. toc;  % 结束开始
  116. figure,
  117. plot(fitness_iter,'ro-','linewidth',2)
  118. % loglog(fitness_iter,'ro-','linewidth',2)
  119. grid on
  120. axis tight
  121. disp(['最优解   ', num2str(zbest)] )
复制代码



算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

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

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-11-22 21:53 , Processed in 0.226412 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表