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。
我要解决的问题是如何跟踪外生变量的状态,而不使其成为训练代理时输入神经网络的观察规范的一部分。任何指导将不胜感激。
是的,那完全没问题。您的环境对象(PyEnvironment
或 TFEnvironment
的子类)可以在其中做任何您想做的事情。 observation_spec
要求仅与您在 step
和 reset
方法中输出的 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()
...
对于标题中的问题不是很清楚,我提前表示歉意。我正在尝试使用 tf-agents 训练强化学习策略,其中存在一些影响状态的不可观察的随机变量。
例如,考虑标准的 CartPole 问题,但我们在速度随时间变化的地方添加了风。我不想训练依赖于观察每一步风速的代理;相反,我希望风能影响杆的位置和 angular 速度,并且智能体能够像在 wind-free 环境中一样学习适应。然而,在这个例子中,我们需要当前时间的风速与之前时间的风速相关,例如我们不希望风速从时间 t 的 10m/s 变为时间 t+1 的 -10m/s。
我要解决的问题是如何跟踪外生变量的状态,而不使其成为训练代理时输入神经网络的观察规范的一部分。任何指导将不胜感激。
是的,那完全没问题。您的环境对象(PyEnvironment
或 TFEnvironment
的子类)可以在其中做任何您想做的事情。 observation_spec
要求仅与您在 step
和 reset
方法中输出的 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()
...