引入外部变量

外部变量是指会对当前系统产生影响,但是不会被当前系统影响的变量。例如在机器人控制任务中,室内的灯光状况通常会影响机器人传感器读数, 并且传感器数据也会影响机器人在室内的运动策略。灯光状况并不受机器人运动策略的影响,因此可以将其视为一个外部变量。在自动驾驶任务中, 交通标志和红绿灯等交通规则是一个外部变量,因为它们通常是由道路管理机构制定,而不受自动驾驶车辆的影响。

外部变量通常是由外部因素引起的,并且不能被当前的系统所操纵或控制。在建模过程中,引入外部变量可以使模型更加准确。

REVIVE SDK 支持引入外部变量作为决策流图的输入,外部变量在决策流图中只作为输入使用,并不配置节点进行输出。 例如在:冰箱案例 中, 冰箱内部温度会受冰箱门开关状态的影响,而冰箱门开关状态完全是人为决定的,不会被冰箱自身影响,因此冰箱门开关状态被作为外部变量引入。

Note

外部变量不是使用REVIVE的必须条件。只有某个变量会影响决策流图的其余节点,而不会被其余节点影响时才应该将该节点设置为外部变量。

我们通过下面的 .yaml 来展示在冰箱案例中外部变量的使用:

metadata:

   graph:
     action:
     - temperature
     next_temperature:
     - action
     - temperature
     - door_open

   columns:
   - obs_temp:
       dim: temperature
       type: continuous
       max: 20
       min: -20
   - power_action:
       dim: action
       type: continuous
       max: 10
       min: 0
   - factor_door_state:
       dim: door_open
       type: continuous

在上述 .yaml 中, door_openactiontemperature 一起作为 next_temperature 节点的输入。 但是 door_open 既不是转移节点,也不是输出节点,它作为静态变量节点。因此 door_open 不能被决策流图中的其它节点影响。

如果假设 door_open 会受到温度的影响,当温度达到一定条件时,冰箱门会自动打开, 那么就需要在上述的 .yaml 文件中增加指向 door_open 的边。如下所示 :

metadata:

   graph:
     action:
     - temperature
     next_temperature:
     - action
     - temperature
     - door_open
     next_door_open:
     - next_temperature

   columns:
   - obs_temp:
       dim: temperature
       type: continuous
       max: 20
       min: -20
   - power_action:
       dim: action
       type: continuous
       max: 10
       min: 0
   - factor_door_state:
       dim: door_open
       type: continuous

在使用REVIVE SDK时,我们应根据业务逻辑在决策流图中定义或构建外部因素,这将使REVIVE学习环境模型更准确、更接近真实。