外部环境与应用#

在许多情况下,RLlib“驱动”RL环境并没有意义。例如,当你在一个具有自身执行循环的复杂模拟器(如游戏引擎或机器人模拟器)中训练策略时。一种自然且用户友好的方法是反转这种设置,即——不是让RLlib“驱动”环境——而是让模拟器中的智能体完全控制自己的驱动。一个由RLlib支持的外部服务将可用于查询单个动作或接受批量样本数据。该服务将负责训练策略的任务,但不会对模拟器的步进频率或频率施加任何限制。

../_images/external_env_setup_client_inference.svg

具有客户端推理的外部应用:外部模拟器(例如游戏引擎)通过一个TCP兼容的自定义EnvRunner连接到RLlib(作为服务器运行)。模拟器会不时地向服务器发送数据批次,并接收权重更新。为了获得更好的性能,动作是在客户端本地计算的。#

RLlib为此目的提供了一个名为RLlink外部消息传递协议,并且可以选择自定义您的EnvRunner类,以便通过RLlink与一个或多个客户端进行通信。这里有一个基于TCP的EnvRunner实现的示例,它使用了RLlink:可在【这里】找到。它还包含一个用于测试的Dummy(CartPole)客户端,并且可以作为您的外部应用程序或模拟器应如何使用RLlink协议的模板。

注意

外部应用程序支持仍在RLlib的新API堆栈上进行中。Ray团队正在为自定义EnvRunner实现(除了已有的基于TCP的实现)以及各种客户端非Python的RLlib适配器(例如,针对流行的游戏引擎和其他模拟软件)提供更多示例。

示例:外部客户端连接到基于TCP的EnvRunner#

基于TCP的EnvRunner实现的RLlink示例可在【这里】找到。有关完整的端到端示例,请参见【这里】

您可以随意修改自定义EnvRunner的基础逻辑,例如,您可以实现一个基于共享内存的通信层(而不是基于TCP的)。