模仿MPC控制器车道保持辅助
这个例子展示了如何训练、验证和测试模仿行为的深层神经网络模型预测控制器的一个汽车车道保持辅助系统。在这个例子中,您也比较深的行为与原来的神经网络控制器。
模型预测控制(MPC)解决了约束二次规划(QP)实时优化问题基于植物的当前状态(有关更多信息,请参见模型预测控制是什么?(模型预测控制工具箱))。因为MPC解决优化问题的一种开环的方式,你可以替换与深层神经网络控制器。评估一个深层神经网络可以更计算效率比实时解决QP问题。
如果网络的训练足够遍历应用程序的状态,您可以创建一个控制器的合理近似的行为。然后可以部署的网络控制应用程序。您还可以使用网络作为训练演员的温暖的起点的强化学习代理网络。例如,看到的火车DDPG代理与Pretrained演员网络。
MPC控制器设计
设计一个车道保持辅助MPC控制器。要做到这一点,首先创建一个动态模型。
(sys, Vx) = createModelForMPCImLKA;
创建和设计MPC控制器对象mpcobj
。此外,创建一个mpcstate
设置初始控制器状态对象。在控制器设计的详细信息,类型编辑createMPCobjImLKA
。
[mpcobj, initialState] = createMPCobjImLKA(系统);
更多信息在设计模型预测控制器对于车道保持辅助应用程序,看看车道保持辅助系统使用模型预测控制(模型预测控制工具箱)和车道保持辅助车道检测(模型预测控制工具箱)。
准备输入数据
中的数据InputDataFileImLKA.mat
是由计算机随机生成的MPC控制行动,之前的控制行为,并测量干扰。生成自己的训练数据,使用collectDataImLKA
函数。
对于这个示例,负载的输入数据InputDataFileImLKA.mat
。
dataStruct =负载(“InputDataFileImLKA.mat”);数据= dataStruct.Data;
数据集的列命令如下:
横向速度
偏航角速率
横向偏差
相对偏航角
以前的转向角(控制变量)
测量扰动(道路偏航率:纵向速度*曲率( ))
成本函数值
MPC迭代
转向角计算MPC控制器:
将输入数据分为训练、验证和测试数据。首先,确定验证数据的行数根据给定的百分比。
totalRows =大小(数据,1);validationSplitPercent = 0.1;numValidationDataRows =地板(validationSplitPercent * totalRows);
确定测试数据的行数根据给定的百分比。
testSplitPercent = 0.05;numTestDataRows =地板(testSplitPercent * totalRows);
随机从输入数据中提取验证和测试数据集。为此,首先随机数据集提取足够的行。
randomIdx = randperm (totalRows numValidationDataRows + numTestDataRows);randomData =数据(randomIdx:);
将随机数据划分为验证和测试数据。
validationData = randomData (1: numValidationDataRows,:);testData = randomData (numValidationDataRows + 1:最终,);
作为训练数据提取剩余的行。
trainDataIdx = setdiff (1: totalRows, randomIdx);trainData =数据(trainDataIdx:);
随机化的训练数据。
numTrainDataRows =大小(trainData, 1);shuffleIdx = randperm (numTrainDataRows);shuffledTrainData = trainData (shuffleIdx:);
重塑训练和验证数据为使用四维矩阵trainNetwork
。
numObs = 6;numActions = 1;trainInput = shuffledTrainData (: 1:6);trainOutput = shuffledTrainData (: 9);validationInput = validationData (: 1:6);validationOutput = validationData (: 9);validationCellArray = {validationInput, validationOutput};
重塑使用的测试数据预测
。
testDataInput = testData (: 1:6);testDataOutput = testData (: 9);
创建深层神经网络
深层神经网络架构使用以下层。
imageInputLayer
神经网络的输入层。fullyConnectedLayer
增加输入权重矩阵,然后添加一个偏差向量。reluLayer
是神经网络的激活函数。tanhLayer
限制范围的价值[1]。scalingLayer
价值尺度范围[-1.04,1.04],这都限制了范围的转向角(-60、60)。regressionLayer
定义了损失函数的神经网络。
创建深层神经网络,训练后模仿MPC控制器。
imitateMPCLayers = [featureInputLayer (numObs) fullyConnectedLayer (45) reluLayer fullyConnectedLayer (45) reluLayer fullyConnectedLayer (45) reluLayer fullyConnectedLayer (numActions) tanhLayer scalingLayer(规模= 1.04)regressionLayer);
画出网络。
情节(layerGraph (imitateMPCLayers))
深层神经网络训练
指定培训选项。
选择= trainingOptions (“亚当”,…Verbose = false,…情节=“训练进步”,…洗牌=“every-epoch”,…MaxEpochs = 30,…MiniBatchSize = 512,…ValidationData = validationCellArray,…InitialLearnRate = 1 e - 3,…GradientThresholdMethod =“绝对值”,…ExecutionEnvironment =“cpu”,…GradientThreshold = 10,…ε= 1 e-8);
训练神经网络。查看详细的培训信息在命令窗口中,设置详细的
培训选项真正的
。
imitateMPCNetwork = trainNetwork (…trainInput,…trainOutput,…imitateMPCLayers,…选项);
训练的神经网络停止后最终的迭代。
培训和验证每个mini-batch损失几乎是相同的,这意味着不overfit训练网络。
测试训练网络
检查深层神经网络训练的回报转向角度的MPC控制器控制行为的测试输入数据。计算网络的输出使用预测
函数。
predictedTestDataOutput =预测(imitateMPCNetwork testDataInput);
计算均方误差(RMSE)之间的网络输出和测试数据。
testRMSE =√意味着(testDataOutput - predictedTestDataOutput) ^ 2));流(“测试数据RMSE = % d \ n”,testRMSE);
测试数据RMSE = 3.251544 e-02
小RMSE值表示网络输出密切繁殖MPC控制器输出。
比较网络训练和MPC控制器
比较的性能MPC控制器和神经网络训练的深度,使用车辆工厂运行闭环仿真模型。
生成随机初始条件的车辆不属于原始输入数据集,值选择从以下范围:
横向速度 - (2,2)m / s
偏航角速率 范围(-1.04,1.04)rad / s
横向偏差 范围(1,1)m
相对偏航角 rad -范围(-0.8,0.8)
最后转向角(控制变量) rad -范围(-1.04,1.04)
测量扰动(道路偏航率,定义为纵向速度*曲率( ))——范围(-0.01,0.01),最低路半径100米
rng (5 e7) (x0,情况,ρ)= generateRandomDataImLKA(数据);
设置初始状态和控制作用mpcstate
对象。
initialState。工厂= x0;initialState。LastMove =情况;
从货币政策委员会中提取样本的时间控制器。同时,设置仿真步骤的数目。
Ts = mpcobj.Ts;Tsteps = 30;
获得一个
和B
状态矩阵的车辆模型。
一个= sys.A;B = sys.B;
初始化状态和MPC控制器的输入轨迹模拟。
xHistoryMPC = repmat (x0, Tsteps + 1, - 1);Tsteps uHistoryMPC = repmat(情况',1);
运行的MPC控制器和闭环仿真植物使用mpcmove
函数。
为k = 1: Tsteps%获得植物输出:xk = xHistoryMPC (k) ';%计算使用MPC控制器控制动作英国= mpcmove (mpcobj initialState xk, 0 (1、4), Vx *ρ);%存储控制动作:uHistoryMPC (k) =英国;%更新植物状态使用控制动作:xHistoryMPC (k + 1) = (* xk + B *[英国;Vx *ρ])';结束
初始化状态和输入轨迹深层神经网络模拟。
xHistoryDNN = repmat (x0, Tsteps + 1, - 1);Tsteps uHistoryDNN = repmat(情况',1);lastMV =情况;
运行一个闭环仿真训练的网络和植物。的neuralnetLKAmove
函数计算深层神经网络输出使用预测
函数。
为k = 1: Tsteps%获得植物输出:xk = xHistoryDNN (k) ';%预测下一步使用训练网络英国= neuralnetLKAmove (lastMV imitateMPCNetwork, xk,ρ);%存储控制动作:uHistoryDNN (k) =英国;%更新最后MV下一步lastMV =英国;%更新植物状态使用控制动作:xHistoryDNN (k + 1) = (* xk + B *[英国;Vx *ρ])';结束
情节比较结果MPC控制器和神经网络训练的深度(款)轨迹。
plotValidationResultsImLKA (Ts,…xHistoryDNN uHistoryDNN,…xHistoryMPC uHistoryMPC);
深层神经网络成功地模仿MPC控制器的行为。车辆状态和控制行动轨迹控制器和深层神经网络紧密结合。
另请参阅
功能
trainNetwork
|预测
|mpcmove
(模型预测控制工具箱)
对象
SeriesNetwork
|货币政策委员会
(模型预测控制工具箱)
相关的例子
- 火车DDPG代理与Pretrained演员网络
- 车道保持辅助系统使用模型预测控制(模型预测控制工具箱)
- 车道保持辅助车道检测(模型预测控制工具箱)
更多关于
- 模型预测控制是什么?(模型预测控制工具箱)