tensorflow - 可以用不可观察的外生状态定义 tf-agents 环境吗?
问题描述
对于标题中的问题不是很清楚,我提前道歉。我正在尝试使用 tf-agents 训练强化学习策略,其中存在一些影响状态的不可观察的随机变量。
例如,考虑标准的 CartPole 问题,但我们在速度随时间变化的地方添加风。我不想训练一个依赖于每一步观察风速的代理;相反,我希望风影响杆的位置和角速度,并且代理学习适应,就像在无风环境中一样。然而,在这个例子中,我们需要当前时间的风速与前一时间的风速相关,例如我们不希望风速从时间 t 的 10m/s 变为 -10m/s时间 t+1。
我要解决的问题是如何跟踪外生变量的状态,而不使其成为训练代理时输入神经网络的观察规范的一部分。任何指导将不胜感激。
解决方案
是的,这完全没有问题。您的环境对象( or 的子类PyEnvironment
)TFEnvironment
可以在其中做任何您想做的事情。该observation_spec
要求仅与您在step
andreset
方法中输出的 TimeStep 相关(更准确地说是在您的_step
and_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()
...
推荐阅读
- javascript - 通过 GET 调用 Firebase 云函数并返回参数
- c# - 如何在 Unity 上使用关键字识别器或 Windows 上的任何内容识别小词?
- javascript - 如何通过javascript在datalist上使用onchange函数?
- javascript - 无法从 Javascript 文件导入 Vue 库
- python - 如何从类中创建不可调用的方法?
- android - 如何在多个模块中使用 Koin?
- javascript - Maximo - 根据 METERDATA 的入站值在 MeterReading 中设置值
- android - 通过 wifi 调试连接到特定 USB 控制器的应用程序
- android - Android Wrap Shell 脚本无法按预期工作
- sqlite - Mono 上带有 SQLite 的 EF Core:找不到 e_sqlite3