我怎么能在命令行运行MPC模拟使用自定义QP解决吗?

2视图(30天)
我设计了一个mpc对象(mpc1)控制场景使用mpcDesigner (scenario1)。
然后,我有 mpc1出口到工作区 和我有 生成一个MATLAB脚本复制电流控制器的设计 (见图1)。
现在,我想要使用一个自定义QP解算器,所以我在命令行中运行如下:
src = (“mpcCustomSolver.txt”);
dest = fullfile (pwd,“mpcCustomSolver.m”);
拷贝文件(src,桌子,“f”);
通过这种方式,自定义QP解算器使用 “quadprog”
函数[x,状态]= mpcCustomSolver (H, f, A, b, x0)
% mpcCustomSolver允许用户指定一个自定义的二次规划
% (QP)解决解决QP问题制定MPC控制器。当
%的“mpcobj.Optimizer。CustomSolver”属性设置真实的,而不是
%使用内置的QP解算器,现在将使用客户QP MPC控制器
%解算器中定义这个函数在MATLAB和Simulink仿真。万博1manbetx
%
% MPC QP问题定义如下:
x %找到一个最佳的解决方案,最大限度地减少二次目标
%功能,J = 0.5 * x ' * H * x + f ' * x,线性不等式
%的约束,A * x > =。
%
%的输入(MPC控制器在运行时提供的):
% H: n×n海赛矩阵是对称正定。
% f: n×1列向量。
%:一个m×n的矩阵不等式约束系数。
% b: m×1矢量不等式约束的右边。
% x0: n×1向量的初始猜测最优解决方案。
%
%输出(反馈MPC控制器在运行时):
% x:必须是一个n×1最优解向量。
%状态:必须是一个有限整数:
%的积极价值:用于计算的迭代次数
% 0:最大迭代数
% 1:QP是不可行的
% 2:由于其他原因未能找到一个解决方案
%注意,即使解决未能找到一个最优解,必须“x”
%作为n×1返回向量(即设置为初始猜测x0)
%
%不改变线以上
%以下代码是如何实现自定义的一个例子QP解算器
在这个函数%。它需要优化工具箱。
%定义QUADPROG选项和关闭显示的优化结果
%命令窗口。
选择= optimoptions (“quadprog”);
选项。显示=“没有”;
%根据定义、约束要求的解算器被定义为“quadprog”
% * x < = b。然而,在我们的MPC QP问题,约束是定义为
% * x > = b。因此,我们需要实现一些转换:
A_custom = -;
b_custom = - b;
%计算QP的最优解。注意,默认的算法
%的“quadprog”(interior-point-convex)忽略x0。“x0”用在这里
%的输入参数说明。
H = (H + H) / 2;%确保黑森是对称的
[x, ~,国旗,输出]= quadprog (H f A_custom b_custom, [], [], [], [], x0,选项);
%将“国旗”的输出转换为“状态”所要求的MPC控制器。
开关国旗
情况下1
状态= Output.iterations;
情况下0
状态= 0;
情况下2
状态= 1;
否则
状态= 2;
结束
x %总是返回一个非空的正确的大小。当解算器失败,
%一个方便的解决方案是设置x的初始猜测。
如果地位< = 0
x = x0;
结束
作为一个自定义QP解决者将被使用,我组
mpc1.Optimizer.CustomSolver = true
最后,与定制QP再现仿真解算器我运行下面的命令行:
% %指定模拟选项
选择= mpcsimopt ();
选项。MVSignal = mpc1_MVSignal;
选项。RefLookAhead =“上”;
选项。MDLookAhead =“关闭”;
选项。约束=“上”;
选项。OpenLoop =“关闭”;
% %运行仿真
[y t u] = sim(151年mpc1 mpc1_RefSignal mpc1_MDSignal,选项);
但我总是得到这个错误:
H的行和列数必须等于f元素的数量。
错误在quadprog(第254行)
错误消息(optim: quadprog: MismatchObjCoefSize));
错误在mpcCustomSolver(48)行
[x, ~,国旗,输出]= quadprog (H f A_custom b_custom, [], [], [], [], x0,选项);
错误在mpc_solveQP(39)行
错误在mpc_simPostprocess(12)行
错误在sim(第94行)
因为它是在说 函数[x,状态]= mpcCustomSolver (H, f, A, b, x0) H f MPC控制器在运行时提供的,所以我不能想我做错了什么。
%的输入(MPC控制器在运行时提供的):
% H: n×n海赛矩阵是对称正定。
% f: n×1列向量。
%:一个m×n的矩阵不等式约束系数。
% b: m×1矢量不等式约束的右边。
% x0: n×1向量的初始猜测最优解决方案。
考虑到所有这些,每个帮助康为了解决以下问题:
1)上面的方法解释正确吗?我的意思是,我可以遵循这一策略为了使用一个定制的QP运行仿真解算器吗?
2)在上面的方法解释是不正确的,我怎么能在命令行上运行模拟使用自定义QP解决吗?有另一个吗?
2)如果上面的方法解释是正确的,我怎样才能解决这个错误 quadprog 吗?
H的行和列数必须等于f元素的数量。
错误在quadprog(第254行)
错误消息(optim: quadprog: MismatchObjCoefSize));

答案(0)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!