通过因果推理辅助构建决策流图 ============================================================= 当我们不知道如何使用现有数据构建决策流时,可以借助REVIVE SDK提供的因果推理工具自动构建决策流 ``*.yaml`` 文件。 该工具是基于 `因果推断 `_ 实现的。 借助因果推断方法,我们也可以简单地检查离线数据中哪些维度对学习环境或策略模型有用,以及这些维度的状态与行为之间的联系。 该工具是纯数据驱动的。在该工具的帮助下,用户可以很容易地获得生成的决策流图, 这可能有助于REVIVE更准确地学习虚拟环境并推断出更有效的策略。 该工具可以基于提供的 ``.yaml`` 和 ``.npz`` 文件自动生成决策流图。 .. note:: 用户不必在 ``.yaml`` 文件中定义 ``graph`` 部分,REVIVE SDK会通过因果推断算法自动生成 ``graph``。 在某些情况下,生成的决策流图可能与用户的潜在想法有所不同。因此,用户可以在使用REVIVE训练环境模型和策略之前,检查生成的决策流图的合理性。 下面,我们使用一个任务示例来展示如何 :doc:`使用REVIVE SDK 控制着陆器悬停 <../task_examples/Use_revive_to_control_rocket_cn>` 在该任务中,我们只需要构建 ``.yaml`` 中的 ``columns`` 部分,如下: .. code:: yaml metadata: columns: - obs_0: dim: obs type: continuous - obs_1: dim: obs type: continuous - obs_2: dim: obs type: continuous - obs_3: dim: obs type: continuous - action: dim: action type: category values: [0,1,2,3] 在 ``.yaml`` 文件中,我们不需要定义 ``graph`` 部分。 之后,我们将此 ``.yaml`` 文件与相应的 ``.npz`` 文件一起提供给因果推断工具。 该工具将使用用户定义的名称来输出重构的 ``.yaml`` 和 ``.npz`` 文件。 重构的 ``.yaml`` 示例如下: .. code:: yaml metadata: columns: - obs_0: dim: action_realated_obs type: continuous - obs_1: dim: action_realated_obs type: continuous - obs_2: dim: translation_related_obs type: continuous - obs_3: dim: translation_related_obs type: continuous - action: dim: action type: category values: - 0 - 1 - 2 - 3 graph: action: - action_realated_obs next_action_realated_obs: - action_realated_obs - translation_related_obs - action next_translation_related_obs: - action_realated_obs - translation_related_obs - action 在生成的 ``.yaml`` 文件中,因果推断工具只构建 ``graph`` 部分。 ``columns`` 部分是不变的。 生成的 ``.yaml`` 文件显示,因果推断工具将 ``obs`` 数据的四个维度分为两个节点。前两个维度具有新的节点名称 ``action_realated_obs`` , 该节点与 ``action`` 直接关联。 ``obs`` 的另两个维度现在被命名 为 ``translation_related_obs`` 。拆分的两个 ``obs`` 节点被视为两个过渡节点,如 ``graph`` 所示。 新构建的 ``graph`` 显示了 ``obs`` 节点和 ``action`` 节点的因果关系。值得注意的是, 我们提供的数据是由基于坐标信息的规则模型生成的。换言之,数据中的 ``action`` 仅由坐标信息决定。可以看到的是, 因果推断工具可以正确的解析数据节点的因果关系,将原始 ``obs`` 节点中的坐标信息与 ``action`` 节点进行关联, 避免了其它不相关的信息的干扰。 对于构建决策流图比较困难的任务,REVIVE SDK的因果推理工具可能是一个不错的选择,用户也可以对生成的决策流图进行调整。 因果推断工具还可以推断数据中那些没用的维度。在上述任务中,比如 ``obs`` 节点数据中具有两维不相关的随机特征。 因果推断工具可以发现 ``obs`` 自动将附加的特征 ``obs_3`` 和 ``obs_4`` 被标记为 ``useless_obs`` 节点, 这意味着这两个维度被从 ``obs`` 中删除。这个结果也符合我们的认知。 .. code:: yaml metadata: columns: - obs_0: dim: obs type: continuous - obs_1: dim: obs type: continuous - obs_2: dim: obs type: continuous - obs_3: dim: useless_obs type: continuous - obs_4: dim: useless_obs type: continuous - action: dim: action type: continuous graph: action: - obs next_obs: - obs - action