3

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

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

目前,我一直在努力寻找一个模型来响应观察结果。我的环境的动作空间是一个DiscreteSpace(256). 我创建环境为model = PPO('MlpPolicy', env, verbose=1). 当我后来打电话时model.predict(observation),我确实得到了一个看起来像一个动作的号码。当重复运行时,我得到不同的数字,我认为这是在未经训练的模型上预期的。

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

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

你能给我一个关于如何继续的提示吗?

4

2 回答 2

0

如果将来有人遇到此帖子,这就是您为 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
于 2021-11-17T23:06:28.660 回答
0

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

您可以使用以下行防止该行为

model.predict(observation, deterministic=True)

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

举个例子,假设您有以下概率:

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

如果您不使用确定性=True,模型将使用这些概率返回预测。
如果您使用确定性=True,模型将始终返回操作 B。

于 2022-02-01T17:05:48.963 回答