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