一个tf代理环境可以用一个不可观察的外源状态来定义吗



我为标题中的问题不太清楚提前道歉。我试图使用tf代理来训练一个强化学习策略,其中存在一些影响状态的不可观测随机变量。

例如,考虑标准的CartPole问题,但我们添加了速度随时间变化的风。我不想训练一个依赖于观察每一步风速的特工;相反,我希望风能影响极点的位置和角速度,让代理人学会适应,就像在无风环境中一样。然而,在这个例子中,我们需要将当前时间的风速与前一时间的风速相关联,例如,我们不希望风速从时间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()
...

相关内容

最新更新