引入外部变量¶
外部变量是指会对当前系统产生影响,但是不会被当前系统影响的变量。例如在机器人控制任务中,室内的灯光状况通常会影响机器人传感器读数, 并且传感器数据也会影响机器人在室内的运动策略。灯光状况并不受机器人运动策略的影响,因此可以将其视为一个外部变量。在自动驾驶任务中, 交通标志和红绿灯等交通规则是一个外部变量,因为它们通常是由道路管理机构制定,而不受自动驾驶车辆的影响。
外部变量通常是由外部因素引起的,并且不能被当前的系统所操纵或控制。在建模过程中,引入外部变量可以使模型更加准确。
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_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 SDK时,我们应根据业务逻辑在决策流图中定义或构建外部因素,这将使REVIVE学习环境模型更准确、更接近真实。