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

Hello Mat

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 157|回复: 0

6-枚举法下的避障路径寻优(连续性问题求解)

[复制链接]

754

主题

893

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
29864
发表于 2019-10-8 22:48:09 | 显示全部楼层 |阅读模式
6-枚举法下的避障路径寻优(连续性问题求解)
链接:https://pan.baidu.com/s/1Qyv7FurF5sL_puHO3B6rnw 提取码:pxg6

具体链接在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. % 初始化种群
  4. model = CreateModel();
  5. itermax = 100;  % 迭代次数
  6. fitnesszbest = inf;
  7. for i = 1:itermax
  8.     disp(['当前迭代次数: ', num2str(i), ' 总迭代次数:', num2str(itermax)])
  9.     sol = CreateRandomSolution(model);
  10.     % 计算目标函数
  11.     [fitness, sol1] = fun(sol, model);
  12.    
  13.     if fitness<fitnesszbest
  14.         fitnesszbest = fitness;
  15.         fitness_iter(i) = fitnesszbest;
  16.         zbest = sol1;
  17.     else
  18.         fitness_iter(i) = fitnesszbest;
  19.     end
  20.     figure(1)
  21.     PlotSolution(zbest,model)
  22.     pause(0.1)
  23. end
  24. figure(2)
  25. plot(fitness_iter, '.-');
  26. axis tight;
  27. xlabel('迭代次数'); ylabel('适应度曲线');
复制代码
CreateModel脚本如下:
  1. function model=CreateModel()

  2.     % 起点坐标
  3.     xs=0;
  4.     ys=0;
  5.     % 终点坐标
  6.     xt=4;
  7.     yt=6;
  8.     % 3个障碍圆
  9.     triangle_x1 = [0.35,0.5,2.8];  triangle_y1 = [5.0,3.5,4.7];
  10.     triangle_x2 = [3.7,3.3,4.8];  triangle_y2 = [3.8,2.4,2.9];
  11.     triangle_x3 = [1.8,1.3,0.6];  triangle_y3 = [1.3,2.2,1.0];
  12.    
  13.     xobs=[mean(triangle_x1),mean(triangle_x2),mean(triangle_x3)];  % 三角形中心横坐标
  14.     yobs=[mean(triangle_y1),mean(triangle_y2),mean(triangle_y3)];  % 三角形中心纵坐标
  15.     % 三角形中心 到其它定点 最大距离
  16.     for i=1:length(xobs)
  17.         d(1,i) = sqrt( (xobs(1)-triangle_x1(i)).^2+(yobs(1)-triangle_y1(i)).^2 );
  18.         d(2,i) = sqrt( (xobs(2)-triangle_x2(i)).^2+(yobs(2)-triangle_y2(i)).^2 );
  19.         d(3,i) = sqrt( (xobs(3)-triangle_x3(i)).^2+(yobs(3)-triangle_y3(i)).^2 );
  20.     end
  21.     robs=max(d,[],2)';  % 三角形中心 到其它定点 最大距离
  22.    
  23.     n = 3; % 障碍物数量
  24.    
  25.     % 地图大小
  26.     xmin=0;  xmax= 7;
  27.     ymin=0;  ymax= 7;
  28.    
  29.     model.xs=xs;    % 起点横坐标
  30.     model.ys=ys;    % 起点纵坐标
  31.     model.xt=xt;    % 终点横坐标
  32.     model.yt=yt;    % 终点纵坐标
  33.     model.triangle_x1 = triangle_x1; model.triangle_y1 = triangle_y1;
  34.     model.triangle_x2 = triangle_x2; model.triangle_y2 = triangle_y2;
  35.     model.triangle_x3 = triangle_x3; model.triangle_y3 = triangle_y3;
  36.     model.xobs=xobs;  % 障碍物横坐标
  37.     model.yobs=yobs;  % 障碍物纵坐标
  38.     model.robs=robs;  % 障碍物半径
  39.     model.n=n;        % 障碍物个数
  40.     model.xmin=xmin;  % 地图最小横坐标
  41.     model.xmax=xmax;  % 地图最大横坐标
  42.     model.ymin=ymin;  % 地图最小纵坐标
  43.     model.ymax=ymax;  % 地图最大纵坐标
  44.    
  45. end
复制代码
CreateRandomSolution脚本函数如下:
  1. function sol = CreateRandomSolution(model)
  2. % 中间插值n个点
  3. n = model.n;
  4. % 取值范围
  5. xmin = model.xmin;
  6. xmax = model.xmax;
  7. ymin = model.ymin;
  8. ymax = model.ymax;
  9. sol.x = unifrnd( xmin,xmax, 1,n );  % 均匀分布,产生n个点的横坐标
  10. sol.y = unifrnd( ymin,ymax, 1,n );  % 均匀分布,产生n个点的纵坐标
复制代码
适应度函数如下:
游客,如果您要查看本帖隐藏内容请回复

画图函数如下:
  1. function PlotSolution(sol,model)

  2.     xs=model.xs;
  3.     ys=model.ys;
  4.     xt=model.xt;
  5.     yt=model.yt;
  6.     xobs=model.xobs;
  7.     yobs=model.yobs;
  8.     robs=model.robs;
  9.    
  10.     XS=sol.XS;
  11.     YS=sol.YS;
  12.     xx=sol.xx;
  13.     yy=sol.yy;
  14.    
  15.     % 绘制障碍物
  16.     fill(model.triangle_x1,model.triangle_y1,[0,1,0]);
  17.     hold on;
  18.     fill(model.triangle_x2,model.triangle_y2,[0,1,0]);
  19.     fill(model.triangle_x3,model.triangle_y3,[0,1,0]);

  20.     plot(xx,yy,'k','LineWidth',2);  % 插值的曲线坐标
  21.     plot(XS,YS,'r.');  % 最优解的点坐标
  22.     plot(xs,ys,'bs','MarkerSize',12,'MarkerFaceColor','y');  % 起点
  23.     plot(xt,yt,'kh','MarkerSize',16,'MarkerFaceColor','r');  % 终点
  24.     hold off;
  25.     grid on;
  26.     axis equal;

  27. end
复制代码


参考:【1】结果动态图




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

使用道具 举报

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

本版积分规则


Python|Opencv|MATLAB|Halcom.cn  

GMT+8, 2019-10-19 17:26 , Processed in 0.111913 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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