请选择 进入手机版 | 继续访问电脑版

Hello Mat

 找回密码
 立即注册
查看: 6886|回复: 5

57改进的人工蜂群算法(自适应柯西变异的人工蜂群算法)的函数优化

[复制链接]

1294

主题

1520

帖子

110

金钱

管理员

Rank: 9Rank: 9Rank: 9

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

  1. % 自适应柯西分布的人工蜂群算法函数寻优
  2. % Improved - ABC算法
  3. clc,clear,close all
  4. warning off
  5. format longG
  6. %*************** 待优化求解函数 **************
  7. % fun=@Ackley_Fun;
  8. fun=@Griewank_Fun;
  9. % fun=@Rastrigin_Fun;
  10. % fun=@Shaffer_Fun;
  11. %*********** 函数在(0,0)处有极小值0 ***********

  12. % ABC 参数初始化
  13. maxiter = 100;  % 迭代次数
  14. sizepop = 50;   % 种群数量
  15. popmin1 = -1;  popmax1 = 1; % x1
  16. popmin2 = -1;  popmax2 = 1; % x2
  17. trail(1:sizepop,1) = 0;     % 未找到更优解的迭代次数
  18. limit = sizepop;            % 拖尾最大次数
  19. wmin = 0.25;
  20. wmax = 0.75;
  21. %% 初始化种群
  22. for i=1:sizepop
  23.     x1 = popmin1+(popmax1-popmin1)*rand;
  24.     x2 = popmin2+(popmax2-popmin2)*rand;
  25.     pop(i,:) = [x1, x2];
  26.     fitness(i) = fun([x1,x2]);  % 适应度函数值--目标函数值--最小目标函数值
  27. end

  28. % 记录一组最优值
  29. [bestfitness,bestindex]=min(fitness);
  30. zbest=pop(bestindex,:);   %全局最佳
  31. fitnesszbest=bestfitness; %全局最佳适应度值

  32. %% 迭代寻优
  33. for i=1:maxiter
  34.    
  35.     % 采蜜峰开始工作
  36.     for j=1:sizepop
  37.         
  38.         % 自适应权重
  39.         w = wmin+(wmax-wmin)*( fitness(j)-min(fitness) ) ./ (mean(fitness)-min(fitness)+eps);
  40.         
  41.         % 选择采蜜的个体
  42.         x2y = randi(2);   % 两个未知数
  43.         % 选择相连的种群
  44.         neighbour = randi(sizepop);  
  45.         % neighbour != j
  46.         while( neighbour==j  )
  47.             neighbour = randi(sizepop);
  48.         end
  49.         
  50.         % 种群更新(解)
  51.         tempx = pop(j,:);  % 当前的解
  52.         tempx(x2y) = pop(j,x2y) + (pop(j,x2y)-pop(neighbour,x2y))*(rand-0.5)*w;
  53.         
  54.         % x1  越界限制
  55.         if tempx(1)>popmax1
  56.             tempx(1)=popmax1;
  57.         end
  58.         if tempx(1)<popmin1
  59.             tempx(1)=popmin1;
  60.         end
  61.         % x2  越界限制
  62.         if tempx(2)>popmax2
  63.             tempx(2)=popmax2;
  64.         end
  65.         if tempx(2)<popmin2
  66.             tempx(2)=popmin2;
  67.         end
  68.         
  69.         % 适应度更新
  70.         temp_fitness = fun( tempx );  % 当前的适应度函数值--目标函数值--最小目标函数值
  71.         % 比较  个体间比较
  72.         if temp_fitness<fitness(j)
  73.             fitness(j) = temp_fitness;
  74.             pop(j,:) = tempx;
  75.         end
  76.         if temp_fitness<bestfitness
  77.             bestfitness = temp_fitness;
  78.             zbest =  tempx;
  79.         end
  80.     end
  81.    
  82.     % 观察峰
  83.     % 计算概率
  84.     prob = 0.9*fitness./max(fitness) + 0.1;
  85.     for j=1:sizepop
  86.         if(rand<prob(j))
  87.             
  88.             % 自适应权重
  89.             w = wmin+(wmax-wmin)*( fitness(j)-min(fitness) ) ./ (mean(fitness)-min(fitness)+eps);

  90.             % 选择采蜜的个体
  91.             x2y = randi(2);   % 两个未知数
  92.             % 选择相连的种群
  93.             neighbour = randi(sizepop);  
  94.             % neighbour != j
  95.             while( neighbour==j  )
  96.                 neighbour = randi(sizepop);
  97.             end

  98.             % 种群更新(解)
  99.             tempx = pop(j,:);  % 当前的解
  100.             tempx(x2y) = pop(j,x2y) + (pop(j,x2y)-pop(neighbour,x2y))*(rand-0.5)*w;

  101.             % x1  越界限制
  102.             if tempx(1)>popmax1
  103.                 tempx(1)=popmax1;
  104.             end
  105.             if tempx(1)<popmin1
  106.                 tempx(1)=popmin1;
  107.             end
  108.             % x2  越界限制
  109.             if tempx(2)>popmax2
  110.                 tempx(2)=popmax2;
  111.             end
  112.             if tempx(2)<popmin2
  113.                 tempx(2)=popmin2;
  114.             end

  115.             % 适应度更新
  116.             temp_fitness = fun( tempx );  % 当前的适应度函数值--目标函数值--最小目标函数值
  117.             % 比较  个体间比较
  118.             if temp_fitness<fitness(j)
  119.                 fitness(j) = temp_fitness;
  120.                 pop(j,:) = tempx;
  121.             end
  122.             if temp_fitness<bestfitness
  123.                 bestfitness = temp_fitness;
  124.                 zbest =  tempx;
  125.             else
  126.                 trail(j) = trail(j)+1;
  127.             end
  128.         end
  129.     end
  130.    
  131.     % 侦察峰开始工作
  132.     [maxTrial, index] = max(trail);
  133.     index = index(1);
  134.     if(maxTrial(1)>limit)
  135.         x1 = popmin1+(popmax1-popmin1)* cauchypdf( rand );
  136.         x2 = popmin2+(popmax2-popmin2)* cauchypdf( rand );
  137.         pop(index,:) = [x1, x2];
  138.         fitness(index) = fun([x1,x2]);  % 适应度函数值--目标函数值--最小目标函数值
  139.     end
  140.    
  141.     fitness_iter(i) = bestfitness;
  142. end
  143. %% 结果显示
  144. disp('最优解')
  145. disp(zbest)
  146. fprintf('\n')
  147. disp(['最优解对应的适应度值:', num2str(min(fitness_iter))])

  148. figure('color',[1,1,1])
  149. plot(fitness_iter,'ro-','linewidth',2)
复制代码



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

使用道具 举报

0

主题

23

帖子

0

金钱

注册会员

Rank: 2

积分
92
发表于 2023-8-15 11:21:21 | 显示全部楼层
楼主很优秀
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-18 16:04 , Processed in 0.243612 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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