使用静态变量
静态变量通常是指会对当前系统产生影响,但不会被当前系统影响的变量。例如在机器人控制任务中,室内的灯光状况通常会影响机器人传感器读数,并且传感器数据也会影响机器人在室内的运动策略。灯光状况并不受机器人运动策略的影响,因此可以将其视为一个静态变量。在自动驾驶任务中,交通标志和红绿灯等交通规则是静态变量,因为它们通常由道路管理机构制定,而不受自动驾驶车辆的影响。
静态变量通常由外部因素引起,并且不能被当前系统所操纵或控制。在建模过程中,引入静态变量可以使模型更加准确。
REVIVE 支持引入静态变量作为决策流图的输入,静态变量在决策流图中只作为输入使用,并不配置节点进行输出。例如在 冰箱温度控制任务 中,冰箱内部温度会受冰箱门开关状态的影响,而冰箱门开关状态完全是人为决定的,不会被冰箱自身影响,因此冰箱门开关状态被作为静态变量引入。
重要提示
静态变量不是使用 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_open 与 action 和 temperature 一起作为 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 时,我们应根据业务逻辑在决策流图中定义或构建外部因素,这将使 REVIVE 学习的环境模型更准确、更接近真实。