如何得到稳定基线下的action_probability ()



我刚刚开始自学稳定基线强化学习3。我的长期目标是训练一个代理去玩一个特定的回合制桌面游戏。不过,目前我对新事物感到不知所措。

我已经实现了一个健身房环境,我可以用它来手动玩我的游戏,或者让它选择随机的动作。

目前,我被困在试图让一个模型给我的行动,以响应观察。我的环境的动作空间是DiscreteSpace(256)。我创建了一个环境为model = PPO('MlpPolicy', env, verbose=1)的模型。当我后来打电话给model.predict(observation)时,我确实得到了一个看起来像动作的号码。当反复运行时,我得到不同的数字,我认为这是在未经训练的模型上所期望的。

不幸的是,在我的游戏中,大多数行为在大多数州都是非法的,我想过滤它们并选择最好的合法行为。或者简单地转储所有操作的输出结果,以便了解发生了什么。

在浏览其他人的代码中,我看到了model.action_probability(observation)的参考。不幸的是,据我所知,方法不是稳定基线的一部分。从稳定基线2迁移到v3的指南只提到它没有被实现[1]。

你能给我点提示,告诉我怎么继续下去吗?

如果将来有人看到这篇文章,这是你为PPO做的。

import numpy as np
from stable_baselines3.common.policies import obs_as_tensor
def predict_proba(model, state):
obs = obs_as_tensor(state, model.policy.device)
dis = model.policy.get_distribution(obs)
probs = dis.distribution.probs
probs_np = probs.detach().numpy()
return probs_np

关于这点。
当我之后调用model.predict(observation)我确实得到了一个看起来像动作的数字。

您可以使用以下行

来防止这种行为
model.predict(observation, deterministic=True)

当您添加deterministic=True时,所有预测的动作将始终由最大概率决定,而不是由概率本身决定。

只是给你一个例子,让我们假设你有以下概率:

  • 动作A的25%
  • 动作B的75%

如果不使用deterministic=True,该模型将使用这些概率返回预测。
如果使用deterministic=True,模型将总是返回动作b

相关内容

  • 没有找到相关文章

最新更新