starry-sky6688 / MARL-Algorithms

Implementations of IQL, QMIX, VDN, COMA, QTRAN, MAVEN, CommNet, DyMA-CL, and G2ANet on SMAC, the decentralised micromanagement scenario of StarCraft II
1.42k stars 279 forks source link

关于reinforce算法的问题 #70

Closed Duke-Allen closed 2 years ago

Duke-Allen commented 2 years ago

您好,代码有些地方没看明白,所以有些问题想请教一下。

  1. reinforce应该是策略梯度方法,在不加通信的情况下选动作是根据Q值来选的吗?为什么会出现Q值呢?

  2. 关于通信的问题,commnet以及g2anet都是可以加在那三个算法之上的,但代码中的通信我有点没看明白,比如COMA,在coma.py中初始化时有考虑输入上一个动作的,这么做是为什么呢?

    微信截图_20211129213536
  3. rollout.py中与环境交互获取样本时后,为什么还要再重新添加一次obs和s呢?下面这几步的作用是什么呢?

    微信截图_20211130204058
starry-sky6688 commented 2 years ago
  1. 根据return来选动作
  2. 用的是RNN,需要输入上一个action进行记忆
  3. 每次append的是当前执行动作的状态,最后的terminal state还没有append进去
Duke-Allen commented 2 years ago
  1. 根据return来选动作
  2. 用的是RNN,需要输入上一个action进行记忆
  3. 每次append的是当前执行动作的状态,最后的terminal state还没有append进去

好的,第一点和第三点我明白了。但第二点是和算法无关吗,是因为使用的网络结构RNN,所以算法中都要使用上一个action吗,包括像reinforce这种策略梯度算法?是RNN的话不应该输入上一个隐藏状态吗?这里还不是很明白,请指教

starry-sky6688 commented 2 years ago

对,和算法无关,这里面所有的算法都额外输入了上一个action;

因为原本神经网络就是输入当前的obs来得到action,所以obs已经被记忆下了;由于当前obs下的action还没有得到,所以要输入上一个action