建站平台是给谁用的,做网站优化就是发文章吗,蓬莱做网站,沈阳网站seo排名2024mathorcup妈妈杯数学建模A题思路模型#xff1a;比赛开始后第一时间更新#xff0c;更新见文末名片#xff0c;下面对2022年B题进行介绍#xff1a; 2022Mathorcup B题题目介绍 B题无人仓的搬运机器人调度问题本题考在无人仓内的仓库管理问题之一#xff0c;搬运机… 2024mathorcup妈妈杯数学建模A题思路模型比赛开始后第一时间更新更新见文末名片下面对2022年B题进行介绍 2022Mathorcup B题题目介绍 B题无人仓的搬运机器人调度问题本题考在无人仓内的仓库管理问题之一搬运机器人 AGV 的调度问 题。更多的背景介绍请参看附件-背景介绍。对于无人仓来说仓库的地图 模型可以简化为图的数据结构。
一、问题一 1、地图模型 题目中已经给出了地图的栅格模型然后在题目给的附件里也有地图数据map.csv所以可以用Matlab建立一个栅格地图模型之后再在这个模型基础上面进行路径规划进行仿真模拟。
2、路径规划 现在有较多的路径规划算法但在AGV和仓储搬运路径问题上常用的有A*算法、Dijkstra算法在本题中可以选择A*算法、Dijkstra算法来计算AGV路径规划模型但在本题中从结果看来A*算法是优于Dijkstra算法的所以可以直接选用A*算法。
A*算法的核心部分Matlab
%% 预处理
% 初始化closeList
closeList start_node;
closeList_path {start_node,start_node};
closeList_cost 0;
child_nodes child_nodes_cal(start_node, m, n, obs, closeList); %子节点搜索函数 % 初始化openList
openList child_nodes;
for i 1:size(openList,1)openList_path{i,1} openList(i,:);openList_path{i,2} [start_node;openList(i,:)];%从初始点到第i个子节点
endfor i 1:size(openList, 1)g norm(start_node - openList(i,1:2));%norm求范数返回最大奇异值abs求绝对值h abs(target_node(1) - openList(i,1)) abs(target_node(2) - openList(i,2));%终点横坐标距离加纵坐标距离f g h;openList_cost(i,:) [g, h, f];
end%% 开始搜索
% 从openList开始搜索移动代价最小的节点
[~, min_idx] min(openList_cost(:,3));%输出openlist_cost表中最小值的位置
parent_node openList(min_idx,:);%父节点为代价最小节点%% 进入循环
flag 1;
while flag % 找出父节点的忽略closeList的子节点child_nodes child_nodes_cal(parent_node, m, n, obs, closeList); % 判断这些子节点是否在openList中若在则比较更新没在则追加到openList中for i 1:size(child_nodes,1)child_node child_nodes(i,:);[in_flag,openList_idx] ismember(child_node, openList, rows);%ismember函数表示子节点在open表中则返回1判断flag,输出此子节点在openlist表中的位置g openList_cost(min_idx, 1) norm(parent_node - child_node);%按照新父节点计算此子节点的g,h值h abs(child_node(1) - target_node(1)) abs(child_node(2) - target_node(2));f gh;if in_flag % 若在比较更新g和f if g openList_cost(openList_idx,1)openList_cost(openList_idx, 1) g;%将openlist_cost表中第id个位置的第一个数更新为以新父节点计算的g值openList_cost(openList_idx, 3) f;openList_path{openList_idx,2} [openList_path{min_idx,2}; child_node];endelse % 若不在追加到openListopenList(end1,:) child_node;openList_cost(end1, :) [g, h, f];openList_path{end1, 1} child_node;openList_path{end, 2} [openList_path{min_idx,2}; child_node];endend% 从openList移除移动代价最小的节点到 closeListcloseList(end1,: ) openList(min_idx,:);closeList_cost(end1,1) openList_cost(min_idx,3);closeList_path(end1,:) openList_path(min_idx,:);openList(min_idx,:) [];%openlist表中已跳出的最小值位置设为空openList_cost(min_idx,:) [];openList_path(min_idx,:) [];% 重新搜索从openList搜索移动代价最小的节点重复步骤[~, min_idx] min(openList_cost(:,3));parent_node openList(min_idx,:);% 判断是否搜索到终点if parent_node target_nodecloseList(end1,: ) openList(min_idx,:);closeList_cost(end1,1) openList_cost(min_idx,1);closeList_path(end1,:) openList_path(min_idx,:);flag 0;end
end
3、任务分配调度模型
通过遍历两个附件订单、AGV去选择挑选小车利用上述的算法去计算路径的长度之后挑选出路径最短的小车与任务给AGV进行任务分配。 注意一个订单可能对应的托盘不止一个在订单数量需求较大时可能需要两个托盘甚至更多 二、问题二
在这题中可以加入遗传蚁群算法去优化拣货分区模型之后建立多目标规划可以引入几个指标例如转弯次数、路径长度、拣货台拣货数量平均度、拥挤度、拣货效率几个方面进行规划下面是做出的分区结果 三、问题三 1、分析 冲突问题可以选用时间窗或者冲突搜索去调整之前模型路径把冲突情况分成边冲突和点冲突这两种情况
1点冲突 节点冲突
相向冲突
2边冲突 在下一时刻交换位置
2、冲突处理及模型评价 选用了冲突搜索计算结果更加优秀可以用元组去存储冲突数据建立一个冲突约束树之后在不断建立下一层直到没有冲突此时这条最终路径作为AGV的执行任务路径。之后可以利用各类指标去对比在一二问中的模型例如冲突处理代价AGV为处理冲突之后多走的路、转弯次数可以与一二问中的结果数据进行对比。 部分数据结果:时间窗和冲突搜索两个模型转弯次数对比
或者如果能做到的话做出路径热力图去分析不同栅格节点所被走过的次数对比两者可以分析拥挤度并且分析死锁次数及类型在本题中最好不要出现死锁情况题中已经提出避免死锁所以模型中应尽量减少死锁情况甚至不出现。