ns3gym中的multi-agent官方示例
一、运行
把contrib/opengym/examples文件夹下的multi-agent文件夹复制到scratch目录下
不复制也可以,但是输入路径比较麻烦
所以我都是统一把需要运行的脚本复制到scratch下
直接运行:
1 | |
这里会报错:
1 | |
经过一番查询,是mygym.h里面少了头文件,补充上就可以正常运行了:
1 | |
运行结果可以在每个终端看到不同的内容:
1 | |
二、multi-agent的交互逻辑
官方给的示例非常简单,不涉及神经网络的训练
所以很方便观察多个agent与环境之间的交互
sim.cc
agents是共享一个环境,所以只需要进行一次环境的初始化,然后分别对agents的接口进行初始化,不同的agent的接口号不一样:
1 | |
mygym.cc
这里针对不同agent用m_agentId进行了区分,相关代码直接搜索这个关键词就可以看到与其他单智能体示例不同的部分:
1 | |
mygym.h
1 | |
agent1.py\agent2.py
1 | |
三、总结
在这个示例里面,两个智能体之间没有交互,而且它们与环境的交互始终具有顺序依赖性
比如说agent1交互以后,提示必须输入回车键,才能让agent2与环境进行交互
如果注释掉input(“press enter….”)这一行,它们与环境的交互就是同时进行的,只是在终端打印出来的信息还是agent1在前
但是实际的多智能体要复杂很多,尤其是共享环境这一块,状态、动作、奖励都会相互影响