跳转到内容

使用静态变量

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

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

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

重要提示

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

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

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 的边。如下所示 :

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