Hello Mat

 找回密码
 立即注册
查看: 8243|回复: 8

1-BFO算法(细菌觅食算法)的栅格路径寻优计算

[复制链接]

1294

主题

1520

帖子

110

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22633
发表于 2018-4-7 11:58:04 | 显示全部楼层 |阅读模式
1-BFO算法(细菌觅食算法)的栅格路径寻优计算
链接:https://pan.baidu.com/s/1LHSw6LmdT9moI6xY83EzOQ 密码:q954

具体链接在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. %% MAP
  4. load('data2.mat');
  5. K = 4;             % 与节点自身相连的节点数
  6. [x,y,A,dij, citynum,a,b] = init_map(data2,K);
  7. %% 目标
  8. startpoint=39;  % 起始节点
  9. endpoint=18;    % 终止节点
  10. %% BFO优化算法 参数
  11. % maxiter = 100;             % 最大迭代次数
  12. sizepop = 20;              % 种群数量
  13. Nc = 20;                   % 趋化次数
  14. Ns = 4;                    % 游动次数
  15. C(:,1) = 1*ones(sizepop,1);            % 翻转选定方向后,单个细菌前进的步长
  16. Nre = 2;                   % 复制次数
  17. Ned = 2;                   % 驱散(迁移)次数
  18. Sr = ceil( sizepop/2 );    % 复制(分裂)次数
  19. Ped = 0.25;                % 细菌驱散(迁移)概率
  20. d_attract = 0.05;          % 吸引剂的数量
  21. w_attract = 0.05;          % 吸引剂的释放速度
  22. h_repellant = 0.05;        % 排斥剂的数量
  23. w_repellant = 0.05;        % 排斥剂的释放速度
  24. ww = 0.0;                  % 适应度增量因子

  25. nvar = 3;   % 3个未知量 --- 起始节点到目标节点之间找3个点出来
  26. popmin1 = 1;  popmax1 = 51; % x1
  27. popmin2 = 1;  popmax2 = 51; % x2
  28. popmin3 = 1;  popmax3 = 51; % x3
  29. Cmin = -5;  % 最小步长
  30. Cmax = 5;   % 最大步长
  31. %% 初始化种群
  32. for i=1:sizepop
  33.     x1 = round(popmin1 + (popmax1-popmin1)*rand);
  34.     x2 = round(popmin2 + (popmax2-popmin2)*rand);
  35.     x3 = round(popmin3 + (popmax3-popmin3)*rand);
  36.    
  37.     pop(i,1) = x1;                     % 初始化个体
  38.     pop(i,2) = x2;                     % 初始化个体
  39.     pop(i,3) = x3;                     % 初始化个体
  40.    
  41.     [path{i}, fitness(i)] = fun_dijstra([startpoint, x1,x2, x3, endpoint], A, dij );     % 适应度值
  42.     C(i,1) = Cmin + (Cmax-Cmin)*rand;  % 步长
  43. end
  44. clear x1 x2 x3
  45. %% 记录一组最优值
  46. [bestfitness,bestindex]=min(fitness);
  47. zbest=pop(bestindex,:);   % 全局最佳
  48. fitnesszbest=bestfitness; % 全局最佳适应度值
  49. NcSizepop = 0;            % 记录最优适应度值(函数值)
  50. zbestpath = path{bestindex};   % 最优路径
  51. %% 迭代寻优
  52. for i = 1:Ned                   % 驱散(迁移)次数
  53.     for k = 1:Nre               % 复制次数
  54.         
  55.         for m = 1:Nc            % 趋化次数
  56.             for j=1:sizepop     % 种群
  57.                 % Jcc计算
  58.                 Jcc = sum( -d_attract*exp( w_attract*sum(pop(j,1)-pop(:,1).^2) ) + ...
  59.                     h_repellant*exp( w_repellant*sum(pop(j,2)-pop(:,2).^2) ));
  60.                
  61.                 poplast = pop(j,:);  % 当前的种群个体
  62.                 fitness(j) = fitness(j) + ww*Jcc;
  63.                 Jlast = fitness(j);  % 当前适应度值
  64.       
  65.                 % 翻转
  66.                 delta = 15*rand(1,nvar)-0.5;
  67.                 pop(j,:) = round( pop(j,:) + C(j,:).*delta./(sqrt( delta*delta' )) );
  68.                
  69.                 % x1
  70.                 if pop(j,1)>popmax1
  71.                     pop(j,1)=popmax1;
  72.                 end
  73.                 if pop(j,1)<popmin1
  74.                     pop(j,1)=popmin1;
  75.                 end
  76.                 % x2
  77.                 if pop(j,2)>popmax2
  78.                     pop(j,2)=popmax2;
  79.                 end
  80.                 if pop(j,2)<popmin2
  81.                     pop(j,2)=popmin2;
  82.                 end
  83.                 % x3
  84.                 if pop(j,3)>popmax3
  85.                     pop(j,3)=popmax3;
  86.                 end
  87.                 if pop(j,3)<popmin3
  88.                     pop(j,3)=popmin3;
  89.                 end
  90.                
  91.                 % 更新当前适应度值?
  92.                 [path{j}, fitness(j)] = fun_dijstra([startpoint, pop(j,:), endpoint], A, dij );     % 适应度值
  93.                
  94.                 % 游动
  95.                 n=0;
  96.                 while(n<Ns)     % 游动次数
  97.                     if fitness(j)<Jlast
  98.                         Jlast = fitness(j);
  99.                         poplast = pop(j,:);
  100.                     else       % 不更新适应度值
  101.                         n=Ns;
  102.                     end
  103.                 end

  104.                 % 适应度更新
  105.                 % 比较 个体间比较
  106.                 if Jlast<bestfitness
  107.                     bestfitness = Jlast;
  108. %                     zbest =  pop(j,:);
  109.                     zbest = poplast;
  110.                     zbestpath = path{j};   % 最优解对应的最优路径
  111.                 end
  112.             end   % sizepop  种群数量
  113.             
  114.             % 记录最优适应度值
  115.             NcSizepop = NcSizepop+1;
  116.             fitness_iter(NcSizepop) = bestfitness;
  117.         end       % Nc       趋化次数
  118.         
  119.         % 复制操作
  120.         [maxF, index] = sort(fitness,'descend');  % 降序排列
  121.         for Nre2 = 1:Sr   % 将最大适应度值的Sr个种群,进行更新
  122.             pop(index(Nre2),1) = round(popmin1 + (popmax1-popmin1)*rand);
  123.             pop(index(Nre2),2) = round(popmin2 + (popmax2-popmin2)*rand);
  124.             pop(index(Nre2),3) = round(popmin3 + (popmax2-popmin3)*rand);
  125.             [path{index(Nre2)}, fitness(index(Nre2))] = fun_dijstra([startpoint, pop(index(Nre2),:), endpoint], A, dij );
  126.             C(index(Nre2),1) = Cmin + (Cmax-Cmin)*rand;  % 步长
  127.             % 比较 个体间比较
  128.             if fitness(index(Nre2))<bestfitness
  129.                 bestfitness = fitness(index(Nre2));
  130.                 zbest =  pop(index(Nre2),:);
  131.                 zbestpath =  path{index(Nre2)};   % 最优解对应的最优路径
  132.             end
  133.         end
  134.     end   % Nre  复制操作
  135.    
  136.     for j=1:sizepop     % 种群
  137.         if Ped>rand
  138.             pop(j,1) = round(popmin1 + (popmax1-popmin1)*rand);
  139.             pop(j,2) = round(popmin2 + (popmax2-popmin2)*rand);
  140.             pop(j,3) = round(popmin3 + (popmax2-popmin3)*rand);
  141.              [path{j}, fitness(j)] = fun_dijstra([startpoint, pop(j,:), endpoint], A, dij );
  142.             % 比较 个体间比较
  143.             if fitness(j)<bestfitness
  144.                 bestfitness = fitness(j);
  145.                 zbest =  pop(j,:);
  146.                 zbestpath =  path{j};   % 最优解对应的最优路径
  147.             end
  148.         end
  149.     end
  150.    
  151. end       % Ned   驱散(迁移)次数

  152. disp('最优解')
  153. disp(zbest)
  154. fprintf('\n')

  155. disp('最优解对应的最优路径')
  156. disp(zbestpath)
  157. fprintf('\n')

  158. figure('color',[1,1,1])
  159. plot(fitness_iter,'ro-','linewidth',2)
  160. % loglog(fitness_iter,'ro-','linewidth',2)
  161. axis tight
  162. grid on

  163. %% 绘图
  164. zbest1 = zbest;
  165. zbest.pop = zbest1;
  166. zbest.path = zbestpath;
  167. figure(3)
  168. colormap([0 0 0;1 1 1]),pcolor(0.5:size(a,2)+0.5,0.5:size(a,1)+0.5,b)
  169. hold on
  170. % 节点网络结构初始化
  171. for i=1:citynum
  172.     plot(x(i)+0.5,y(i)+0.5,'ro','MarkerEdgeColor','r','MarkerFaceColor','g','markersize',8);
  173.     hold on;
  174.     text(x(i)+0.5,y(i)+0.5+0.2,num2str(i),'Color',[1 0 0]);
  175. end
  176. % 连线
  177. for i=1:length(zbest.path)-1
  178.     plot([x(zbest.path(i))+0.5,x(zbest.path(i+1))+0.5],[y(zbest.path(i))+0.5,y(zbest.path(i+1))+0.5],'b-','MarkerEdgeColor','r','MarkerFaceColor','g','markersize',8,'linewidth',2);
  179. end
  180. axis tight;
  181. axis off;
  182. hold off
复制代码



参考:
【1】基于穷举法的机器人避障路径寻优(免费)
【2】智能车辆局部避障路径规划及横向运动控制研究_陈东
【3】3-PSO算法(粒子群算法)的栅格路径寻优计算



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

使用道具 举报

0

主题

15

帖子

32

金钱

新手上路

Rank: 1

积分
47
发表于 2019-2-10 20:52:09 | 显示全部楼层
新手学习路径优化,感谢分享
回复 支持 反对

使用道具 举报

0

主题

2

帖子

15

金钱

新手上路

Rank: 1

积分
17
QQ
发表于 2019-4-9 09:12:32 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

3

帖子

13

金钱

新手上路

Rank: 1

积分
16
发表于 2019-11-23 10:01:43 | 显示全部楼层
感谢分享
回复

使用道具 举报

0

主题

14

帖子

9

金钱

新手上路

Rank: 1

积分
44
发表于 2021-9-30 20:07:01 | 显示全部楼层
感谢分享,学习了,谢谢
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

金钱

新手上路

Rank: 1

积分
28
发表于 2022-6-28 09:08:39 | 显示全部楼层
新手学习规划,感谢哒楼主分享
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

金钱

新手上路

Rank: 1

积分
28
发表于 2022-6-28 09:29:39 | 显示全部楼层
BFO算法(细菌觅食算法)的栅格路径,感谢楼主
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

金钱

新手上路

Rank: 1

积分
12
发表于 2024-3-25 15:32:55 来自手机 | 显示全部楼层
感谢分享,学习了,谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 03:22 , Processed in 0.251481 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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