限制MPC初始值的问题

14日视图(30天)
J克劳斯
J克劳斯 2018年12月7日
编辑: 会长Patricio2021年4月7日
我试图使用一个线性约束模型预测控制器来控制非线性两个输入,一个输出离散系统。线性模型通过收购雅可比矩阵线性化名义操作点。
初始点(名义值),该系统将正确的一些干扰为零。 如果我改变选点和初始值的值不等于名义值,这样控制器应保持选点除非骚扰行为,它总是使第一mpcmove急剧走向名义命令,无论选点是高于或低于标称值。
我一直在寻找的日子,我不能找出原因或如何改正它。我想我缺少某个设置对货币政策委员会的设置,因为发生错误由于第一最优从货币政策委员会,之前甚至有机会通过非线性函数。请帮助!
________
下面的例子和代码问题
________
例如,0.7的定位点,初始状态为0.7,和最优控制输入发现呆在那个位置,我得到这个。理论上的响应应该是一个,而直线为0.7,没有干扰,但这让急剧走向名义值(图顶部的底部)第一控制器,然后recorrects相当时间向定位点。在这里,情节是响应和底部的情节是两个输入。
MPC demo.jpg
我的计划:
标称值是线性植物模型:Linear_sys。
Nonlinear_Fcn的形式:x (i + 1) = f (x (i), u (1), u (2))
% MPC参数
P_Horiz = 8;%预测地平线
C_Horiz = 2;%控制地平线
Q = [1];%
俄文= [[0.1],[0.1]];%
Rdu = [[0.1], [0.1]];%
%创建控制器对象
mpcobj = mpc (Linear_Sys Ts_N、P_Horiz C_Horiz);
%更新MPC权重
mpcobj.Weights。OutputVariables =问;
mpcobj.Weights。ManipulatedVariables =俄文;
mpcobj.Weights。ManipulatedVariablesRate = Rdu;
% MPC约束
mpcobj.Input (1)。最小值= 0 * 1 (1,P_Horiz);
mpcobj.Input (1)。Max = (theta_i_max) * 1 (1, P_Horiz);
mpcobj.Input (2)。Min = P_min * 1 (1, P_Horiz);
mpcobj.Input (2)。Max = (P_max) * 1 (1, P_Horiz);
mpcobj.Output。最小值= (thetadot_m_i_min) * 1 (1, P_Horiz);
mpcobj.Output。Max = (thetadot_m_i_max) * 1 (1, P_Horiz);
%更新MPC规模因素
mpcobj.Input (1)。ScaleFactor = theta_i_max - theta_i_min;
mpcobj.Input (2)。ScaleFactor = P_max - P_min;
mpcobj.Output。ScaleFactor = thetadot_m_i_max - thetadot_m_i_min;
%准备存储闭环MPC的反应
YY = C_lin * 0.7;% C矩阵[1],因此Y = [1] * X
UU = [0.3441, 0.2796];% U (X (i + 1) = 0.7 = Nonlinear_function (X (i) = 0.7, U)
TT = 0;%初始时间
%使用MPCSTATE对象指定控制器的初始状态
xmpc = mpcstate (mpcobj YY, [], [], UU);
%闭环反应
Time_Length = 50;%设置
时间= 0;%的时间计数器
Data = [0, YY, Y_t, UU];
m = 1;
时间< = Time_Length
%循环而当前时间小于时间长度。
Ts %增量的每个传递,直到Time_length电流环路
%。
%控制器,输出U向量的基础上,“0”是名义op pt
(u,信息)= mpcmove (mpcobj xmpc, YY(结束),SetPt);
%附加输入下通过
UU = [UU u];
%计算时间步长,基于当前theta_dot、当前θ
Ts_1st = Time_Step_Fcn (YY(结束),UU (1));
%对非线性系统模拟反应
X = Nonlinear_Fcn(时间、YY(结束),UU(:,结束));
%为策划参考变量
X_t = thetadot_m_i_N;
%添加输出时间+ Ts输出矩阵
YY = (YY, C_lin * X);
Y_t = [Y_t C_lin * X_t];
%计算步骤我时间步
Ts_2nd = Time_Step_Fcn (YY(结束),UU (end-1));
Ts = Ts_1st + Ts_2nd;
TT = (TT, TT(结束)+ Ts);
%诊断matricies
Data =[数据;Ts, YY (end-1) Y_t (end-1), UU(:,结束)];
%更新时间计数器
时间=时间+ Ts;
%进度显示
disp(时间);
%更新增量器
m = m + 1;
结束

答案(2)

侯赛因Rezazadeh
侯赛因Rezazadeh 2019年1月4日
编辑:侯赛因Rezazadeh 2019年1月4日
你是否检查了dx / dt在初始条件值吗?你确定初始条件是稳定状态?

会长Patricio
会长Patricio 2021年4月7日
编辑:会长Patricio 2021年4月7日
我有一个类似的问题,发现这个问题。不确定它是否解决了楼主,但似乎Matlab的mpc API做奇怪的事情与非零初始条件。看着许多线性MPC的例子,他们都开始在原点。我有一个轨迹跟踪问题,货币政策委员会代码将工作完美的轨迹开始时原点。变动的初始条件和轨道远离原点导致原文中描述的行为。为“mpcmove ' '和' ' sim的函数调用。奇怪的是,这个问题从原点的进一步恶化,这似乎表明,Matlab是内部做一些初始条件的目的。试着做同样的事,看看也古怪的行为尺度。如果是这样,那么这就意味着是Matlab的实现让奇怪的行为。
为我解决工作,代码添加到每个轨道的初始条件转移到原点,计算解决方案,然后转回到实际的起点。更新/动力学也需要调整修改后的坐标。令人沮丧的Matlab实现的隐藏了这么多的API。我想关掉所有噪音/不确定性和设置系统成为纯粹的确定性,但这似乎是不可能的,文档是非常缺乏。事实上,这将是了不起的MPC运行作为一个离散时间最优控制方案,因为这就是谎言的核心代码。这样做是不可能的,因此任何自定义MPC-like解决方案是不可能的。万博 尤文图斯MPC的万博 尤文图斯解决方案必须运行Matlab设想他们应该的方式,不是用户如何选择。
同时,在我的例子中,我试着琐碎的离散动力学(=眼)所有飞机的初始条件稳定状态基于第一个答案。这个问题仍然发生。

s manbetx 845


释放

R2018a

社区寻宝

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

开始狩猎!