博客中所有内容均来源于对yalmip官方教程的翻译以及自己在学习过程中的心得体会:https://yalmip.github.io/tutorials/
一、基础MPC形式(Model predictive control - Basics)
优化问题的目标是在有限时域内最小化状态和控制轨迹的代价函数,并满足所设定的约束条件。
1.显示预测形式
实现的第一个版本明确地将预测状态表示为给定当前状态和未来控制序列的函数(下文将提出更好的方法)。通过简单地循环仿真方程,并在时域内收集约束和目标项。请注意快速定义控制输入列表的过程。
u = sdpvar(repmat(nu,1,N),repmat(1,1,N)); %控制输入量定义,生成一个1*N的cell,cell中每一个元素的大小为nu*1
constraints = []; %约束定义,这个必须在程序中加入
objective = 0;
x = x0;
for k = 1:N
x = A*x + B*u{k};
objective = objective + norm(Q*x,1) + norm(R*u{k},1);
constraints = [constraints, -1 <= u{k}<= 1, -5<=x<=5];
end
生成了约束和目标函数后,我们就可以求解优化问题。
optimize(constraints,objective);
value(u{1})
在上述优化问题中的状态变量的初始值是给定的,每次遇到新的初始状态时都要更改初始值,为了避免一些不必要的复杂计算,我们将问题的初始状态作为决策变量来处理。
u = sdpvar(repmat(nu,1,N),repmat(1,1,N));
x0 = sdpvar(2,1); %将初始状态变量定义为决策变量
constraints = [];
objective = 0;
x = x0;
for k = 1:N
x = A*x +