Halcom 发表于 2018-4-7 11:59:51

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

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

主程序如下:
% ACO+BFO混合算法
clc,clear,close all
warning off
%% MAP
load('data2.mat');
K = 4;             % 与节点自身相连的节点数
= init_map(data2,K);
%% 目标
startpoint=39;% 起始节点
endpoint=18;    % 终止节点
%% BFO优化算法 参数
% maxiter = 100;             % 最大迭代次数
sizepop = 20;            % 种群数量
Nc = 20;                   % 趋化次数
Ns = 4;                  % 游动次数
Nre = 2;                   % 复制次数
Ned = 2;                   % 驱散(迁移)次数
Sr = ceil( sizepop/2 );    % 复制(分裂)次数
Ped = 0.25;                % 细菌驱散(迁移)概率

nvar = 3;            % 3个未知量 --- 起始节点到目标节点之间找3个点出来
popmin = ;    % x 下限
popmax = ; % x 上限
Cmin = -1;% 最小步长
Cmax = 1;   % 最大步长
C(:,1:nvar) = 1*ones(sizepop,nvar);            % 翻转选定方向后,单个细菌前进的步长
%% ACO算法参数
Rou = 0.8;   % 信息素增量强度
P0 = 0.1;      % 转移概率
%% 初始化种群
for i=1:sizepop
    pop(i,:) = round(popmin + (popmax-popmin).*rand(1,nvar));                        % 初始化个体
    = fun_dijkstra(, A, dij );   % 适应度值
    C(i,:) = Cmin + (Cmax-Cmin).*rand(1,nvar);% 步长
end
%% 记录一组最优值
=min(fitness);% 越小越好
zbest.pop = pop(bestindex,:);   % 全局最佳
fitnesszbest=bestfitness; % 全局最佳适应度值
NcSizepop = 0;            % 记录最优适应度值(函数值)
zbest.path = path{bestindex};   % 全局最佳个体对应的 最优路径
%% 迭代寻优
for i = 1:Ned                   % 驱散(迁移)次数
    for k = 1:Nre               % 复制次数
      
      for m = 1:Nc            % 趋化次数
            % ACO算法
            lamda = 1/(Ned*Nre*Nc);      % 信息素挥发因子
             =min(fitness);
            for j=1:sizepop
                Pt(j) = (fitness(j)-bestfit)./bestfit;
            end
            
            for j=1:sizepop   % 种群
                % ACO
                % 转移概率值
                if Pt(j)<P0
                  pop(j,:) = round( pop(j,:) + (2*rand-1)*lamda/2 );
                else
                  pop(j,:) = round( pop(j,:) + (popmax-popmin).*(rand(1,nvar)-0.5) );
                end
                pop(j,:) = lb_ub(pop(j,:), popmin, popmax);   % 越界限制--取值范围约束
                pop1 = pop(j,:);
                = fun_dijkstra( , A, dij );
               
                % BFO
                % 翻转
                delta = 5*rand(1,nvar)-0.5;
                pop(j,:) = round( pop(j,:) + C(j,:).*delta./(sqrt( delta*delta' )) );
                pop(j,:) = lb_ub(pop(j,:), popmin, popmax);   % 越界限制--取值范围约束
                pop2 = pop(j,:);
                = fun_dijkstra( , A, dij );
               
                % 更新当前适应度值
                if fitness1<fitness2
                  pop(j,:) = pop1;
                else
                  pop(j,:) = pop2;
                end
                % BFO
%                = fun_dijkstra( , A, dij );
                % ACO
                = fun_dijkstra( , A, dij );
                fitness(j) = (1-Rou)*fitness(j) + fitness3;
               
                % 适应度更新
                % 比较 个体间比较
                if fitness(j)<bestfitness
                  bestfitness = fitness(j);
                  zbest.pop = pop(j,:);
                  zbest.path = path{j};   % 最优解对应的最优路径
                end
            end   % sizepop种群数量
            
            % 记录最优适应度值
            NcSizepop = NcSizepop+1;
            fitness_iter(NcSizepop) = bestfitness;
      end       % Nc       趋化次数
      
      % 复制操作
       = sort(fitness,'descend');% 降序排列
      for Nre2 = 1:Sr   % 将最大适应度值的Sr个种群,进行更新
            pop(index(Nre2),:) = round(popmin + (popmax-popmin).*rand(1,nvar));
             = fun_dijkstra(, A, dij );
            C(index(Nre2),1) = Cmin + (Cmax-Cmin)*rand;% 步长
            % 比较 个体间比较
            if fitness(index(Nre2))<bestfitness
                bestfitness = fitness(index(Nre2));
                zbest.pop =pop(index(Nre2),:);
                zbest.path =path{index(Nre2)};   % 最优解对应的最优路径
            end
      end
    end   % Nre复制操作
   
    for j=1:sizepop   % 种群
      if Ped>rand
            pop(j,:) = round(popmin + (popmax-popmin).*rand(1,nvar));
             = fun_dijkstra(, A, dij );
            % 比较 个体间比较
            if fitness(j)<bestfitness
                bestfitness = fitness(j);
                zbest.pop =pop(j,:);
                zbest.path =path{j};   % 最优解对应的最优路径
            end
      end
    end
   
end       % Ned   驱散(迁移)次数
%% 结果展示
disp('最优解')
disp(zbest.pop)
fprintf('\n')

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

fprintf('最优个体')
zbest

figure('color',)
plot(fitness_iter,'ro-','linewidth',2)
% loglog(fitness_iter,'ro-','linewidth',2)
axis tight
grid on

%% 绘图
figure(3)
colormap(),pcolor(0.5:size(a,2)+0.5,0.5:size(a,1)+0.5,b)
hold on
% 节点网络结构初始化
for i=1:citynum
    plot(x(i)+0.5,y(i)+0.5,'ro','MarkerEdgeColor','r','MarkerFaceColor','g','markersize',8);
    hold on;
    text(x(i)+0.5,y(i)+0.5+0.2,num2str(i),'Color',);
end
% 连线
for i=1:length(zbest.path)-1
    plot(,,'b-','MarkerEdgeColor','r','MarkerFaceColor','g','markersize',8,'linewidth',2);
end
axis tight;
axis off;
hold off

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

cclxxl 发表于 2018-10-15 18:56:31

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

wdd123456 发表于 2019-2-10 20:53:03

cclxxl 发表于 2018-10-15 18:56
ACO+BFO算法(蚁群算法+细菌觅食算法)的栅格路径寻优计算

新手学习路径优化,感谢分享

agjing110 发表于 2019-3-24 10:34:40

好好学习,新手多指教,谢谢

agjing110 发表于 2019-3-24 10:35:18

好好学习,新手多指教,谢谢

wk1352 发表于 2019-4-1 10:06:12

新手学习,十分感谢!

wk1352 发表于 2019-4-1 10:16:33

学习路径优化,十分感谢

wk1352 发表于 2019-4-1 15:49:07

好好学习,新手多指教,谢谢

virtualccc 发表于 2019-8-28 16:30:00

学习支持!!!!!!!!!!

mingleQ 发表于 2019-11-21 21:51:00

cclxxl 发表于 2018-10-15 18:56
ACO+BFO算法(蚁群算法+细菌觅食算法)的栅格路径寻优计算


新手学习路径优化,感谢分享
页: [1] 2
查看完整版本: 5-ACO+BFO算法(蚁群算法+细菌觅食算法)的栅格路径寻优计算