编程语言
首页 > 编程语言> > 【路径规划】基于matlab遗传优化模拟退火算法求解避障路径规划问题matlab代码

【路径规划】基于matlab遗传优化模拟退火算法求解避障路径规划问题matlab代码

作者:互联网

1 简介

近年来, 路径规划一直是机器人学中的研究热 点之一.它研究的目的是在有障碍物的环境中, 为机 器人寻找从起始点到目标点并且能够避开障碍物的 合理 、有效的路径.其中涉及到环境信息的获取 、环 境的表示 、路径执行、知识的获取等 .国内外已有不 少学者对移动机器人路径规划问题作了深入研究, 并提出了多种路径规划方法.例如, 可视图法[ 1-2] 、图 搜索法 、人工势场法[ 3] 等.但这些方法的搜索空间比 较大, 存在组合爆炸的问题, 难以满足实时搜索的要 求, 或者存在局部极小值问题, 使规划失败. 遗传算法由于具有算法鲁棒 、灵活, 在种群中搜 索不易落入局部最小点等优点[ 4] , 近几年被广泛采 用, 但它在实际应用过程中也可能会产生早熟现象、 局部寻优能力差等问题 .而模拟退火算法却具有较 强的局部搜索能力, 所以使用遗传算法与模拟退火 相结合的方法, 是解决上述问题的有效途径.本文中 将这两个算法结合构成遗传模拟退火算法, 它兼备 了很强的全局和局部搜索能力的优点, 在变量数目 较大时尤其突出.

2 部分代码

%%%%%%模拟退火遗传算法(SAGA)%%%%%%%%%%%

clear
%%%设置超参数
p_crs = 0.7;   %交叉概率
p_mut = 0.1;   %变异概率
ratio = 0.5;   %选择操作中父辈的比例
pop_num = 5000;  %种群规模
chrom_len = 7;  %染色体长度,这里代表路线的点数
iteration = 40;
T0 = 100;  %初始温度
A = 0.8;  %退火速度

% 一个个体就是一条路线
[x,y]=popinit(pop_num,chrom_len);   %产生初始种群   
fit=saga_fitness(x,y, T0);      %计算种群适应度
[bestx0,besty0,fit0]=best(x,y,fit); 
d0 = 0; %初始路径长度
for j=1:1:size(bestx0,2)-1
   d0 = d0 + sqrt((bestx0(1,j+1)-bestx0(1,j)).^2 + ...
      (besty0(1,j+1)-besty0(1,j)).^2);     %该个体(即路线)的路径长度
end

for i=1:1:iteration           %设置进化代数
  [Parentx,Parenty]=select(x, y, fit, ratio);      %选择
  [Kidx,Kidy]=crossover(Parentx,Parenty,p_crs);       %交叉
  [Kidx,Kidy]=mutation(Kidx,Kidy,p_mut);              %变异
   x = [Parentx; Kidx];    % 得到新的种群
   y = [Parentx; Kidy];
   x(:,chrom_len)=1.5;   % 保留终点
   y(:,chrom_len)=8.9;
   
   T = T0 * A^(i-1);  % 当前温度
   fit = saga_fitness(x,y,T);   % 计算进化后的适应度
  [bestx,besty,bestfit]=best(x,y,fit);   %选择每一代中的最佳个体
   route_x(i,:)=bestx;                     %保存该最佳个体
   route_y(i,:)=besty;
   route_fit(i)=bestfit;
   for j=1:1:size(bestx,2)-1
       dd(j)=sqrt((bestx(1,j+1)-bestx(1,j)).^2 + ...
          (besty(1,j+1)-besty(1,j)).^2);     %该个体(即路线)的路径长度
   end
   d(i) = sum(dd);   %有问题
   fprintf('%dth 代进化完成...\n', i)
%     plot(bestx,besty,'r-');
end
route_fit = [fit0, route_fit];   %加上初始种群中最优个体
route_x = [bestx0; route_x];
route_y = [bestx0; route_y];
d = [d0, d];

[final_fit,idx]=max(route_fit);            %所有代中的的最佳路线
final_routex=route_x(idx,:);
final_routey=route_y(idx,:);
final_distance = min(d)             %最佳路径长度

%==========画图,可视化路线、进化过程==============
% start point
xs=0;
ys=0;
% Destination
xt=1.5;
yt=8.9;
%obstacle
xobs=[1.5 4.0 1.2];
yobs=[6.5 3.0 1.5];
robs=[1.5 1.0 0.8];
theta=linspace(0,2*pi,100);
max_area = 0;
for k=1:numel(xobs)
   fill(xobs(k)+robs(k)*cos(theta),yobs(k)+robs(k)*sin(theta),[0.5 0.7 0.8]);  % 后一个参数表示RGB值
   text(xobs(k), yobs(k), num2str(k))
   hold on;
end
plot(xs,ys,'bs','MarkerSize',12,'MarkerFaceColor','y');
plot(xt,yt,'kp','MarkerSize',16,'MarkerFaceColor','g');
grid on;
hold on;

%%画出最短路径的路线
plot(final_routex,final_routey,'r*-',  'linewidth', 1.5);
legend('障碍物1','障碍物2','障碍物3','起点', '终点', '最短路线')
set(gca,'FontSize',16);
hold off;

% 进化过程中适应度曲线
figure,
% plot(0:1:size(route_fit,2)-1, route_fit, 'linewidth', 1.2)
plot(d, 'linewidth', 1.2)
% ylim([0.08,0.1])
title(['变异率=',num2str(p_mut),',交叉率=', num2str(p_crs), '的进化曲线']);
legend('最短路径长度值', 'Location', 'northeast');
set(gca,'FontSize',16);


d_saga = d;
save('d_saga');

load('d_saga.mat');
figure,
plot(d, 'linewidth', 1.2), hold on,
plot(d_saga, 'linewidth', 1.2);
title(['变异率=',num2str(p_mut),',交叉率=', num2str(p_crs), '的进化曲线']);
legend('SAGA最优路径值', 'GA最优路径值', 'Location', 'northeast');
set(gca,'FontSize',16);

3 仿真结果

4 参考文献

[1]周明, 孙树栋, 彭炎午. 基于遗传模拟退火算法的机器人路径规划[J]. 航空学报, 1998, 19(1):3.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,有科研问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

标签:plot,fit,route,路径,模拟退火,bestx0,matlab
来源: https://blog.csdn.net/qq_59747472/article/details/122397814