异构决策流图加载¶
在虚拟环境训练完成后,我们可以进行策略训练了。但一些情况下,我们希望在训练策略时,一些节点的输入输出相对于该节点在虚拟环境的学习决策流中会有一些改变。
简而言之,训练虚拟环境时的决策流图与训练策略时的决策流图( .yaml
文件)不一致,这就是异构决策流图的功能。
这时,REVIVE SDK会自动将环境模型中的没有改变的节点复用到新的节点,而发生改变的节点则按新的 .yaml
文件来进行初始化。
假设我们正在训练机械控制任务,原始的策略是PID控制策略。在训练环境中,我们构建了PID控制的专家函数作为决策流图中的控制节点。 在训练策略时,我们希望能够获得一个更优的控制策略。为此,我们需要将控制节点初始化为一个可学习的神经网络节点, 这样它可以在训练中逐步学习和优化控制策略。这就是异构决策流图的功能,将虚拟环境中的控制节点转换为可学习的节点, 使得在训练策略时可以使用更灵活、更优化的策略。下面是实现的示例:
下面是训练环境时的 .yaml
文件,可以看到action节点是绑定了PID专家函数的。
metadata:
graph:
action:
- observation
next_observation:
- action
- observation
columns:
...
expert_functions:
action:
'node_function' : 'dynamics.pid_policy'
下面是训练策略时的 .yaml
文件,可以看到action节点去掉了绑定的专家函数,初始化为可学习的神经网络节点。
metadata:
graph:
action:
- observation
next_observation:
- action
- observation
columns:
...
反之同样适用,如果某个节点在训练环境中是非固定的,我们可以使用神经网络节点进行学习。然后在训练策略时, 我们可以将其固定在预设的模式之下,并为该节点绑定相应的专家函数。 这样可以确保该节点在进行策略实际应用时得到更加稳定和可靠的效果。 这也是异构决策流图的优势所在,可以根据具体情况选择不同的节点类型,以满足不同的训练和应用需求。
在 使用REVIVE SDK进行工业机器控制 案例中, 由于历史数据中采集了多个控制策略的混合数据,因此对策略控制节点进行完美的学习非常困难。为了应对这种情况,在训练虚拟环境时, 我们将控制节点定义为外部变量,只初始化环境转移节点作为可学习节点。在进行策略训练时,我们会重新初始化控制节点作为可学习的神经网络节点, 以优化训练策略并获得更好的性能表现。这种方法在实际应用中能够有效地提高模型的准确性和鲁棒性,以应对训练数据不完备或者不一致的情况。