tf-agents 环境可以用不可观察的外生状态来定义吗?

Can a tf-agents environment be defined with an unobservable exogenous state?

对于标题中的问题不是很清楚,我提前表示歉意。我正在尝试使用 tf-agents 训练强化学习策略,其中存在一些影响状态的不可观察的随机变量。

例如,考虑标准的 CartPole 问题,但我们在速度随时间变化的地方添加了风。我不想训练依赖于观察每一步风速的代理;相反,我希望风能影响杆的位置和 angular 速度,并且智能体能够像在 wind-free 环境中一样学习适应。然而,在这个例子中,我们需要当前时间的风速与之前时间的风速相关,例如我们不希望风速从时间 t 的 10m/s 变为时间 t+1 的 -10m/s。

我要解决的问题是如何跟踪外生变量的状态,而不使其成为训练代理时输入神经网络的观察规范的一部分。任何指导将不胜感激。

是的,那完全没问题。您的环境对象(PyEnvironmentTFEnvironment 的子类)可以在其中做任何您想做的事情。 observation_spec 要求仅与您在 stepreset 方法中输出的 TimeStep 有关(更准确地说是在您实现 _step_reset 抽象方法)。

然而,您的环境可以完全自由地拥有您可能需要的任何其他属性(例如控制风力发电的参数)和您喜欢的任何数量的其他方法(例如根据 self._wind_hyper_params).您的代码的快速示意图如下所示:

class MyCartPole(PyEnvironment):
    def __init__(self, ..., wind_HP):
        ...    # self._observation_spec and _action_spec can be left unchanged
        self._wind_hyper_params = wind_HP
        self._wind_velocity = 0
        self._state = ...
    
    def _update_wind_velocity(self):
        self._wind_velocity = ...

    def factor_in_wind(self):
        self.state = ...    #update according to wind

    def _step(self, action):
        ...    # self._state update computations
        self._update_wind_velocity
        self.factor_in_wind()

        observations = self._state_to_observations()
        ...