主要内容

非线性MPC优化求解器的配置

默认情况下,非线性MPC控制器解决非线性规划问题使用fmincon函数与SQP算法,这需要优化工具箱™软件。如果没有“优化工具箱”软件,可以指定自己的自定义非线性求解器。

求解器决策变量

对于非线性MPC控制器tk时,非线性优化问题使用以下决策变量:

  • 从时间上预测状态值tk + 1tk + p.这些值对应于第2行到第2行p+1X输入代价参数,约束函数,其中p是预测视界。

  • 从时间上预测操纵变量tktk + p - 1.这些值对应于第1行到第1行的操作变量列pU输入成本的参数,以及约束函数。

因此,决策变量的个数NZ等于pNx+Nmv) + 1Nx是状态数,Nmv是被操纵变量的数量,+1是全局松弛变量。

明确最初的猜测

合理配置的标准线性MPC优化问题具有唯一解。然而,非线性MPC优化问题通常允许多个解(局部极小值),并且求解者很难找到一个解。万博 尤文图斯在这种情况下,重要的是在全局最优附近提供一个良好的起点。

在闭环模拟期间,最好的实践是温暖的开始你的非线性求解器。为此,使用来自前一个控制区间的预测状态和被操纵的可变轨迹作为当前控制区间的初始猜测。在仿真万博1manbetx软件®,非线性MPC控制器Block被配置为默认使用这些轨迹作为初始猜测。要在命令行中使用这些轨迹作为初始猜测:

  1. 返回选择参数。nlmpcmove.这nlmpcmoveopt对象包含在前面调用中指定的任何运行时选项nlmpcmove.它还包括对状态的初始猜测(opt.X0)和操作变量(opt.MV0)轨迹,全局松弛变量(opt.Slack0).

  2. 将该对象作为选项输入参数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)

和参数:

  • z-决策变量,指定为长度向量NZ

  • F—成本,以标量形式返回。

  • G-成本函数梯度相对于决策变量,作为长度的列向量返回NZ,在那里 G F / z

z0 输入 决策变量值的初始猜测,指定为长度向量NZ
一个 输入 线性不等式约束数组,指定为cineq——- - - - - -NZ数组中。在一起,一个而且B定义表单的约束 一个 z B
B 输入 线性不等式约束向量,指定为长度的列向量cineq.在一起,一个而且B定义表单的约束 一个 z B
Aeq 输入 线性等式约束数组,指定为量表信——- - - - - -NZ数组中。在一起,Aeq而且说真的定义表单的约束 Aeq z 说真的
说真的 输入 线性相等约束向量,指定为长度的列向量量表信.在一起,Aeq而且说真的定义表单的约束 Aeq z 说真的
输入 决策变量的下界,指定为长度的列向量NZ,在那里 z
乌兰巴托 输入 决策变量的上界,指定为长度的列向量NZ,在那里 z 乌兰巴托
NLCON 输入

非线性约束函数,指定为带有签名的函数的句柄:

[cineq,c,Gineq,Geq] = NLCON(z)

和参数:

  • z-决策变量,指定为长度向量NZ

  • cineq-非线性不等式约束值,作为长度的列向量返回Ncineq

  • 量表信-非线性等式约束值,作为长度的列向量返回N量表信

  • Gineq-关于决策变量的非线性不等式约束梯度,返回为NZ——- - - - - -Ncineq数组, Gineq j cineq j / z

  • 组的-关于决策变量的非线性等式约束梯度,返回为NZ——- - - - - -N量表信数组, 组的 j 量表信 j / z

zopt 输出 最优决策变量值,作为长度向量返回NZ
成本 输出 作为标量返回的最优代价。
国旗 输出

退出标志,作为下列之一返回:

  • 1-优化成功(满足一阶优化条件)

  • 0-次优解(达到的最大迭代次数)

  • 负值-优化失败

当你实现你的自定义求解函数时,最好的做法是让你的求解器使用非线性MPC控制器提供的代价和约束梯度信息。

如果您无法使用自定义求解器获得解决方案,请尝试确定一个您知道解决方案的特殊条件,并在此条件下启动求解器。如果解算器偏离了这个初始猜测:

  • 检查预测模型中状态和输出函数的有效性。

  • 如果您正在使用自定义成本函数,请确保它是正确的。

  • 如果您正在使用标准MPC成本函数,请验证控制器调优权重。

  • 确保所有约束条件在初始猜测时都是可行的。

  • 如果您正在提供自定义雅可比函数,请使用validateFcns

另请参阅

|(优化工具箱)

相关的话题