针对多AGV物流分拣场景建立的仿真模拟系统,是我的本科毕业设计,开源以作纪念。
本系统使用p5.js编写,推荐使用atom等支持该语言的IDE编辑。
下载IDE后,下载插件
File -> Settings -> Packages
Search p5js-toolbar and Install it
完成后开启p5js-toolbar
Packages -> p5js-toolbar -> Toggle p5.js toolbar
Click the run button and that's all
算法基本实现,逻辑已基本无bug
输入 :
- agent:start,end
- obstacles
- map:rows,cols
输出:
- 如果没冲突,给出每个agent的路径数组
UI界面,参数调整接口,单步模式和直接运行模式。
UI界面初步完成,目前提供参数如下:
- 地图行数、列数、障碍物比例
- 障碍物、每辆小车的起点和终点都可以自由设定
- 运行功能(直接执行模式)和重置功能
UI界面进一步完善,加入如下功能:
- 可以添加小车
- 添加单步执行模式
- 显示当前运行状态
删除小车功能,设定小车颜色(可选),加入预设的特殊布局地图、计时功能。
删除小车功能完成
如图所示情况,绿色小车到达终点后,在实际情况中会离开,继续执行下一个任务,但在路径中,绿车停靠在终点,会和红车路径不断产生冲突,导致死循环,这是不合理的。
- 每个小车有一个任务列表,执行完一个就去做下一个。
- 在补全小车路径到maxT时,补为特殊点,即不会再和其它小车冲突的点。
删除小车bug修复,计时功能初步完成,修改小车速度功能完成
对于单轮任务,需要对每个Agent的执行时间单独计时
最好拓展到多轮任务,对任务直接计时
- 打算先完善前端UI,优化排版,加一些对用户友好的提示功能。
- 添加小车时自定义颜色,给一个colorpicker。
UI第一次更新完成
不必通过draw一直重画整个界面,setup时调用noloop,然后之后封装一个drawWholeThing,当需要更新界面时,再调用即可,减小开销。
把全局变量封装到一个config.js里,优化代码结构,能用lodash里的函数代替的尽量代替
等V1.2的bug修复后,就开始改进算法,并做对比试验
从yaml文件读取地图(待定)
UI界面的逻辑bug基本修复,UI样式初步调整完毕,全局变量存到configs.js中。
输出每个AGV的等待次数,转弯次数等,设定每个小车的开始时间不一致
小车密度,20*20,障碍物比例为0.2时,4-5辆AGV同时运行比较合适。
可以输出每个AGV的等待次数与转弯次数
算法优化,测试地图的设计,要降低计算复杂度,想办法更精确地比较实际效率
- 在分裂CT Node时,下层路径不需要全部重新计算,只计算受影响的路径
- 加入全局冲突表
- 转弯代价和重复路径代价(先尝试简单处理)
- 上层CT Tree在迭代时,当一个CT Node需要分裂时,有选择性地选择一个冲突来分裂,cardinal conflict。
- 加入BP(Bypass),每个CT Node多记录一个NC,即自己的solution中的冲突数量,当一个CT Node需要分裂时,可以先假分裂,如果分裂后的solution能够在满足原先约束的情况下减少冲突数量,就直接将这个假分裂的节点的新路径替换原先的CT Node中的路径,然后这个CT Node就不分裂了。
- 按钮UI重复创建的bug已修复
- 可以保存地图,但碍于JS较难操作文件,仅在控制台输出为JSON格式,需要手动append到地图文件中
- 考虑加入模式切换功能,提供测试模式和用户输入模式,测试模式的用途是为测试专门的地图提供便利,交互方式还在考虑中。
- 加入算法切换按钮,便于记录算法迭代变化,同时便于比较执行效果。UI上考虑放在地图左侧。
新增功能:
- 可以切换运行模式
- 用户模式:默认模式,地图根据用户设定随机生成
- 测试模式:后台提供一些测试地图,命名格式为:map_8by8_12_1_ex0,其中8为地图行数,12为障碍物数,1为agent数量,ex0表示实验0,目前已提供的地图主要有8by8和32by32,ex可以从0到99,具体可以查看CommonMapSettings.js文件
- no solution时,重置即可,不会停止循环,算是bug修复吧
- 保存地图(不完善),由于js读写本地文件不便,目前只是将当前地图配置输出到控制台,需要复制到CommonMapSettings.js文件中再赋值给变量,然后才能在测试模式中调用
- 修复复选框选项显示bug,修复单步模式bug
- 在用户模式下添加“小车数量”的自定义项
- 更新UI界面头部排版
- 后期数据测试:
- 原版:dirs默认,无转弯代价,cbs上层重复计算
- 优化:dirs更新,转弯代价,cbs上层减少重复计算,Astar下层优先选择h值小者
- 8*8,obstacle:1%,agents:2,3,4,5,6,7
- 每个5组
- 8*8,obstacle:1%,agents:2,3,4,5,6,7
- 每个5组
- 20*20,obstacle:1%,agents:4,8,12,16,20
- 每个3组
- 20*20,obstacle:10%,agents:4,8,12
- 每个4组
- 50*50,obstacle:1%,agents:10,15,20,25,30
- 每个3组
- 8*8,100组
- 32*32,100组
8x8 障碍物比例1%
- 地图的生成与导出
- Agent的增删与速度调整
- 运行场景自由编辑
- 批量自动化测试(不够完善)
- 系统状态及执行过程可视化
- 数据统计及下载
- 详细的系统文档
[1] Sharon G, Stern R, Goldenberg M, et al. The increasing cost tree search for optimal multi-agent pathfinding[J]. Artificial Intelligence, 2013, 195: 470-495.
[2] Sharon G, Stern R, Felner A, et al. Conflict-based search for optimal multi-agent pathfinding[J]. Artificial Intelligence, 2015, 219: 40-66.
[3] Boyarski E, Felner A, Stern R, et al. Icbs: The improved conflict-based search algorithm for multi-agent pathfinding[C]//Eighth annual symposium on combinatorial search. 2015.
算法主要在开题前(2020.10)完成,寒假(2021.2)完善了系统功能,开学后就是测试和调bug,以及写论文(2021.3)
十分感谢shiffman的p5.js教程,讲课生动有趣,容易理解,给出的A*算法案例对我帮助很大
开发过程比较细碎,主要在忙导师的其他项目,不过这个项目也是我第一个比较认真且独立完成的Demo,如果它能帮助到你或给你启发,那就再好不过了ξ( ✿>◡❛)
哈哈都看到这里了,能给个star嘛(⸝⸝•‧̫•⸝⸝)