2024mathorcup妈妈杯数学建模B题思路模型
比赛一开启,请立即关注后续更新信息,请关注后续更新信息,请关注后续更新信息,请关注后续更新信息,请关注后续更新信息,请关注后续更新信息,请关注后续更新信息,请关注后续更新信息,请关注后续更新信息,请关注后续更新信息,请关注后续更新信息,请关注后续更新信息,请关注后续更新信息,请关注后续更新信息,请关注后续更新信息,请关注后续.update information. 下面我们将为您带来2022年B题的详细解读与思路分享.
2022Mathorcup B题题目介绍
本题考查的是无人仓内的 warehouse management 问题之一,在这一领域内主要关注的是搬运机器人 AGV 的调度问题作为核心内容
一、问题一
1、地图模型
题目已经提供了地图的栅格模型信息,并在附件中提供了相关数据(map.csv)。因此可以通过Matlab软件构建一个栅格地图模型,并在此基础上展开路径规划工作以完成相应的仿真模拟验证。
2、路径规划
存在多种路径规划方法,在AGV及仓储搬运路径问题中常用的是A算子与Dijkstra方法。针对本题,则可以选择应用A算子与Dijkstra方法来构建AGV路径规划模型。通过对比分析可知,在本题情境下A算子表现出色。因此建议优先采用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个子节点
end
for 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 = g+h;
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];
end
else % 若不在,追加到openList
openList(end+1,:) = child_node;
openList_cost(end+1, :) = [g, h, f];
openList_path{end+1, 1} = child_node;
openList_path{end, 2} = [openList_path{min_idx,2}; child_node];
end
end
% 从openList移除移动代价最小的节点到 closeList
closeList(end+1,: ) = openList(min_idx,:);
closeList_cost(end+1,1) = openList_cost(min_idx,3);
closeList_path(end+1,:) = 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_node
closeList(end+1,: ) = openList(min_idx,:);
closeList_cost(end+1,1) = openList_cost(min_idx,1);
closeList_path(end+1,:) = openList_path(min_idx,:);
flag = 0;
end
end
3、任务分配调度模型
通过遍历两个附件(订单、AGV),选择适合的小车;采用上述所述算法计算路径长度;并从候选小车中选出路径最短者进行任务分配
请注意,在同一个订单的情况下,可能会涉及多个托盘。当订单的需求量很大时,可能会需要两个或更多的托盘。
二、问题二
在本题中可以通过遗传蚁群算法来提升拣货分区模型的效果 通过建立多目标优化规划体系 可以引入包括以下几方面的评价指标 其中具体的实施效果表明 建立了基于改进型遗传算法的优化模型 通过求解得到以下几种关键性能指标数据

深入分析 conflict问题时可采用时间窗或冲突搜索方法来优化现有模型的路径设置,并将其分为边冲突与点冲突两种类型
(1)点冲突
节点冲突
相向冲突
(2)边冲突
在下一时刻交换位置
选用了冲突搜索算法后计算效率显著提升,并通过元组来存储冲突数据构建了一个层级化的冲突约束树结构,在逐步迭代优化的过程中直至消除所有潜在的冲突状况。在此基础上确定最终路径作为AGV的实际运行指令序列。同时基于前两问中的模型构建结果选取相应的性能指标来进行比较分析:首先关注的是处理冲突所导致的额外路径长度(AGV为规避冲突而多走的道路段数),其次则观察系统在不同场景下的转弯频率(此数值可与前两问所得数据进行对比验证)。
部分数据结果:时间窗和冲突搜索两个模型转弯次数对比
如果能够实现的话,则应当生成路径热力图用于分析不同栅格节点所被走过的次数;通过对比两种情况可以评估系统的负载程度;并且需要对系统可能出现的死锁数量及其类型进行评估,在本题的具体情况下最好能够避免出现任何死锁情况;由于题目已经明确要求避免出现死锁问题;因此模型设计时应以降低系统运行时因死锁导致的问题为指导原则进行优化。
