使用REVIVE SDK进行工业机器控制¶
工业机器控制任务描述¶
工业基准(IB)是一个强化学习基准环境,旨在模拟各种工业控制任务中的特性,例如:风力或燃气轮机、化学反应器。它囊括了真实世界中工业领域常见的诸多问题, 如:连续状态和动作空间的高维度性、延迟奖励、复杂噪声模式以及多个反应目标的高随机性。我们还通过将系统状态的两个维度添加到观察空间,来计算每个步骤的即时奖励, 从而对原始工业基准环境进行了数据增广。由于IB本身是一个高维和高度随机的环境,在这个环境上进行采样的时候,并不会对动作数据进行加噪的处理。
Action Space |
Continuous(3,) |
Observation |
Shape (180,) |
动作空间¶
动作空间由连续的 3 维向量组成,详细信息请参考 http://polixir.ai/research/neorl。
观察空间¶
状态是一个 180 维向量。事实上,每个时刻的观测是 6 维向量,数据集自动拼接了前 29 帧的数据,因此当前观测的维度为 \(180=6*30\)。详细信息请参考 http://polixir.ai/research/neorl。
工业机器控制任务目标¶
需要让工业机器的各项指标维持在目标值附近,详细信息请参考 http://polixir.ai/research/neorl。
使用REVIVE SDK训练控制策略¶
REVIVE SDK是一个历史数据驱动的工具,根据文档教程部分的描述,在工业机器控制任务上使用REVIVE SDK可以分为以下几步:
处理历史决策数据;
结合业务场景和收集的历史数据构建 决策流图和数组数据,其中决策流图主要描述了业务数据的交互逻辑, 使用
.yaml
文件进存储,数组数据存储了决策流图中定义的节点数据,使用.npz
或.h5
文件进行存储。有了上述的决策流图和数组数据,REVIVE SDK已经可以进行虚拟环境模型的训练。但为了获得更优的控制策略,需要根据任务目标定义 奖励函数 ,奖励函数定义了 策略的优化目标,可以指导控制策略使得工业机器更加稳定。
定义完 决策流图, 训练数据 和 奖励函数 之后,我们就可以 使用REVIVE SDK开始虚拟环境模型训练和策略模型训练。
最后将REVIVE SDK训练的策略模型进行上线测试。
准备数据¶
我们使用Neorl中的IB数据集和奖励函数来构建训练任务。详细信息请参考 http://polixir.ai/research/neorl.
定义决策流图¶
IB 任务的完整训练过程涉及到异构决策流图加载。详情可以参考 异构决策流图加载。
以下是 训练虚拟环境 时的 .yaml
文件:
metadata:
columns:
- obs_0:
dim: obs
type: continuous
- obs_1:
dim: obs
type: continuous
...
- obs_179:
dim: obs
type: continuous
- obs_0:
dim: current_next_obs
type: continuous
- obs_1:
dim: current_next_obs
type: continuous
...
- obs_5:
dim: current_next_obs
type: continuous
- action_0:
dim: action
type: continuous
- action_1:
dim: action
type: continuous
- action_2:
dim: action
type: continuous
graph:
#action:
#- obs
current_next_obs:
- obs
- action
next_obs:
- obs
- current_next_obs
expert_functions:
next_obs:
'node_function' : 'expert_function.next_obs'
以下是 训练策略 时的 .yaml
文件:
metadata:
columns:
- obs_0:
dim: obs
type: continuous
- obs_1:
dim: obs
type: continuous
...
- obs_179:
dim: obs
type: continuous
- obs_0:
dim: current_next_obs
type: continuous
- obs_1:
dim: current_next_obs
type: continuous
...
- obs_5:
dim: current_next_obs
type: continuous
- action_0:
dim: action
type: continuous
- action_1:
dim: action
type: continuous
- action_2:
dim: action
type: continuous
graph:
action:
- obs
current_next_obs:
- obs
- action
next_obs:
- obs
- current_next_obs
expert_functions:
next_obs:
'node_function' : 'expert_function.next_obs'
#nodes:
# action:
# step_input: True
构建奖励函数¶
这里我们定义了 IB 任务中策略节点的奖励函数:
import torch
from typing import Dict
def get_reward(data : Dict[str, torch.Tensor]) -> torch.Tensor:
obs = data["obs"]
next_obs = data["next_obs"]
single_reward = False
if len(obs.shape) == 1:
single_reward = True
obs = obs.reshape(1, -1)
if len(next_obs.shape) == 1:
next_obs = next_obs.reshape(1, -1)
CRF = 3.0
CRC = 1.0
fatigue = next_obs[:, 4]
consumption = next_obs[:, 5]
cost = CRF * fatigue + CRC * consumption
reward = -cost
if single_reward:
reward = reward[0].item()
else:
reward = reward.reshape(-1, 1)
return reward
使用REVIVE SDK训练一个控制策略¶
REVIVE SDK已经提供了训练所需的数据和代码,详情请参考 REVIVE SDK源码库。
完成REVIVE SDK的安装后,可以切换到 examples/task/IB
目录下,运行下面的 Bash 命令开启虚拟环境模型训练和策略模型训练。在训练过程中,我们可以随时使用tensorboard打开日志目录以监控训练过程。当REVIVE SDK完成虚拟环境模型训练和策略模型训练后。
我们可以在日志文件夹( logs/<run_id>
)下找到保存的模型( .pkl
或 .onnx
)。
python train.py -df data/ib.npz -cf data/ib_env.yaml -rf data/ib_reward.py -rcf data/config.json -vm tune -pm None --run_id revive
python train.py -df data/ib.npz -cf data/ib_policy.yaml -rf data/ib_reward.py -rcf data/config.json -vm None -pm tune --run_id revive
在IB环境中测试训练得到的策略模型¶
训练完成后,可以用提供的jupyter notebook脚本对完成训练的策略性能进行测试。 具体请参考 jupyter notebook。