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

Hello Mat

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 698|回复: 5

64-鸽群算法PIO算法优化的蝙蝠算法

[复制链接]

691

主题

813

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
29493
发表于 2019-2-27 22:47:17 | 显示全部楼层 |阅读模式
百度网盘链接:
链接:https://pan.baidu.com/s/1UVCDcVFTqu0zC0lNYfdQLQ

具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,并提交给我,我来设置视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1

程序如下:
  1. clc,clear,close all
  2. warning off
  3. % PIO算法
  4. R = 0.3;           % 地磁场参数parameters of magnetic field
  5. T1=50;           % Global search algebra,迭代次数
  6. T2=1000;           % Local search algebra,迭代次数
  7. % BA算法参数
  8. % maxiter = 10;  % 迭代次数
  9. sizepop = 10;         % 蝙蝠种群数量
  10. pigeonnum=sizepop;    % 鸽子种群数量
  11. % 频率范围
  12. popmin = [-1,-1];  % x下限  
  13. popmax = [1, 1];   % x上限
  14. Qmin = 0.1;    % 最小频率
  15. Qmax = 0.75;    % 最大频率
  16. nvar = 2;      % 未知量个数
  17. A = 0.1;          % 音量 (不变或者减小)
  18. impluse = 0.65;   % 脉冲率 (不变或增加)

  19. Vmin = -1; % 最小速度
  20. Vmax = 1;  % 最大速度
  21. %% 初始化种群
  22. for i=1:pigeonnum
  23.     x1 = popmin(1) + (popmax(1)-popmin(1))*rand;
  24.     x2 = popmin(2) + (popmax(2)-popmin(2))*rand;
  25.     pop(i,1) = x1;
  26.     pop(i,2) = x2;
  27.     fitness(i) = fun([x1,x2]);
  28.     v(i,1)=rand;
  29.     v(i,2)=rand;
  30. end
  31. clear x1 x2
  32. % 记录一组最优值
  33. [bestfitness,bestindex]=min(fitness);
  34. zbest=pop(bestindex,:);   % 全局最佳
  35. gbest=pop;                % 个体最佳
  36. fitnessgbest=fitness;     % 个体最佳适应度值
  37. fitnesszbest=bestfitness; % 全局最佳适应度值
  38. %% 地图和指南针算子 magnetic compass and solar operator
  39. for t=1:T1  % 迭代次数
  40.     for i=1:pigeonnum
  41.         v(i,:)=v(i,:)*(1-exp(-R*t))+rand*(gbest(i,:)-pop(i,:));
  42.         pop(i,:)=pop(i,:)+v(i,:);   %check whether beyond the searching space
  43.         for j=1:nvar
  44.             if abs(i-1)<=eps
  45.                 if pop(i,j)<popmin(j)||pop(i,j)>popmax(j)
  46.                     pop(i,j)=popmin(j)+rand*(popmax(j)-popmin(j));
  47.                     pop(i,j)=rand;
  48.                 end
  49.             else
  50.                 if pop(i,j)<popmin(j)||pop(i,j)>popmax(j)
  51.                     pop(i,j)=pop(i-1,j);
  52.                     v(i,j)=v(i-1,j);
  53.                 end   
  54.             end
  55.         end
  56.         fitness(i) = fun( pop(i,:)  );   % 适应度函数
  57.         % 比较  个体间比较
  58.         if fitness(i)<fitnessgbest(i)
  59.             fitnessgbest(i) = fitness(i);
  60.             gbest(i,:) = pop(i,:);
  61.         end
  62.         if fitness(i)<bestfitness
  63.             bestfitness = fitness(i);
  64.             zbest =  pop(i,:);
  65.         end
  66.     end
  67. %     fitness_iter(t) = bestfitness;
  68. end
  69. pop = gbest;                % 个体最佳
  70. fitness = fitnessgbest;     %个体最佳适应度值
  71. %% 迭代寻优, BA算法
  72. for i=1:T2
  73.     for j=1:sizepop
  74.         Q = Qmin + (Qmax-Qmin)*rand;
  75.         v(j,:) = v(j,:) + (pop(j,:)-zbest)*Q;
  76.         % V--范围约束
  77.         v(j, find(v(j,:)<Vmin))=Vmin;
  78.         v(j, find(v(j,:)>Vmax))=Vmax;
  79.         
  80.         pop(j,:) = pop(j,:) + 0.5*v(j,:);
  81.         
  82.         % 脉冲率
  83.         if rand>impluse
  84.             pop(j,:) = zbest + A * randn(1,nvar);
  85.         end
  86.         
  87.         % x1  越界限制
  88.         for k=1:nvar
  89.             if pop(j,k)>popmax(k)
  90.                 pop(j,k)=popmax(k);
  91.             end
  92.             if pop(j,k)<popmin(k)
  93.                 pop(j,k)=popmin(k);
  94.             end
  95.         end
  96.         
  97.         % 适应度更新
  98.         fitness(j) = fun(pop(j,:));
  99.         
  100.         % 比较  个体间比较
  101.         if fitness(j)<fitnessgbest(j)
  102.             fitnessgbest(j) = fitness(j);
  103.             gbest(j,:) = pop(j,:);
  104.         end
  105.         if fitness(j)<bestfitness
  106.             bestfitness = fitness(j);
  107.             zbest =  pop(j,:);
  108.         end
  109.         
  110.     end
  111.     fitness_iter(i) = bestfitness;
  112. end

  113. disp('最优解')
  114. disp(zbest)
  115. fprintf('\n')

  116. figure('color',[1,1,1])
  117. plot(fitness_iter,'ro-','linewidth',2)

  118. figure('color',[1,1,1])
  119. loglog(fitness_iter,'ro-','linewidth',2)
  120. axis tight
复制代码






程序:算法QQ  3283892722
群智能算法视频:X元,链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

0

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
发表于 2019-3-1 14:37:34 | 显示全部楼层
111111111111111111111111111
回复 支持 反对

使用道具 举报

0

主题

11

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2019-3-3 16:35:10 | 显示全部楼层
本帖最后由 183731577 于 2019-3-13 11:16 编辑

66666666666666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

0

主题

4

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2019-3-19 09:23:57 | 显示全部楼层
代码现身11111111111
回复 支持 反对

使用道具 举报

0

主题

4

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2019-3-19 09:39:53 | 显示全部楼层
查看代码111111111111111111111
回复 支持 反对

使用道具 举报

0

主题

8

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2019-4-24 11:20:59 | 显示全部楼层
感谢楼主,学习学习
回复 支持 反对

使用道具 举报

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

本版积分规则


Python|Opencv|MATLAB|Halcom.cn  

GMT+8, 2019-6-17 08:57 , Processed in 0.186805 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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