【问题标题】:Optimization in NMPC of second order pendulum model二阶摆模型的NMPC优化
【发布时间】:2015-06-03 19:45:04
【问题描述】:

希望我能很好地解释我的问题。

我正在研究非线性模型预测控制实施。

我有 3 个文件: 1)。一个 simulink slx 文件,它基本上是一个非线性摆模型。 2)。一个函数文件,用于从 simulink 模型中获取成本函数。 3)。 MPC 代码。

代价函数的代码sn-p

**simOut=sim('NonlinearPendulum','StopTime', num2str(Np*Ts));**

%Linearly interpolates X to obtain sampled output states at time instants.
T=simOut.get('Tsim');
X=simOut.get('xsim');
xt=interp1(T,X,linspace(0,Np*Ts,Np+1))';

U=U(1:Nu);
%Quadratic cost function
R=0.01;
J=sum(sum((xt-repmat(r,[1 Np+1])).*(xt-repmat(r,[1 Np+1]))))+R*(U-ur)*...
(U-ur)';

现在我采用这个成本函数并使用 fmincon 对其进行优化,以使用我的 MPC 代码生成要应用于模型的输入序列。 我的 MPC 代码的代码 sn-p。

%Constraints -1<=u(t)<=1;
Acons=[eye(Nu,Nu);-eye(Nu,Nu)];
Bcons=[ones(Nu,1);ones(Nu,1)];
options = optimoptions(@fmincon,'Algorithm','active-set','MaxIter',100);

warning off
for a1=1:nf

X=[];                       %Prediction output
T=[];                       %Prediction time

Xsam=[];
Tsam=[];

%Nonlinear MPC controller
Ubreak=linspace(0,(Np-1)*Ts,Np); %Break points for 1D lookup, used to avoid 
% several calls/compilations of simulink model in fmincon.
**J=@(v) pendulumCostFunction(v,x0,ur,r(:,a1),Np,Nu,Ts);**
U=fmincon(J,U0,Acons,Bcons,[],[],[],[],[],options);
%U=fmincon(J,U0,Acons,Bcons);
U0=U;

UUsam=[UUsam;U(1)];%Apply only the first selected input

%Apply the selected input to plant.
Ubreak=[0 Ts]; %Break points for 1D lookup
U=[UUsam(end) UUsam(end)];
**simOut=sim('NonlinearPendulum','StopTime', num2str(Ts));**

在这两个代码中,我都标记了我们调用 simulink 模型的时间。现在,问题是在我的 Windows 机器 MATLAB R2014B 上运行整个模拟只需 5 秒,大约需要 7-8 分钟。 有没有办法优化这个?因为,我打算将此算法扩展到与二阶摆模型不同的九阶系统。

如果有人对使用 simulink coder 生成 C 代码有建议: 我已经尝试过了,我面临的问题是我不知道如何处理生成的几个文件。请尽可能详细。

【问题讨论】:

  • fmincon 是收敛还是达到 MaxIter?你的预测范围是多少?运行分析器并检查大部分时间是什么。
  • 检查 ACADO:“ACADO 代码生成工具可以自动生成用于快速非线性 MPC 和 MHE 应用的 Gauss-Newton 实时迭代算法 [4, 5]。” ACADO 也有一个 Matlab 界面,而且很容易设置(它有很多例子,包括 NMPC)。
  • fmincon 没有达到 maxiter。我必须尝试从 5 到 20 的预测范围。运行分析器告诉我,从 simulink 模型获取成本函数需要大量时间(几乎 90%),即在成本函数代码的最后一行代码 sn-p
  • 我不太了解这些 sn-ps 的顶级算法的整体流程。也许您正在使用 FMINCON 实施顺序二次规划方法来解决 QP 子问题,然后根据新的 SIMULINK 评估细化 AP 目标?也许你是,或者如果不应该是,在 FMINCON 活动集下整体运行(虽然使用昂贵的 SIMULINK 评估,sqp 可能会更好)有限差分准牛顿。 KNITRO 类似于 FMINCON,但可能需要更少的迭代。如果你表现出整体的流程,可以做出更好的评估。但我对 SIMULINK 不是很熟悉。
  • 上面的错字(来不及编辑:应该是“QP 目标”,而不是“AP 目标”。

标签: matlab optimization code-generation simulink


【解决方案1】:

从代码 sn-ps 看来,您正在求解具有二次目标的线性时不变模型。这是overhead crane penduluminverted pendulum 的一些 MATLAB(和 Python)代码,它们都具有状态空间线性模型和二次目标。

使其运行更快的方法之一是避免使用 Simulink 接口和解决 MPC 的拍摄方法。在有限元上使用正交配置的同步方法更快,如果您想使用非线性模型,还可以启用higher index DAE model forms

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-07
    • 2016-09-08
    • 1970-01-01
    • 2022-01-23
    • 2014-06-07
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    相关资源
    最近更新 更多