非线性MPC
与传统的线性MPC一样,非线性MPC使用基于模型的预测和约束优化的组合来计算每个控制区间的控制动作。关键的区别是:
预测模型可以是非线性的,包括时变参数。
等式和不等式约束可以是非线性的。
要最小化的标量代价函数可以是决策变量的非二次(线性或非线性)函数。
使用非线性MPC,您可以:
模拟非线性成本和约束下非线性设备的闭环控制。
通过求解开环约束非线性优化问题来规划最优轨迹。
默认情况下,非线性MPC控制器解决非线性规划问题使用fmincon
函数与SQP算法,这需要优化工具箱™软件。如果没有“优化工具箱”软件,可以指定自己的自定义非线性求解器。属性的详细信息fmincon
求解器和指定自定义求解器,请参见非线性MPC优化求解器的配置.的详细信息FORCESPRO带有非线性MPC控制器的NLP求解器,参见使用Embotech FORCESPRO求解器实现MPC控制器.
请注意
的MPC设计师app不支持非线性MPC控金宝app制器的设计。
一般非线性MPC
为了实现一般的非线性MPC,创建一个nlmpc
对象,并指定:
定义预测模型的状态和输出函数。有关更多信息,请参见为非线性MPC指定预测模型.
一个自定义的成本函数,可以取代或增加标准的MPC成本函数。有关更多信息,请参见指定非线性MPC的代价函数.
输入、输出和状态的标准边界。
额外的自定义等式和不等式约束,可以包括输入、输出和状态的线性和非线性组合。有关更多信息,请参见指定一般非线性MPC的约束条件.
被动不等式约束,可以包括输入和状态的线性和非线性组合。有关更多信息,请参见指定一般非线性MPC的约束条件和
被动
的属性nlmpc
对象。有关被动的例子,请参见基于无源非线性MPC的四油箱控制而且基于无源非线性MPC的机械手控制.
你可以模拟一般的非线性MPC控制器:
多级非线性MPC
多阶段MPC问题是成本和约束函数是基于阶段的MPC问题。具体地说,是一种具有长度预测范围的多级MPC控制器p有p+1阶段,其中第一阶段对应于当前时间,最后(终端)阶段对应于最后一个预测步骤。
对于多级MPC控制器,每个阶段都有自己的决策变量和参数,以及自己的非线性代价和约束。更重要的是,特定阶段的成本和约束函数只是该阶段决策变量和参数的函数。除了使编写雅可比函数更容易之外,该特性还允许更有效的数据结构,与使用通用NLMPC控制器解决相同问题相比,这反过来大大减少了计算时间。松弛变量是基于阶段的,这一事实允许更多的设计灵活性,并且禁止使用被操纵的变量率作为决策变量,从而产生更精简的问题公式。
由于这些原因,如果你的非线性MPC问题具有不涉及跨阶段项的代价和约束函数,并且如果你不需要强制无源性,那么在你的设计中使用多级非线性MPC控制器。
为了实现多级非线性MPC控制器,首先创建一个nlmpcMultistage
对象,然后指定:
定义预测模型的状态函数。对于离散时间模型,请确保
模型。IsContinuousTime
设置为假
.成本和约束功能在所需的阶段。您必须为至少一个阶段指定代价函数。
如果需要,状态的上限和下限、操纵变量和操纵可变利率。
在设计控制器时,请考虑以下几点。
不支持匿名函数金宝app
nlmpcMultistage
对象。当雅可比矩阵可用时指定它们是最佳实践,否则求解器必须在每一步都用数字计算它们。
不像一般的非线性MPC,植物输出,权重,ECR值,和比例因子不存在
nlmpcMultistage
对象。您可以直接在成本和约束函数中实现它们。中也省略了控制层
nlmpcMultistage
对象。要实现块移动,请设置杀鼠灵
而且RateMax
在期望的预测步骤到零。
你可以模拟多级非线性MPC控制器:
在Si金宝appmulink中使用多级非线性MPC控制器块
在MATLAB中®命令行使用
nlmpcmove
从一个非线性多级控制器的代码生成支持在MATLAB(使用金宝appmpcmoveCodeGeneration
)和Simu金宝applink。
有关如何创建和使用多级MPC控制器的示例,请参见创建并模拟多级非线性MPC控制器,用初始猜测模拟多级非线性MPC控制器,基于多级非线性MPC的卡车和挂车自动泊车.