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

Hello Mat

 找回密码
 立即注册
查看: 13486|回复: 17

5-ACO+BFO算法(蚁群算法+细菌觅食算法)的栅格路径寻优计算

[复制链接]

1294

主题

1520

帖子

110

金钱

管理员

Rank: 9Rank: 9Rank: 9

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

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

主程序如下:
  1. % ACO+BFO混合算法
  2. clc,clear,close all
  3. warning off
  4. %% MAP
  5. load('data2.mat');
  6. K = 4;             % 与节点自身相连的节点数
  7. [x,y,A,dij, citynum,a,b] = init_map(data2,K);
  8. %% 目标
  9. startpoint=39;  % 起始节点
  10. endpoint=18;    % 终止节点
  11. %% BFO优化算法 参数
  12. % maxiter = 100;             % 最大迭代次数
  13. sizepop = 20;              % 种群数量
  14. Nc = 20;                   % 趋化次数
  15. Ns = 4;                    % 游动次数
  16. Nre = 2;                   % 复制次数
  17. Ned = 2;                   % 驱散(迁移)次数
  18. Sr = ceil( sizepop/2 );    % 复制(分裂)次数
  19. Ped = 0.25;                % 细菌驱散(迁移)概率

  20. nvar = 3;              % 3个未知量 --- 起始节点到目标节点之间找3个点出来
  21. popmin = [1, 1, 1];    % x 下限
  22. popmax = [51, 51, 51]; % x 上限
  23. Cmin = -1;  % 最小步长
  24. Cmax = 1;   % 最大步长
  25. C(:,1:nvar) = 1*ones(sizepop,nvar);            % 翻转选定方向后,单个细菌前进的步长
  26. %% ACO算法参数
  27. Rou = 0.8;     % 信息素增量强度
  28. P0 = 0.1;      % 转移概率
  29. %% 初始化种群
  30. for i=1:sizepop
  31.     pop(i,:) = round(popmin + (popmax-popmin).*rand(1,nvar));                        % 初始化个体
  32.     [path{i}, fitness(i)] = fun_dijkstra([startpoint, pop(i,:), endpoint], A, dij );     % 适应度值
  33.     C(i,:) = Cmin + (Cmax-Cmin).*rand(1,nvar);  % 步长
  34. end
  35. %% 记录一组最优值
  36. [bestfitness,bestindex]=min(fitness);  % 越小越好
  37. zbest.pop = pop(bestindex,:);   % 全局最佳
  38. fitnesszbest=bestfitness; % 全局最佳适应度值
  39. NcSizepop = 0;            % 记录最优适应度值(函数值)
  40. zbest.path = path{bestindex};   % 全局最佳个体对应的 最优路径
  41. %% 迭代寻优
  42. for i = 1:Ned                   % 驱散(迁移)次数
  43.     for k = 1:Nre               % 复制次数
  44.         
  45.         for m = 1:Nc            % 趋化次数
  46.             % ACO算法
  47.             lamda = 1/(Ned*Nre*Nc);        % 信息素挥发因子
  48.             [bestfit,flag] =min(fitness);
  49.             for j=1:sizepop
  50.                 Pt(j) = (fitness(j)-bestfit)./bestfit;
  51.             end
  52.             
  53.             for j=1:sizepop     % 种群
  54.                 % ACO
  55.                 % 转移概率值
  56.                 if Pt(j)<P0
  57.                     pop(j,:) = round( pop(j,:) + (2*rand-1)*lamda/2 );
  58.                 else
  59.                     pop(j,:) = round( pop(j,:) + (popmax-popmin).*(rand(1,nvar)-0.5) );
  60.                 end
  61.                 pop(j,:) = lb_ub(pop(j,:), popmin, popmax);   % 越界限制--取值范围约束
  62.                 pop1 = pop(j,:);
  63.                 [path1, fitness1] = fun_dijkstra( [startpoint, pop(j,:), endpoint], A, dij );
  64.                
  65.                 % BFO
  66.                 % 翻转
  67.                 delta = 5*rand(1,nvar)-0.5;
  68.                 pop(j,:) = round( pop(j,:) + C(j,:).*delta./(sqrt( delta*delta' )) );
  69.                 pop(j,:) = lb_ub(pop(j,:), popmin, popmax);   % 越界限制--取值范围约束
  70.                 pop2 = pop(j,:);
  71.                 [path2, fitness2] = fun_dijkstra( [startpoint, pop(j,:), endpoint], A, dij );
  72.                
  73.                 % 更新当前适应度值
  74.                 if fitness1<fitness2
  75.                     pop(j,:) = pop1;
  76.                 else
  77.                     pop(j,:) = pop2;
  78.                 end
  79.                 % BFO
  80. %                 [path{j}, fitness(j)] = fun_dijkstra( [startpoint, pop(j,:), endpoint], A, dij );
  81.                 % ACO
  82.                 [path{j}, fitness3] = fun_dijkstra( [startpoint, pop(j,:), endpoint], A, dij );
  83.                 fitness(j) = (1-Rou)*fitness(j) + fitness3;
  84.                
  85.                 % 适应度更新
  86.                 % 比较 个体间比较
  87.                 if fitness(j)<bestfitness
  88.                     bestfitness = fitness(j);
  89.                     zbest.pop = pop(j,:);
  90.                     zbest.path = path{j};   % 最优解对应的最优路径
  91.                 end
  92.             end   % sizepop  种群数量
  93.             
  94.             % 记录最优适应度值
  95.             NcSizepop = NcSizepop+1;
  96.             fitness_iter(NcSizepop) = bestfitness;
  97.         end       % Nc       趋化次数
  98.         
  99.         % 复制操作
  100.         [maxF, index] = sort(fitness,'descend');  % 降序排列
  101.         for Nre2 = 1:Sr   % 将最大适应度值的Sr个种群,进行更新
  102.             pop(index(Nre2),:) = round(popmin + (popmax-popmin).*rand(1,nvar));
  103.             [path{index(Nre2)}, fitness(index(Nre2))] = fun_dijkstra([startpoint, pop(index(Nre2),:), endpoint], A, dij );
  104.             C(index(Nre2),1) = Cmin + (Cmax-Cmin)*rand;  % 步长
  105.             % 比较 个体间比较
  106.             if fitness(index(Nre2))<bestfitness
  107.                 bestfitness = fitness(index(Nre2));
  108.                 zbest.pop =  pop(index(Nre2),:);
  109.                 zbest.path =  path{index(Nre2)};   % 最优解对应的最优路径
  110.             end
  111.         end
  112.     end   % Nre  复制操作
  113.    
  114.     for j=1:sizepop     % 种群
  115.         if Ped>rand
  116.             pop(j,:) = round(popmin + (popmax-popmin).*rand(1,nvar));
  117.             [path{j}, fitness(j)] = fun_dijkstra([startpoint, pop(j,:), endpoint], A, dij );
  118.             % 比较 个体间比较
  119.             if fitness(j)<bestfitness
  120.                 bestfitness = fitness(j);
  121.                 zbest.pop =  pop(j,:);
  122.                 zbest.path =  path{j};   % 最优解对应的最优路径
  123.             end
  124.         end
  125.     end
  126.    
  127. end       % Ned   驱散(迁移)次数
  128. %% 结果展示
  129. disp('最优解')
  130. disp(zbest.pop)
  131. fprintf('\n')

  132. disp('最优解对应的最优路径')
  133. disp(zbest.path)
  134. fprintf('\n')

  135. fprintf('最优个体')
  136. zbest

  137. figure('color',[1,1,1])
  138. plot(fitness_iter,'ro-','linewidth',2)
  139. % loglog(fitness_iter,'ro-','linewidth',2)
  140. axis tight
  141. grid on

  142. %% 绘图
  143. figure(3)
  144. colormap([0 0 0;1 1 1]),pcolor(0.5:size(a,2)+0.5,0.5:size(a,1)+0.5,b)
  145. hold on
  146. % 节点网络结构初始化
  147. for i=1:citynum
  148.     plot(x(i)+0.5,y(i)+0.5,'ro','MarkerEdgeColor','r','MarkerFaceColor','g','markersize',8);
  149.     hold on;
  150.     text(x(i)+0.5,y(i)+0.5+0.2,num2str(i),'Color',[1 0 0]);
  151. end
  152. % 连线
  153. for i=1:length(zbest.path)-1
  154.     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);
  155. end
  156. axis tight;
  157. axis off;
  158. hold off
复制代码


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

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

使用道具 举报

0

主题

9

帖子

24

金钱

新手上路

Rank: 1

积分
33
发表于 2018-10-15 18:56:31 | 显示全部楼层
ACO+BFO算法(蚁群算法+细菌觅食算法)的栅格路径寻优计算
回复 支持 反对

使用道具 举报

0

主题

15

帖子

32

金钱

新手上路

Rank: 1

积分
47
发表于 2019-2-10 20:53:03 | 显示全部楼层
cclxxl 发表于 2018-10-15 18:56
ACO+BFO算法(蚁群算法+细菌觅食算法)的栅格路径寻优计算

新手学习路径优化,感谢分享
回复 支持 反对

使用道具 举报

0

主题

26

帖子

1

金钱

新手上路

Rank: 1

积分
27
发表于 2019-3-24 10:34:40 | 显示全部楼层
好好学习,新手多指教,谢谢
回复 支持 反对

使用道具 举报

0

主题

26

帖子

1

金钱

新手上路

Rank: 1

积分
27
发表于 2019-3-24 10:35:18 | 显示全部楼层
好好学习,新手多指教,谢谢
回复 支持 反对

使用道具 举报

0

主题

6

帖子

1

金钱

新手上路

Rank: 1

积分
7
发表于 2019-4-1 10:06:12 | 显示全部楼层
新手学习,十分感谢!
回复 支持 反对

使用道具 举报

0

主题

6

帖子

1

金钱

新手上路

Rank: 1

积分
7
发表于 2019-4-1 10:16:33 | 显示全部楼层
学习路径优化,十分感谢
回复 支持 反对

使用道具 举报

0

主题

6

帖子

1

金钱

新手上路

Rank: 1

积分
7
发表于 2019-4-1 15:49:07 | 显示全部楼层
好好学习,新手多指教,谢谢
回复 支持 反对

使用道具 举报

0

主题

12

帖子

1

金钱

新手上路

Rank: 1

积分
13
发表于 2019-8-28 16:30:00 | 显示全部楼层
学习支持!!!!!!!!!!
回复

使用道具 举报

0

主题

3

帖子

13

金钱

新手上路

Rank: 1

积分
16
发表于 2019-11-21 21:51:00 | 显示全部楼层
cclxxl 发表于 2018-10-15 18:56
ACO+BFO算法(蚁群算法+细菌觅食算法)的栅格路径寻优计算


新手学习路径优化,感谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 02:57 , Processed in 0.253918 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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