最近在想一个场景,就是有些状态下,连续动作是没有用的,并不应用到环境中,比如如果是离散动作可以用mask来掩盖掉,那如果是连续动作应该怎么处理吗?有相应的论文吗?
Hardlygo 连续动作一般用截断
你的动作空间事怎么样的?是只有一个连续动作,在一些状态下某些取值没有效的意思么。还是说有多个连续动作同时输出,其中一个动作没有效?
Air-legend 对对对,就是某些状态下连续动作的值不需要。。。
Air-legend 大佬,请问下那如果是多个连续动作同时输出,这些动作和为1,如何让其中一个或多个动作没有效呢?
Hardlygo 🤣 还是没听懂你的意思。你是说的部分的连续值不需要还是这个连续动作都不需要
[未知] 一个连续动作中的部分取值不需要的话暂时没有遇到过 这个好像也不太好做mask
Air-legend 就是有些状态下,agent的某个连续动作不使用,就是环境在那个状态下是不能(不需要)应用该动作
Hardlygo 那样的话就mask掉这个连续动作的梯度就好了 我在ppo里有用到,直接把连续动作的梯度乘以0就行
Air-legend 请问有代码吗,我可以看看学习下吗?
Hardlygo 额,我的项目就是在ratio那里乘以了一个mask,是二级动作做的mask,根据一级动作来选择是否要mask掉梯度。
Q-max007 卖不存在的股票,是不是跟你的问题类似?我的方法是重新解释生成的action,保证生成的所有买卖action都是合法的。进入新state就知道哪个动作是合法的,那可以生成一个mask并作为state的一部分,方便AI判断,下一个step用mask取出有效的动作。如果进入新state不知道哪个动作是合法的,就和我碰到的问题类似。我之前是直接忽略不合法的动作,效果不太好,就重新解释了生成的action,保证action永远都是合法的。
war3gu 嗯嗯,那我还想请教下大佬,在RL如果每时间步生成一个一维的连续动作,然后到最大的时间步最后这些动作相加=常量,这种具体该怎么操作呢?
war3gu 还有大佬,那个mask相当于筛选出合法动作,那具体mask作为state的一部分该怎么理解呢?是state里面增加了mask的信息,然后action的有效集合从state里人工获取出来这样?
Q-max007
第一个问题,你在状态里加个常量,初始化为你要的“和“,然后每次生成一个0-1的数,从这个“和“中按百分比吃掉一块,最后一步,不管生成什么,把剩余的“和“全部拿走。
第二个问题,用我的情况说明一下,我生成的action范围是[-1,+1],-表示卖,+表示买。当手中无股票,action是-,这是无意义的action。我重新解释了一下,比如最大可卖1000股,最大可买2000股,实际范围是[-1000,2000],对应[-1,+1],如果生成0.5,对应的线性插值一下就行了。
war3gu 嗷嗷大佬我大概懂你的意思了,十分感谢~最后想请问下就是同时输出多个连续动作,如何保证部分和是1这样呢?是得到向量action之后,对应位置索引的数值去做softmax这样转换嘛?
可以试试,应该没问题
war3gu 嗯嗯感谢~
不知这个是否相关?
PPO with invalid action masking (Maskable PPO)
[2006.14171] A Closer Look at Invalid Action Masking in Policy Gradient Algorithms (arxiv.org)