|
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
主程序如下:
- clc,clear,close all
- warning off
- % 初始化种群
- model = CreateModel();
- itermax = 100; % 迭代次数
- fitnesszbest = inf;
- for i = 1:itermax
- disp(['当前迭代次数: ', num2str(i), ' 总迭代次数:', num2str(itermax)])
- sol = CreateRandomSolution(model);
- % 计算目标函数
- [fitness, sol1] = fun(sol, model);
-
- if fitness<fitnesszbest
- fitnesszbest = fitness;
- fitness_iter(i) = fitnesszbest;
- zbest = sol1;
- else
- fitness_iter(i) = fitnesszbest;
- end
- figure(1)
- PlotSolution(zbest,model)
- pause(0.1)
- end
- figure(2)
- plot(fitness_iter, '.-');
- axis tight;
- xlabel('迭代次数'); ylabel('适应度曲线');
复制代码 CreateModel脚本如下:
- function model=CreateModel()
- % 起点坐标
- xs=0;
- ys=0;
- % 终点坐标
- xt=4;
- yt=6;
- % 3个障碍圆
- triangle_x1 = [0.35,0.5,2.8]; triangle_y1 = [5.0,3.5,4.7];
- triangle_x2 = [3.7,3.3,4.8]; triangle_y2 = [3.8,2.4,2.9];
- triangle_x3 = [1.8,1.3,0.6]; triangle_y3 = [1.3,2.2,1.0];
-
- xobs=[mean(triangle_x1),mean(triangle_x2),mean(triangle_x3)]; % 三角形中心横坐标
- yobs=[mean(triangle_y1),mean(triangle_y2),mean(triangle_y3)]; % 三角形中心纵坐标
- % 三角形中心 到其它定点 最大距离
- for i=1:length(xobs)
- d(1,i) = sqrt( (xobs(1)-triangle_x1(i)).^2+(yobs(1)-triangle_y1(i)).^2 );
- d(2,i) = sqrt( (xobs(2)-triangle_x2(i)).^2+(yobs(2)-triangle_y2(i)).^2 );
- d(3,i) = sqrt( (xobs(3)-triangle_x3(i)).^2+(yobs(3)-triangle_y3(i)).^2 );
- end
- robs=max(d,[],2)'; % 三角形中心 到其它定点 最大距离
-
- n = 3; % 障碍物数量
-
- % 地图大小
- xmin=0; xmax= 7;
- ymin=0; ymax= 7;
-
- model.xs=xs; % 起点横坐标
- model.ys=ys; % 起点纵坐标
- model.xt=xt; % 终点横坐标
- model.yt=yt; % 终点纵坐标
- model.triangle_x1 = triangle_x1; model.triangle_y1 = triangle_y1;
- model.triangle_x2 = triangle_x2; model.triangle_y2 = triangle_y2;
- model.triangle_x3 = triangle_x3; model.triangle_y3 = triangle_y3;
- model.xobs=xobs; % 障碍物横坐标
- model.yobs=yobs; % 障碍物纵坐标
- model.robs=robs; % 障碍物半径
- model.n=n; % 障碍物个数
- model.xmin=xmin; % 地图最小横坐标
- model.xmax=xmax; % 地图最大横坐标
- model.ymin=ymin; % 地图最小纵坐标
- model.ymax=ymax; % 地图最大纵坐标
-
- end
复制代码 CreateRandomSolution脚本函数如下:
- function sol = CreateRandomSolution(model)
- % 中间插值n个点
- n = model.n;
- % 取值范围
- xmin = model.xmin;
- xmax = model.xmax;
- ymin = model.ymin;
- ymax = model.ymax;
- sol.x = unifrnd( xmin,xmax, 1,n ); % 均匀分布,产生n个点的横坐标
- sol.y = unifrnd( ymin,ymax, 1,n ); % 均匀分布,产生n个点的纵坐标
复制代码 适应度函数如下:
画图函数如下:
- function PlotSolution(sol,model)
- xs=model.xs;
- ys=model.ys;
- xt=model.xt;
- yt=model.yt;
- xobs=model.xobs;
- yobs=model.yobs;
- robs=model.robs;
-
- XS=sol.XS;
- YS=sol.YS;
- xx=sol.xx;
- yy=sol.yy;
-
- % 绘制障碍物
- fill(model.triangle_x1,model.triangle_y1,[0,1,0]);
- hold on;
- fill(model.triangle_x2,model.triangle_y2,[0,1,0]);
- fill(model.triangle_x3,model.triangle_y3,[0,1,0]);
- plot(xx,yy,'k','LineWidth',2); % 插值的曲线坐标
- plot(XS,YS,'r.'); % 最优解的点坐标
- plot(xs,ys,'bs','MarkerSize',12,'MarkerFaceColor','y'); % 起点
- plot(xt,yt,'kh','MarkerSize',16,'MarkerFaceColor','r'); % 终点
- hold off;
- grid on;
- axis equal;
- end
复制代码
参考:【1】结果动态图
|
|