当前位置:网站首页>PRIMAL: Pathfinding via Reinforcement and Imitation Multi-Agent Learning 代码解析
PRIMAL: Pathfinding via Reinforcement and Imitation Multi-Agent Learning 代码解析
2022-08-04 21:00:00 【strawberry47】
目录
论文名称:PRIMAL: Pathfinding via Reinforcement and Imitation Multi-Agent Learning
论文地址:https://arxiv.org/abs/1809.03531
代码地址:https://github.com/gsartoretti/PRIMAL
相关链接:无人驾驶动态避障策略调研 | 机器人动态避障策略 | 行人轨迹预测 | 机器人导航,三篇强化学习用于多智能体路径规划的论文
1. 准备工作
1.1 配置环境:
- 先新建一个环境:
conda create --name PRIMAL python=3.6
- 新建一个
requirements.txt
文件,把要安装的包都放进去,再运行pip install -r requirements
安装包:
Cython==0.28.4
gym==0.9.4
Tensorflow==1.13.0
numpy==1.16.0
matplotlib
imageio
tk
networkx
注:源代码中是python3.4 + tf 1.3 + numpy 1.13,但是因为我的pycharm版本较高,不能兼容低版本python,因此我配的是python 3.6;py3.6无法兼容1.3版本的tensorflow,因此我又换成了1.13版本的tf。
3. 如果安装失败,也可以一个一个安装(我采用的方法)
注:直接pip或者conda安装不了gym时,可以尝试以下两种方法:conda install -c conda-forge gym=0.9.4
或者 pip install gym -i https://pypi.tuna.tsinghua.edu.cn/simple
安装tensorflow出问题时,可以执行以下两句 conda install cudatoolkit=10.0
conda install tensorflow==1.13.1
4. 安装完成后,可以使用conda list
命令检查是否都安装上了:
1.2 调试代码
安装
readme
文件中的步骤一步一步来:
① 命令行窗口进入cd od_mstar3
文件夹,python setup.py build_ext --inplace
;报错了error: Unable to find vcvarsall.bat
网上搜了一下,发现是需要安装Visual Studio,并且在安装时需要勾选 C++组件。如果安装时没有勾选,应当在工具栏中重新安装,之后重启就有vcvarsall模块了。参考文章:已安装vs2017 仍然报错Unable to find vcvarsall.bat然而,装了之后还是报错 o(╥﹏╥)o,参照:关于error: Unable to find vcvarsall.bat,我将
msvc9compiler.py
文件中的find_vcvarsall
函数return改成return r"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat"
其他参考文章:Unable to find vcvarsall.bat?改好
vcvarsall.bat
的bug后,又有了一个新bug:fatal error C1083: 无法打开包括文件: “boost/graph/graph_traits.hpp”: No such file or directory
。 网上查了一下,这是C++里的BGL库,需要自己下载安装。寻路时会用到它。Boost C++ Libraries 编译安装,oost下载安装编译配置使用指南(含Windows和Linux)
① 在官网中下载了boost_1_53_.zip
,解压运行bootstrap.bat
的时候报错了 boost 编译时出错处理:Failed to build Boost.Build engine。查阅了很多资料,还是没解决,于是决定下载最新版本的boost工具包。
安装时再次报错,fatal error C1083: 无法打开包括文件: “corecrt.h
,Windows 原生 cmd 窗口下编译 C++(cl命令)出现的问题及解决方法② 朋友安装的Visual Studio 2022,能够顺利装上boost,因此我也重新安装了vs2022。啊!终于可以啦!!
1.3 linux环境安装boost:
!!!!linux环境直接使用sudo apt-get install boost
命令就可以安装了! https://stackoverflow.com/questions/12578499/how-to-install-boost-on-ubuntu
2.代码解析:
2.1 setup.py
按照作者的要求,应该先运行这个文件~setup.py
是调用cpython
,用 Python 的语法混合编写 Python 和 C/C++ 代码,提升 Python 速度
调用 C/C++ 代码 教程,Cython 基本用法 。
本代码中是运行cpython_od_matar.pyx
这个文件,其中的find_path(world, init_pos, goals, inflation, time_limit)
函数是使用ODrM算法进行探索。ODrM相当于专家,generate a high-quality paths。
输入输出:
world - matrix specifying obstacles, 1 for obstacle, 0 for free
init_pos - [[x, y], ...] specifying start position for each robot
goals - [[x, y], ...] specifying goal position for each robot
inflation - inflation factor for heuristic
time_limit - time until failure in seconds
returns:
[[[x1, y1], ...], [[x2, y2], ...], ...] path in the joint
configuration space
2.2 A3C_RNN.py
因为pycharm在服务器运行jupyter文件有点麻烦,我将DRLMAPF_A3C_RNN.ipynb
文件改成了A3C_RNN.py
文件。这部分负责训练模型
2.3 ACNet.py
ACNet.py
中的_build_net()
函数对应着论文中的网络结构:
2.4 mapf_gym环境
2.4.1 mapf_gym与mapf_gym_cap区别
继承了gym
库,用于搭建环境
奇怪的是,它与mapf_gym_cap.py
中代码几乎一样,只是_observe()
函数不太一样:mapf_gym
中限制了mag
(agent距离goal的位置)的大小,应该就是视野受限吧:
github中对这两个文件的解释是:mapf_gym
:Multi-agent path planning gym environment, in which agents learn collective path planningmapf_gym_cap.py
:Multi-agent path planning gym environment, with capped goal distance state value for validation in larger environments
看了一下代码,训练的时候调用的是mapf_gym
,测试的时候是mapf_gym_cap.py
直接运行这两个代码会报错NameError: name 'coordinationRatio' is not defined
,没查到coordinationRatio这个函数是干什么的,我就把对应的代码print(coordinationRatio(env))
注释掉了。
2.4.2 搭建环境
A3C_RNN.py
中创建环境:gym=mapf_gym.MAPFEnv(num_agents=n, world0=world[0],goals0=world[1])
2.5 mapgenerator.py
利用tk()
库,生成环境,即手动设置obstacle,agent的位置
2.6 primal_testing.py
加载模型,进行测试,报错[Errno 2] No such file or directory: 'saved_environments/4_agents_10_size_0_density_id_0_environment.npy'
,没找到哪里会生成这个文件呀。
2.7 unittest
报错:pyglet.canvas.xlib.NoSuchDisplayException: Cannot connect to "None"
,网上说直接在终端跑就行了
But,在终端跑,也报错your graphic drives do not support OpenGL 2.0
,网上查了一下,得有GPU才行。
① 试试这个方法:用虚拟形式的图像渲染方式在server端启动虚拟化的图形渲染;没有用。。。
② 再试试这个pyglet.canvas.xlib.NoSuchDisplayException: Cannot connect to “None” ,装了一半发现也需要GPU才行
重新看了看代码,发现作者一开始是注释掉了from gym.envs.classic_control import rendering
这个包,于是我也注释掉了。。。 可是注释掉之后,就看不见图形化界面了啊。
GroupLock.py
负责多线程:
Python多线程编程(一):threading 模块 Thread 类的用法详解
Python 多线程编程(二):threading 模块中 Lock 类的用法详解
【python】详解threading模块:Condition类的使用(三)
3.报错合集:
- 报错 Connection to Python debugger failed: Socket operation on nonsocket: configureBlocking
ImportError: DLL load failed: 找不到指定的模块。
解决办法:重新安装numpy和tensorflow- 运行
mapgenerator.py
代码时报错:TclError: no display name and no $DISPLAY environment variable
,解决办法 手动指定显示设备: ① 终端输入printenv grep DISPLAY
,查看版本,我这边输出是localhost:10.0
;② 再将root = Tk()
改成root = Tk(screenName = ':10.0')
③ import的部分加上import matplotlib
,matplotlib.use('Agg')
边栏推荐
猜你喜欢
随机推荐
Unreal 本地化 国家化 多语言
vs Code 运行一个本地WEB服务器
工龄10年的测试员从大厂“裸辞”后...
【PCBA方案设计】握力计方案
Matlab画图2
MySQL field type
Debug locally and start the local server in vs code
链路聚合技术及VRRP
【手把手教你使用STM32HAL库的串口空闲中断】
【TypeScript】深入学习TypeScript枚举
使用堡塔应用管理器配置laravel队列方法
1、File对象学习
C语言之实现扫雷小游戏
Apache服务器的配置[通俗易懂]
长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析等领域中的应用
adb控制常用命令
【学术相关】清华教授发文劝退读博:我见过太多博士生精神崩溃、心态失衡、身体垮掉、一事无成!...
多商户商城系统功能拆解22讲-平台端分销商品
Comic | Two weeks after the boss laid me off, he hired me back and doubled my salary!
3. Byte stream and character stream of IO stream