✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
机器人是一种能够感知空间、动态决策、行为规划的智能体。它可以代替人类做重复性枯燥的工作或被用于去做许多人类无法正常完成的任务。机器人会在各种不同的环境下进行工作,避开障碍物寻找可行路径。这是执行相关任务的前提。路径规划是在已知全部环境、部分环境已知和环境完全未知的情况下,根据相应的算法自主发现一条从起点,一步一步避开遇到的障碍物,行走到终点的可行路径。本文利用matlab基于遗传算法求解光伏实验室小车路径规划,仿真结果表明这种方法能够很好的解决移动机器人点对点的路径规划问题。
⛄ 部分代码
%%交叉操作
%输入变量:pop:父代种群,pc:交叉的概率
%输出变量:newpop:交叉后的种群
function [new_pop] = crossover(pop, pc)
[px,~] = size(pop);
% 判断路径点数是奇数或偶数
parity = mod(px, 2);
new_pop = {};
%两个两个交叉
for i = 1:2:px-1
singal_now_pop = pop{i, 1};
singal_next_pop = pop{i+1, 1};
[lia, locb] = ismember(singal_now_pop, singal_next_pop);%[Lia,Locb] = ismember(A,B)确定 A 的哪些元素同时也在 B 中及其在 B 中的相应位置。
[~, n] = find(lia == 1);%要查找特定的整数值,使用 == 运算符。返回找到的值在lia中的索引
[~, m] = size(n);
%如果随机数小于交叉概率且A中有三个以上路径节点与B中的相同
if (rand < pc) && (m >= 3)
% 生成一个2到m-1之间的随机数,也就是除去开头和结尾,在两条路径的相同节点中随机选取一个节点用于交叉
r = round(rand(1,1)*(m-3)) +2;%Y = round(X) 将 X 的每个元素四舍五入为最近的整数
crossover_index1 = n(1, r);%
crossover_index2 = locb(crossover_index1);
new_pop{i, 1} = [singal_now_pop(1:crossover_index1), singal_next_pop(crossover_index2+1:end)];
new_pop{i+1, 1} = [singal_next_pop(1:crossover_index2), singal_now_pop(crossover_index1+1:end)];
else %否则不交叉
new_pop{i, 1} =singal_now_pop;
new_pop{i+1, 1} = singal_next_pop;
end
%如果有奇数条路径,除最后一条外,其余已按照if的条件进行了是否交叉的处理,所以最后一条仍然不变。
if parity == 1
new_pop{px, 1} = pop{px, 1};
end
end
⛄ 运行结果
⛄ 参考文献
[1] 徐美清, 孙晨亮. 基于栅格地图的遗传算法路径规划[J]. 科技信息, 2011(31):2.
[2] 彭丽. 基于遗传算法的移动机器人路径规划[D]. 长沙理工大学.
[3] 余翀, 陈雄, 邱其文. 基于蜂窝地图的步进式机器人路径规划[C]// 2011:6.
[4] 马浩浩, 郑紫微. 基于栅格模型下机器人路径规划的改进遗传算法[J]. 无线通信技术, 2019, 28(2):4.
[5] 周毅. 基于遗传算法的移动机器人路径规划研究[D]. 河北工业大学.