Halcom 发表于 2018-4-7 11:58:04

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

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

主程序如下:
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;                  % 游动次数
C(:,1) = 1*ones(sizepop,1);            % 翻转选定方向后,单个细菌前进的步长
Nre = 2;                   % 复制次数
Ned = 2;                   % 驱散(迁移)次数
Sr = ceil( sizepop/2 );    % 复制(分裂)次数
Ped = 0.25;                % 细菌驱散(迁移)概率
d_attract = 0.05;          % 吸引剂的数量
w_attract = 0.05;          % 吸引剂的释放速度
h_repellant = 0.05;      % 排斥剂的数量
w_repellant = 0.05;      % 排斥剂的释放速度
ww = 0.0;                  % 适应度增量因子

nvar = 3;   % 3个未知量 --- 起始节点到目标节点之间找3个点出来
popmin1 = 1;popmax1 = 51; % x1
popmin2 = 1;popmax2 = 51; % x2
popmin3 = 1;popmax3 = 51; % x3
Cmin = -5;% 最小步长
Cmax = 5;   % 最大步长
%% 初始化种群
for i=1:sizepop
    x1 = round(popmin1 + (popmax1-popmin1)*rand);
    x2 = round(popmin2 + (popmax2-popmin2)*rand);
    x3 = round(popmin3 + (popmax3-popmin3)*rand);
   
    pop(i,1) = x1;                     % 初始化个体
    pop(i,2) = x2;                     % 初始化个体
    pop(i,3) = x3;                     % 初始化个体
   
    = fun_dijstra(, A, dij );   % 适应度值
    C(i,1) = Cmin + (Cmax-Cmin)*rand;% 步长
end
clear x1 x2 x3
%% 记录一组最优值
=min(fitness);
zbest=pop(bestindex,:);   % 全局最佳
fitnesszbest=bestfitness; % 全局最佳适应度值
NcSizepop = 0;            % 记录最优适应度值(函数值)
zbestpath = path{bestindex};   % 最优路径
%% 迭代寻优
for i = 1:Ned                   % 驱散(迁移)次数
    for k = 1:Nre               % 复制次数
      
      for m = 1:Nc            % 趋化次数
            for j=1:sizepop   % 种群
                % Jcc计算
                Jcc = sum( -d_attract*exp( w_attract*sum(pop(j,1)-pop(:,1).^2) ) + ...
                  h_repellant*exp( w_repellant*sum(pop(j,2)-pop(:,2).^2) ));
               
                poplast = pop(j,:);% 当前的种群个体
                fitness(j) = fitness(j) + ww*Jcc;
                Jlast = fitness(j);% 当前适应度值
      
                % 翻转
                delta = 15*rand(1,nvar)-0.5;
                pop(j,:) = round( pop(j,:) + C(j,:).*delta./(sqrt( delta*delta' )) );
               
                % x1
                if pop(j,1)>popmax1
                  pop(j,1)=popmax1;
                end
                if pop(j,1)<popmin1
                  pop(j,1)=popmin1;
                end
                % x2
                if pop(j,2)>popmax2
                  pop(j,2)=popmax2;
                end
                if pop(j,2)<popmin2
                  pop(j,2)=popmin2;
                end
                % x3
                if pop(j,3)>popmax3
                  pop(j,3)=popmax3;
                end
                if pop(j,3)<popmin3
                  pop(j,3)=popmin3;
                end
               
                % 更新当前适应度值?
                = fun_dijstra(, A, dij );   % 适应度值
               
                % 游动
                n=0;
                while(n<Ns)   % 游动次数
                  if fitness(j)<Jlast
                        Jlast = fitness(j);
                        poplast = pop(j,:);
                  else       % 不更新适应度值
                        n=Ns;
                  end
                end

                % 适应度更新
                % 比较 个体间比较
                if Jlast<bestfitness
                  bestfitness = Jlast;
%                     zbest =pop(j,:);
                  zbest = poplast;
                  zbestpath = 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),1) = round(popmin1 + (popmax1-popmin1)*rand);
            pop(index(Nre2),2) = round(popmin2 + (popmax2-popmin2)*rand);
            pop(index(Nre2),3) = round(popmin3 + (popmax2-popmin3)*rand);
             = fun_dijstra(, A, dij );
            C(index(Nre2),1) = Cmin + (Cmax-Cmin)*rand;% 步长
            % 比较 个体间比较
            if fitness(index(Nre2))<bestfitness
                bestfitness = fitness(index(Nre2));
                zbest =pop(index(Nre2),:);
                zbestpath =path{index(Nre2)};   % 最优解对应的最优路径
            end
      end
    end   % Nre复制操作
   
    for j=1:sizepop   % 种群
      if Ped>rand
            pop(j,1) = round(popmin1 + (popmax1-popmin1)*rand);
            pop(j,2) = round(popmin2 + (popmax2-popmin2)*rand);
            pop(j,3) = round(popmin3 + (popmax2-popmin3)*rand);
             = fun_dijstra(, A, dij );
            % 比较 个体间比较
            if fitness(j)<bestfitness
                bestfitness = fitness(j);
                zbest =pop(j,:);
                zbestpath =path{j};   % 最优解对应的最优路径
            end
      end
    end
   
end       % Ned   驱散(迁移)次数

disp('最优解')
disp(zbest)
fprintf('\n')

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

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

%% 绘图
zbest1 = zbest;
zbest.pop = zbest1;
zbest.path = zbestpath;
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算法(粒子群算法)的栅格路径寻优计算



wdd123456 发表于 2019-2-10 20:52:09

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

曾经的你 发表于 2019-4-9 09:12:32

感谢楼主分享

mingleQ 发表于 2019-11-23 10:01:43

感谢分享

summer9931 发表于 2021-9-30 20:07:01

感谢分享,学习了,谢谢

654321 发表于 2022-6-28 09:08:39

新手学习规划,感谢哒楼主分享

654321 发表于 2022-6-28 09:29:39

BFO算法(细菌觅食算法)的栅格路径,感谢楼主

Wilson 发表于 2024-3-25 15:32:55

感谢分享,学习了,谢谢
页: [1]
查看完整版本: 1-BFO算法(细菌觅食算法)的栅格路径寻优计算