文章目录
- 前言
- 问题
- 解决方法
- 以此类推
- 假设动作之间有联系
- 假设动作之间没有联系
前言
根据导师的文章,得到的想法,论文如下:
论文链接:《Deep Reinforcement Learning for Smart
Home Energy Management》
问题
现在我有一个环境,3v3坦克环境,此时坦克有两个动作,一个动作为行动(360度都能走),一个动作是射击(360度都能射击)。
一开始的想法是0:行动,1:射击,两者都是0-360度的范围(0-2*pi)
这就变成的一个离散域,一个连续域的情况
一个是[0,1]离散域,一个是0-2*pi连续域的混合域。
我们知道,在单个智能体的环境下,[0,1]离散域的动作维度算2,0-2*pi连续域的动作维度算1。
所以此时混合域就有一个棘手的问题,1.维度算几? 2.怎么改写代码?
解决方法
我想了一个方法:(自建环境的情况下可用)
混合域转换成 单个连续域[-2pi,2pi],巧妙利用数学的正负
此时动作为[2] (列表的形式,值为角度值)
当动作[0]>0时,动作为行动;当动作[0]<0时,动作为射击,动作[0]=0时,即不动。
类似如下:
在maddpg时,是由tanh输出,输出为(-1,1),
在实际env.step前,将值乘以action_bound(我这里是2*pi)就行,当然maddpg还得加一个噪声然后clip。
类似如下:
由此将此问题改为了连续空间下的动作域,实验结果如下:
说明想法可行。
以此类推
我想,可以以这个方法,类比出其他混合域的方法,也都能化解成单个连续域的情况。
虽然我这个情况,动作两者的关系比较巧合。
假设动作之间有联系
假设动作之间没有联系
由上述两者情况基本涵盖了大多数混合空间域的情况。