首页 > 解决方案 > 可以用不可观察的外生状态定义 tf-agents 环境吗?

问题描述

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

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

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

标签: tensorflowreinforcement-learningtensorflow-agents

解决方案


是的,这完全没有问题。您的环境对象( or 的子类PyEnvironmentTFEnvironment可以在其中做任何您想做的事情。该observation_spec要求仅与您在stepandreset方法中输出的 TimeStep 相关(更准确地说是在您的_stepand_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()
        ...

推荐阅读