该存储库包含一个多机器人物流系统的模拟,包括路径规划和资源收集。模拟中的机器人在2D网格中导航,收集物品并将其运送到泊位,船只再将这些物品运送到虚拟点以产生价值。系统使用D* Lite算法进行路径规划,使机器人在避开障碍物和其他机器人的同时高效导航。
该模拟代表一个仓库或港口物流场景,自主机器人在地图上收集有价值的物品,并将其运送到指定泊位。船只从泊位收集这些物品并运输以产生金钱。目标是在有限的时间框架内(15,000帧)最大化运输物品的价值。
来源:main.cpp#L236-L258, GlobalData.hpp#L42-L131
机器人使用D* Lite路径规划算法在地图上导航,收集物品并将其运送到指定的泊位。每个机器人:
- 检测并避开障碍物和其他机器人
- 对目标物品和泊位目的地做出决策
- 一次携带一个物品
- 可执行命令:移动(四个方向)、获取(捡起物品)、放置(将物品放在泊位)
来源:Robot.hpp#L7-L219, main.cpp#L41-L115
泊位是机器人交付物品和船只装载物品的固定位置。每个泊位:
- 在地图上有特定位置
- 存储多个物品
- 有装载速度(每帧可转移到船只的物品数量)
- 有运输时间(船只从泊位到虚拟点所需时间)
来源:GlobalData.hpp#L57-L64, main.cpp#L125-L140
船只将物品从泊位运送到虚拟点以产生价值。每艘船:
- 被分配到特定泊位
- 有最大容量
- 可在泊位和虚拟点之间行驶
- 到达虚拟点时将物品转换为金钱
物品在地图上出现,具有特定价值。机器人必须导航到它们的位置,收集它们,并将它们带到泊位。
模拟使用D* Lite算法进行路径规划,这是一种适用于动态环境的增量搜索算法。这使得机器人能够:
- 规划到目标的最优路径
- 在检测到障碍物时高效更新路径
- 处理环境中动态变化
该算法维护一个状态优先队列以更新,并根据其优先级键(通过成本和启发式函数计算)处理它们。
-
初始化:系统加载地图,放置机器人、泊位和船只,并分配初始目标。
-
帧处理
:在每15,000帧中:
- 机器人选择目标,规划路径并执行移动
- 船只从泊位装载物品并运送到虚拟点
- 系统更新全局状态
来源:main.cpp#L28-L185, main.cpp#L237-L260
模拟使用两个主要线程:
- 一个裁判线程,负责逐帧模拟、机器人移动和船只操作
- 一个路径规划线程,并行计算机器人的最优路径
这种设计通过将计算密集型的路径规划操作卸载到单独的线程,提高了性能。
https://zread.ai/Cctqlhh/rthw/1-overview
CODE_CRAFT2024西北赛区调参后最高53w前70未进64
初始化 init
循环:每一帧input()
每一帧,每个机器人的操作:
机器人获取全局地图 (全局地图:机器人、墙、水都为障碍物)
__目标选取
规划路径,输入目标
判断目标是否改变,如果目标改变重新规划路线,目标不变可能调整路径
目标不变:判断下一位置是否存在机器人障碍,依据等待次数和机器人障碍决定移动操作
移动操作转化为具体指令
依据上一步规划的路径和等待条件将移动操作转化为给判题器的指令变量
更新全局地图
1.取倒数n(如500)个物品,保存其数据,逐个与机器人计算距离,比较选出最近的。√
2..........机器人增量搜索,找出最近的
3.从 泊位 附近搜索(距离/增量搜索),
1. 容器map:key:x,y;valuel:0/1表示物品在不在,或物品的类。
物品类:坐标,价值,传入帧id。用帧id排序,有序map,因此可以到容量时删除。√ 增量搜索
2. 容器deque:顺帧序pushback,达到数量时popfront,可以保持存储数量。
具体每个泊位的物品选取策略:
每个泊位在每一帧计算当前帧刷新物品中 最近的物品 作为下一个目标位置,当前帧的存储在map中,通过遍历map计算距离,存储到berth的成员中。可以用vector或deque或链表存储n帧的。每个泊位选定物品后将其锁定,即从map中删除该物品。
其实可以使用 待计算距离队列,即被锁定的之后如果改了目标取消锁定,可以加入到队列中,继续让其他泊位计算距离。
1.曼哈顿距离√,欧氏距离.
2.物品价值如何考量。