Python 自定义RL环境的意外操作分布
我正在创建一个定制环境,并培训RL代理 我之所以使用稳定的基线,是因为它似乎实现了所有最新的RL算法,并且似乎尽可能接近“即插即用”(我想集中精力创建环境和奖励功能,而不是模型本身的实现细节) 我的环境有一个大小为127的动作空间,并将其解释为一个热向量:将向量中最高值的索引作为输入值。 为了进行调试,我创建了一个条形图,显示每个值被“调用”的次数 在培训之前,我希望图表显示“事件”的大致均匀分布: 但相反,行动规范下端的“事件”比其他事件更有可能发生: 我创建了一个解释和复制该问题的 我问了一个问题,但他们建议我在这里发布这个问题。模型。预测(obs)将每个动作剪辑到范围Python 自定义RL环境的意外操作分布,python,reinforcement-learning,stable-baselines,Python,Reinforcement Learning,Stable Baselines,我正在创建一个定制环境,并培训RL代理 我之所以使用稳定的基线,是因为它似乎实现了所有最新的RL算法,并且似乎尽可能接近“即插即用”(我想集中精力创建环境和奖励功能,而不是模型本身的实现细节) 我的环境有一个大小为127的动作空间,并将其解释为一个热向量:将向量中最高值的索引作为输入值。 为了进行调试,我创建了一个条形图,显示每个值被“调用”的次数 在培训之前,我希望图表显示“事件”的大致均匀分布: 但相反,行动规范下端的“事件”比其他事件更有可能发生: 我创建了一个解释和复制该问题的 我问
[-1,1]
(因为这就是您定义动作空间的方式)。
因此,您的操作值数组看起来像
打印(操作)
# [-0.2476, 0.7068, 1., -1., 1., 1.,
# 0.1005, -0.937, -1. , ...]
也就是说,所有大于1的操作都被截断/剪裁为1,因此存在多个最大操作。
在您的环境中,您计算numpy argmaxpitch=np.argmax(action)
,它返回第一个最大值的索引,而不是随机选择的索引(如果存在多个最大值)
您可以选择一个“随机argmax”,如下所示
max_indeces = np.where(action == action.max())[0]
any_argmax = np.random.choice(max_indeces)
我相应地改变了你的环境