模型预测控制器QP求解器将MPC优化问题转换为常规表单QP问题
受线性不等式限制
在哪里
X是解决方案矢量。
H是黑森州的矩阵。在没有在线重量的情况下使用隐式MPC时,该矩阵是恒定的。
一种是线性约束系数的矩阵。使用隐式MPC时,该矩阵是恒定的。
B.和F是矢量。
在每个控制间隔的开始时,控制器计算H那F那一种, 和B.或者,如果它们是常量,则检索其预先计算的值。
工具箱使用KWIK算法[1]解决QP问题,这要求奇森人成为积极的明确。在第一个控制步骤中,kwik使用了一个冷启动,其中初始猜测是描述的无约束解决方案不受约束的模型预测控制。如果X满足约束,它是最佳的QP解决方案,X*,算法终止。否则,至少一个线性不等式约束必须满足于平等。在这种情况下,KWIK使用高效的数字鲁棒策略来确定满足标准优化条件的活动约束集。在以下控制步骤中,kwik使用了一个温暖的开始。在这种情况下,在先前的控制步骤中确定的活动约束集成为接下来的初始猜测。
虽然KWIK是强大的,但请考虑以下内容:
由于数值圆偏差误差,可以略微违反一个或多个线性约束。工具箱采用不可调试的相对容差。这种宽容允许约束违规10-6乘以每个术语的幅度。此类违规是正常的,不会生成警告消息。
在测试最佳解决方案时,工具箱还使用非可调节公差。
搜索活动约束集是一个迭代过程。如果迭代达到问题依赖性最大值,则算法终止。对于某些控制器配置,默认的最大迭代可能非常大,可以使QP解算器似乎停止响应(参见MPC.
)。
如果您的问题包括硬约束,则可以是不可行(不可能满足)。如果算法检测到不可行,则会立即终止。
在最后两种情况下,通过对搜索的异常结果,控制器保留了最后一个成功的控制输出。有关更多信息,请参阅MPCMOVE.
命令。您可以根据需要检测异常结果并覆盖默认行为。
对于具有约束的给定MPC应用程序,无法预测查找最佳解决方案需要多少QP求解器迭代。此外,在实时应用程序中,迭代的数量可以从一个控制间隔到下一个控制间隔急剧变化。在这种情况下,最坏情况的执行时间可能超过硬件平台上允许的限制,并由控制器采样时间确定。
在优化迭代次数超过指定的最大值后,可以保证MPC控制器的最坏情况执行时间。要设置最坏情况的执行时间,首先通过在标称条件下尝试控制器来确定单个优化迭代所需的时间。然后,在每个控制间隔设置迭代次数的上限。例如,如果需要大约1 ms以计算硬件上的每个迭代,并且控制器采样时间为10 ms,则设置不大于的最大迭代次数10.
。
mpcobj.optimizer.maxiter = 10;
默认情况下,MPC控制器对象具有下限120.
在最大迭代次数。
默认情况下,当求解器达到没有最佳解决方案的求解器迭代的最大数量时,控制器将操纵变量保持在以前的值。要使用最终迭代后达到的次优溶液,请设置使用imeryuboptimalsolution.
选择真的
。
mpcobj.optimizer.usesuboptimalsolutizer = true;
虽然解决方案不是最佳的,但在应用时,它满足您所有指定的约束。
无法保证次优解决方案比保持控制器输出常数更好。您可以使用这两种方法模拟系统,然后选择提供更好控制器性能的配置。
例如,看到在快速MPC应用中使用次优解。
要访问内置kwik求解器,以获取需要解决在线QP问题的应用程序,请使用MPCQPSolver.
命令。此选项可用:
高级MPC应用程序,超出了模型预测控制工具箱™软件的范围。
自定义QP应用程序,包括需要代码生成的应用程序。
模型预测控制工具箱软件允许您为MPC控制器指定自定义QP求解器。该求解器被调用替代内置的qpkwik.
每个控制间隔的求解器。此选项可用:
使用第三方求解器验证您的模拟结果或生成代码。
内置kwik求解器的大MPC问题慢慢运行或无法找到可行的解决方案。
您可以定义用于模拟或代码生成的自定义求解器。在任何一种情况下,使用自定义函数定义自定义求解器,并配置控制器以使用此自定义功能。
自定义求解器功能 | 受影响的matlab.®功能 | 受影响的Simul金宝appink.®块 | |
---|---|---|---|
模拟 放
|
金宝app支持:
|
|
|
代码生成 放
|
金宝app支持:
|
|
使用自定义QP求解器模拟MPC控制器:
将Solver模板文件复制到工作文件夹或MATLAB路径上的任何位置,并重命名mpccustomsolver.m
。要将Solver模板复制到当前工作文件夹,请在MATLAB命令行中键入以下内容。
src =哪个('mpccustomsolver.txt');dest = fullfile(pwd,'mpccustomsolverm');COPYFILE(SRC,DEST,'F');
调整mpccustomsolver.m
通过添加您自己的自定义求解器。您的求解器必须能够在MATLAB中运行,并在MATLAB脚本或MEX文件中实现。
配置MPC控制器mpcobj.
使用自定义求解器。
mpcobj.optimizer.customsolver = true;
该软件现在使用自定义求解器进行仿真代替内置QP kwik求解器。
模拟你的控制器。有关更多信息,请参阅模拟。
例如,看到使用自定义QP求解器模拟MPC控制器。
您可以为MPC控制器生成代码,用于使用以C / C ++代码或MATLAB代码编写的自定义QP求解器,适用于代码生成。这样做:
在命令行需要Matlab Coder™软件。
在Si金宝appmulink需要金宝appSimulink编码器要么金宝appSimulink PLC编码器™软件。
为使用自定义QP求解器生成MPC控制器的代码:
将Solver模板文件复制到工作文件夹或MATLAB路径上的任何位置,并重命名mpccustomsolvercodegen.m.
。要将MATLAB代码模板复制到当前工作文件夹,请在MATLAB命令行中键入以下内容。
src =哪个('mpccustomsolvercodegen_templateEml.txt');dest = fullfile(pwd,'mpccustomsolvercodegen.m');COPYFILE(SRC,DEST,'F');
或者,您可以使用C模板。
src =哪个('mpccustomsolvercodegen_templatec.txt');dest = fullfile(pwd,'mpccustomsolvercodegen.m');COPYFILE(SRC,DEST,'F');
调整mpccustomsolvercodegen.m.
通过添加您自己的自定义求解器。
配置MPC控制器mpcobj.
使用自定义求解器。
mpcobj.optimizer.customsolvercodegen = true;
该软件现在使用您的自定义求解器进行代码生成代替内置QP kwik求解器。
为控制器生成代码。有关更多信息,请参阅生成代码并将控制器部署到实时目标。
例如,看到使用自定义QP求解器模拟和生成MPC控制器的代码。
您可以为模拟和代码生成实现相同的自定义QP求解器。为此,您必须:
设置两者优化器.Customsolver
和Optimizer.CustomsolverCodegen.
到真的
。
创建两者mpccustomsolver.m
和mpccustomsolvercodegen.m.
。
在模拟期间,您的控制器使用mpccustomsolver.m
自定义功能。对于代码生成,您的控制器使用mpccustomsolvercodegen.m.
自定义功能。
只要代码适用于代码生成,您可以在自定义求解器功能中指定相同的MATLAB代码。
如果你实施mpccustomsolvercodegen.m.
使用C / C ++代码,使用代码创建MEX文件。然后,您可以从此调用此MEX文件mpccustomsolver.m
。有关创建和使用MEX文件的详细信息,请参阅C MEX文件应用程序(matlab)。
实现自定义QP求解器时,您的自定义函数必须具有以下签名之一:
使用自定义求解器进行仿真:
功能[x,状态] = MPCCSTOMSolver(H,F,A,B,X0)
使用自定义求解器进行代码生成:
功能[x,status] = mpccustomsolvercodegen(h,f,a,b,x0)
在这两种情况下,您的自定义求解器都具有以下输入和输出参数:
H
是一个黑森州矩阵,指定为一个N-经过-N对称正定矩阵,在哪里N是优化变量的数量。
F
是目标函数线性术语的乘数,指定为长度的列向量N。
一种
是线性不等式约束系数的矩阵,指定为m-经过-N矩阵,其中m是约束的数量。
B.
是不等式约束方程的右侧,指定为长度的列向量m。
X0.
是解决方案的初始猜测,指定为长度的列向量N。
X
是最佳解决方案,作为长度的柱矢量返回N。
地位
是解决方案有效性指示符,根据以下内容返回整数:
价值 | 描述 |
---|---|
> 0 |
X 是最佳的。地位 表示在优化期间执行的迭代次数。 |
0. |
达到最大迭代次数而不找到最佳解决方案。解决方案, 如果是 |
-1 |
问题似乎是不可行的,即约束 不能满意。 |
-2 |
发生了不可恢复的数值错误。 |
[1] Schmid,C.和L.T.Biegler,“减少黑森州SQP的二次编程方法”电脑与化学工程,卷。18,第9,1994号,第817-832页。