非线性MPC优化求解器的配置
默认情况下,非线性MPC控制器解决非线性规划问题使用fmincon
函数与SQP算法,这需要优化工具箱™软件。如果没有“优化工具箱”软件,可以指定自己的自定义非线性求解器。
求解器决策变量
对于非线性MPC控制器tk时,非线性优化问题使用以下决策变量:
从时间上预测状态值tk + 1来tk + p.这些值对应于第2行到第2行p+1
X
输入代价参数,约束函数,其中p是预测视界。从时间上预测操纵变量tk来tk + p - 1.这些值对应于第1行到第1行的操作变量列p的
U
输入成本的参数,以及约束函数。
因此,决策变量的个数NZ等于p(Nx+Nmv) + 1,Nx是状态数,Nmv是被操纵变量的数量,+1是全局松弛变量。
明确最初的猜测
合理配置的标准线性MPC优化问题具有唯一解。然而,非线性MPC优化问题通常允许多个解(局部极小值),并且求解者很难找到一个解。万博 尤文图斯在这种情况下,重要的是在全局最优附近提供一个良好的起点。
在闭环模拟期间,最好的实践是温暖的开始你的非线性求解器。为此,使用来自前一个控制区间的预测状态和被操纵的可变轨迹作为当前控制区间的初始猜测。在仿真万博1manbetx软件®,非线性MPC控制器Block被配置为默认使用这些轨迹作为初始猜测。要在命令行中使用这些轨迹作为初始猜测:
返回
选择
参数。nlmpcmove
.这nlmpcmoveopt
对象包含在前面调用中指定的任何运行时选项nlmpcmove
.它还包括对状态的初始猜测(opt.X0
)和操作变量(opt.MV0
)轨迹,全局松弛变量(opt.Slack0
).将该对象作为
选项
输入参数nlmpcmove
下一个控制间隔。
即使您没有指定任何其他运行时选项,这些命令行模拟步骤也是最佳实践。
配置fmincon
选项
默认情况下,非线性MPC控制器优化他们的控制移动使用fmincon
函数。第一次创建控制器时,优化。SolverOptions
的属性nlmpc
对象包含标准fmincon
具有以下非默认设置的选项:
使用
SQP
算法(SolverOptions。一个lgorithm = 'sqp'
)使用目标函数梯度(
SolverOptions。objecvegradient = 'true'
)使用限制渐变(
SolverOptions。specyconstraintgradient = 'true'
)不向命令窗口显示优化消息(
SolverOptions。Display = 'none'
)
这些非默认选项通常可以提高非线性MPC控制器的性能。
您可以修改应用程序的求解器选项。例如,要指定应用程序的最大求解器迭代次数,请设置SolverOptions。麦克斯特
.有关可用求解器选项的详细信息,请参见fmincon
(优化工具箱).
一般情况下,不应该修改SpecifyObjectiveGradient
而且SpecifyConstraintGradient
选项,因为这样做会显著影响控制器性能。例如,约束梯度矩阵是稀疏的,并且设置SpecifyConstraintGradient
设为false将导致求解器计算已知为零的梯度。
指定自定义求解器
如果没有“优化工具箱”软件,可以指定自己的自定义非线性求解器。为此,创建一个自定义包装器函数,将解算器函数的接口转换为与非线性MPC控制器所期望的接口匹配。您的自定义函数必须是MATLAB®脚本或mat文件在MATLAB路径。有关显示模板自定义求解器包装器函数的示例,请参见使用自定义求解器的非线性MPC优化结核病治疗.
您可以使用的非线性规划求解器开发Embotech AG)模拟和生成非线性MPC控制器的代码。有关更多信息,请参见使用Embotech FORCESPRO求解器实现MPC控制器.
要配置nlmpc
对象来使用自定义求解器包装器函数,请将其设置为优化。CustomSolverFcn
下列方式之一的财产:
当前工作文件夹或MATLAB路径中的函数名称,指定为字符串或字符向量
优化。CustomSolverFcn =“myNLPSolver”;
当前工作文件夹或MATLAB路径中函数的句柄
优化。CustomSolverFcn = @myNLPSolver;
您的自定义求解器包装器函数必须具有签名:
函数[zopt,cost,flag] = myNLPSolver(FUN,z0,A,B,Aeq,Beq,LB,UB,NLCON)
该表描述了该函数的输入和输出,其中:
NZ是决策变量的个数。
米cineq是线性不等式约束的个数。
米量表信是线性等式约束的个数。
Ncineq是非线性不等式约束的个数。
N量表信是非线性等式约束的个数。
论点 | 输入/输出 | 描述 |
---|---|---|
有趣的 |
输入 | 最小化的非线性代价函数,指定为带有签名的函数句柄: [F,G] = FUN(z) 和参数:
|
z0 |
输入 | 决策变量值的初始猜测,指定为长度向量NZ |
一个 |
输入 | 线性不等式约束数组,指定为米cineq——- - - - - -NZ数组中。在一起,一个 而且B 定义表单的约束
. |
B |
输入 | 线性不等式约束向量,指定为长度的列向量米cineq.在一起,一个 而且B 定义表单的约束
. |
Aeq |
输入 | 线性等式约束数组,指定为米量表信——- - - - - -NZ数组中。在一起,Aeq 而且说真的 定义表单的约束
. |
说真的 |
输入 | 线性相等约束向量,指定为长度的列向量米量表信.在一起,Aeq 而且说真的 定义表单的约束
. |
磅 |
输入 | 决策变量的下界,指定为长度的列向量NZ,在那里 . |
乌兰巴托 |
输入 | 决策变量的上界,指定为长度的列向量NZ,在那里 . |
NLCON |
输入 | 非线性约束函数,指定为带有签名的函数的句柄: [cineq,c,Gineq,Geq] = NLCON(z) 和参数:
|
zopt |
输出 | 最优决策变量值,作为长度向量返回NZ. |
成本 |
输出 | 作为标量返回的最优代价。 |
国旗 |
输出 | 退出标志,作为下列之一返回:
|
当你实现你的自定义求解函数时,最好的做法是让你的求解器使用非线性MPC控制器提供的代价和约束梯度信息。
如果您无法使用自定义求解器获得解决方案,请尝试确定一个您知道解决方案的特殊条件,并在此条件下启动求解器。如果解算器偏离了这个初始猜测:
检查预测模型中状态和输出函数的有效性。
如果您正在使用自定义成本函数,请确保它是正确的。
如果您正在使用标准MPC成本函数,请验证控制器调优权重。
确保所有约束条件在初始猜测时都是可行的。
如果您正在提供自定义雅可比函数,请使用
validateFcns
.