自定义RL环境的意外动作分配

问题描述 投票:1回答:1

我正在创建一个自定义环境并在其上培训RL代理。

我使用稳定基准,因为它似乎实现了所有最新的RL算法,并且似乎尽可能接近“即插即用”(我想集中精力创建环境和奖励功能,而不是模型本身的实现细节)

我的环境有一个大小为127的动作空间,并将其解释为一个热向量:将向量中最高值的索引作为输入值。为了进行调试,我创建了一个条形图,显示每个值被“调用”了多少次]

在训练之前,我希望图形显示“事件”的大致均匀分布:uniform bar chart

但是相反,动作规范下端的“事件”比其他事件更有可能发生:enter image description here

我创建了一个colab来解释和重现此问题

我在github issue中提出了这个问题,但他们建议我在此处发布问题

python reinforcement-learning stable-baselines
1个回答
0
投票

model.predict(obs)将每个动作剪切到[-1, 1]范围内(因为这是您定义动作空间的方式)。因此,您的操作值数组看起来像

print(action)
# [-0.2476,  0.7068,  1.,          -1.,           1.,           1., 
#   0.1005,  -0.937,   -1. , ...]

即,所有大于1的动作都将被截断/剪切为1,因此存在multiple个最大动作。在您的环境中,计算numpy argmax pitch = np.argmax(action),它返回first最大值的索引,而不是随机选择的最大值(如果有多个最大值)。

您可以如下选择“随机argmax”。

max_indeces = np.where(action == action.max())[0]
any_argmax = np.random.choice(max_indeces)

我相应地更改了您的环境here

© www.soinside.com 2019 - 2024. All rights reserved.