模型预测控制:线性MPC

模型预测控制:线性MPC

模型预测控制(Model Predictive Control, MPC)是一种广泛应用于工业过程控制和自动驾驶等领域的先进控制技术。MPC通过在线解决优化问题来计算控制输入,从而实现系统的最优控制。本文将介绍线性MPC的系统模型、优化问题、LMPC算法,以及单输入系统和多输入系统的具体应用。

系统模型(离散时间线性时不变 (LTI) 系统)

在线性MPC中,系统模型通常假设为离散时间线性时不变(LTI)系统。LTI系统的状态空间模型可以表示为:

x k + 1 = A x k + B u k x_{k+1} = Ax_k + Bu_k xk+1=Axk+Buk

其中:

  • x k x_k xk是时间步 k k k的系统状态向量
  • u k u_k uk是时间步 k k k的控制输入向量
  • A A A 是状态转移矩阵
  • B B B 是输入矩阵

输出方程通常为:

y k = C x k + D u k y_k = Cx_k + Du_k yk=Cxk+Duk

其中:

  • y k y_k yk 是时间步 k k k的输出向量
  • C C C 是输出矩阵
  • D D D 是直接传输矩阵

优化问题

在MPC中,控制输入是通过解决一个在线优化问题来确定的。优化问题的目标是最小化一个代价函数(通常是一个二次型函数),并满足系统的约束条件。典型的代价函数包括以下两部分:

  1. 状态跟踪误差:衡量实际状态与目标状态之间的差距。
  2. 控制输入:控制输入的大小,避免过大的控制动作。

代价函数通常可以表示为:

J = ∑ i = 0 N − 1 ( x k + i ∣ k T Q x k + i ∣ k + u k + i ∣ k T R u k + i ∣ k ) + x k + N ∣ k T P x k + N ∣ k J = \sum_{i=0}^{N-1} \left( x_{k+i|k}^T Q x_{k+i|k} + u_{k+i|k}^T R u_{k+i|k} \right) + x_{k+N|k}^T P x_{k+N|k} J=i=0N1(xk+ikTQxk+ik+uk+ikTRuk+ik)+xk+NkTPxk+Nk

其中:

  • N N N是预测时域长度
  • Q Q Q 是状态误差权重矩阵
  • R R R 是控制输入权重矩阵
  • P P P 是终端状态权重矩阵

优化问题需要满足系统的动态方程和控制输入的约束:

x k + i + 1 ∣ k = A x k + i ∣ k + B u k + i ∣ k ∀ i = 0 , … , N − 1 x m i n ≤ x k + i ∣ k ≤ x m a x ∀ i = 1 , … , N u m i n ≤ u k + i ∣ k ≤ u m a x ∀ i = 0 , … , N − 1 \begin{align*} x_{k+i+1|k} &= A x_{k+i|k} + B u_{k+i|k} \quad \forall i = 0, \ldots, N-1 \\ x_{min} &\leq x_{k+i|k} \leq x_{max} \quad \forall i = 1, \ldots, N \\ u_{min} &\leq u_{k+i|k} \leq u_{max} \quad \forall i = 0, \ldots, N-1 \end{align*} xk+i+1∣kxminumin=Axk+ik+Buk+iki=0,,N1xk+ikxmaxi=1,,Nuk+ikumaxi=0,,N1

LMPC算法

线性模型预测控制(LMPC)算法的步骤如下:

  1. 状态估计:获取当前状态 x k x_k xk
  2. 优化求解:解决当前时刻的优化问题,得到预测时域内的最优控制输入序列 { u k ∣ k , u k + 1 ∣ k , … , u k + N − 1 ∣ k } \{u_{k|k}, u_{k+1|k}, \ldots, u_{k+N-1|k}\} {ukk,uk+1∣k,,uk+N1∣k}
  3. 应用控制:应用当前时刻的控制输入 u k = u k ∣ k u_k = u_{k|k} uk=ukk
  4. 滚动优化:将预测时域向前推进一个时间步长,重复以上步骤。

单输入系统

对于单输入单输出(SISO)系统,模型和控制输入的表示会更加简单。假设系统状态向量 x k x_k xk为一维向量,控制输入 u k u_k uk也是一维标量。系统模型可以表示为:

x k + 1 = a x k + b u k x_{k+1} = ax_k + bu_k xk+1=axk+buk

输出方程为:

y k = c x k + d u k y_k = cx_k + du_k yk=cxk+duk

优化问题与多输入系统相同,只是矩阵 A A A B B B C C C D D D变成了标量。

多输入系统

对于多输入多输出(MIMO)系统,状态向量 x k x_k xk、控制输入向量 u k u_k uk和输出向量 y k y_k yk均为多维向量。系统模型可以表示为:

x k + 1 = A x k + B u k x_{k+1} = A x_k + B u_k xk+1=Axk+Buk

输出方程为:

y k = C x k + D u k y_k = C x_k + D u_k yk=Cxk+Duk

MIMO系统的优化问题和单输入系统类似,只是需要处理更高维度的矩阵。

代码示例

以下是一个简单的Python代码示例,展示如何实现单输入单输出系统的线性MPC:

import numpy as np
from scipy.linalg import solve_discrete_are
import matplotlib.pyplot as plt

# 定义系统模型
A = np.array([[1.0]])  # 状态转移矩阵
B = np.array([[1.0]])  # 控制输入矩阵
C = np.array([[1.0]])  # 输出矩阵
D = np.array([[0.0]])  # 直通项矩阵

# 定义MPC参数
Q = np.array([[1.0]])  # 状态权重矩阵
R = np.array([[1.0]])  # 控制权重矩阵
N = 10  # 预测时域长度

# 离散时间代数Riccati方程求解P矩阵
P = solve_discrete_are(A, B, Q, R)

# 计算K矩阵
K = np.linalg.inv(B.T @ P @ B + R) @ (B.T @ P @ A)

# 目标设置
x_target = np.array([[5]])  # 目标状态
u_target = 0  # 目标控制输入

# 初始化状态
x = np.array([[0.0]])  # 初始状态

# 仿真时间
T = 50
x_trajectory = []
u_trajectory = []

for t in range(T):
    # 计算控制输入
    u = -K @ (x - x_target) + u_target
    
    # 应用控制输入并更新状态
    x = A @ x + B @ u
    
    # 记录状态和控制输入
    x_trajectory.append(x.item())
    u_trajectory.append(u.item())

# 绘制结果
plt.figure(figsize=(12, 6))

plt.subplot(2, 1, 1)
plt.plot(x_trajectory, label='State x')
plt.axhline(y=x_target.item(), color='r', linestyle='--', label='Target x')
plt.title('State Trajectory')
plt.xlabel('Time step')
plt.ylabel('State')
plt.legend()

plt.subplot(2, 1, 2)
plt.plot(u_trajectory, label='Control Input u')
plt.axhline(y=u_target, color='r', linestyle='--', label='Target u')
plt.title('Control Input Trajectory')
plt.xlabel('Time step')
plt.ylabel('Control Input')
plt.legend()

plt.tight_layout()
plt.show()

在这里插入图片描述

代码说明:

  1. 系统模型定义

    • ABCD 分别为状态转移矩阵、控制输入矩阵、输出矩阵和直通项矩阵。
    • 对于SISO系统,所有矩阵都是1x1的。
  2. MPC参数

    • QR 是权重矩阵,用于调整状态和控制输入在优化中的重要性。
    • N 是预测时域的长度,决定了MPC预测未来多少步。
  3. 离散时间代数Riccati方程求解

    • 使用scipy.linalg.solve_discrete_are函数求解P矩阵。
    • 计算反馈增益矩阵K
  4. 目标设置

    • x_target 是目标状态。
    • u_target 是目标控制输入。
  5. 初始化状态

    • x 是初始状态。
  6. 仿真循环

    • 在每个时间步t,计算控制输入u,更新状态x,并记录状态和控制输入的轨迹。
  7. 结果绘制

    • 使用matplotlib库绘制状态和控制输入的轨迹。

该代码实现了一个简单的MPC控制器,能根据给定的线性系统模型和MPC参数在预测时域内优化控制输入,以使系统状态逼近目标状态。
该代码定义了一个简单的SISO系统,并实现了线性MPC算法,最终绘制了系统状态随时间变化的图。

结论

线性MPC是一种强大的控制技术,能够处理复杂的控制问题,尤其是在存在约束和不确定性的情况下。通过在线解决优化问题,MPC可以实现系统状态的最优控制。本文介绍了线性MPC的基本概念、系统模型、优化问题、算法步骤,以及单输入和多输入系统的具体应用,并提供了一个简单的Python代码示例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/759839.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

架构师篇-8、运用事件风暴进行业务领域建

如何成为优秀架构师? 需要有一定的技术积累,但是核心是懂业务。 具备一定的方法,并且有很强的业务理解能力。 技术架构师:形成技术方案,做的更多的是底层的平台,提供工具。 业务架构师:解决方…

Cyber Weekly #13

赛博新闻 1、谷歌发布最强开源小模型Gemma-2 本周五(6月28日)凌晨,谷歌发布最强开源小模型Gemma-2,分别为9B(90亿)和27B(270亿)参数规模,其中9B 模型在多项基准测试中均…

50-4 内网信息收集 - 本机信息收集

一、内网信息收集 内网信息收集可以从以下几个方面进行:本机信息收集、域内信息收集、内网资源探测等。通过这些步骤,我们可以全面了解当前主机的角色和所处内网的拓扑结构,从而选择更合适、更精准的渗透方案。 二、本机基础信息收集 在本机基础信息收集阶段,可以执行以下…

怎么监控公司文件?高效省力的7个办法,企业都在用

公司文件监控方法主要包括以下几个方面,以确保数据安全和防止文件泄密: 使用专业监控软件:如安企神等专业的企业级监控软件,可以详细记录员工的电脑操作,包括文件访问、修改、删除、复制等行为,以及外设使用…

RTMP推流到SRS流媒体服务器消息处理

RTMP推流到SRS流媒体服务器消息处理 SRS和客户端是怎么交换消息的?各个消息有什么作用?握手成功后,SRS和客户端进行消息交换,对应wiresharek这部分截图: 流程图(之前画的,可能不够详细&#xf…

百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现

百亿级存储架构: ElasticSearchHBase 海量存储架构与实现 尼恩:百亿级数据存储架构起源 在40岁老架构师 尼恩的读者交流群(50)中,经常性的指导小伙伴们改造简历。 经过尼恩的改造之后,很多小伙伴拿到了一线互联网企业如得物、阿…

AI模型的奥运会:谁将在OlympicArena中夺冠?

获取本文论文原文PDF,请在公众号【AI论文解读】留言:论文解读 引言:AI模型的奥林匹克级评测 评估和比较不同AI模型的性能始终是一个核心话题。随着技术的不断进步,这些模型在处理复杂任务的能力上有了显著的提升。为了更精确地衡…

springboot汽车租赁管理系统-计算机毕业设计源码08754

目 录 摘 要 第 1 章 引 言 1.1 选题背景和意义 1.2 国内外研究现状 1.3 论文结构安排 第 2 章 系统的需求分析 2.1 系统可行性分析 2.1.1 技术方面可行性分析 2.1.2 经济方面可行性分析 2.1.3 法律方面可行性分析 2.1.4 操作方面可行性分析 2.2 系统功能需求分析…

有了文章生成器,轻易满足你对文章的需求

写文章对于大多数人来说并不轻松,往往一篇文章写作完成是需要消耗一个人的大量时间与精力的,如果想要写的文章特别好,那么还要再花一点时间去进入后期的修改。就没有什么方法让大家轻易的去完成文章写作吗?答案是有的,…

【TB作品】密码锁,ATMEGA128单片机,Proteus仿真

题目 5 :密码锁 使用单片机实现简易密码锁,通过输入密码,实现门锁的开启(控制继电器)。 具体要求如下: (1)当输入正确密码后,继电器开启。 (2)当三…

一元线性回归-R语言

# # 安装包 # install.packages(ggplot2) # library(ggplot2) Sys.setlocale(category LC_ALL, locale English_United States.1252) # Sys.setlocale("LC_ALL","Chinese") x <- c(18, 20, 22, 24, 26, 28, 30) y <- c(26.86, 28.35, 28.87,28.75,…

python格式文件

python小白考后复习 CSV格式文件ini格式文件我们可以读取所有节点还可以输出一个节点下所有键值对组成的元组获取节点下的键对应的值判断节点是否存在添加节点还可以添加键值还可以删除节点 XML格式文件读取若是文件格式存在的xml若是以字符串形式存在的xml获取子标签还有获取子…

Arduino IDE 的安装与esp32项目的创建

1打开官网下载 官网 1-1下载完成后安装即可&#xff0c;会弹出一些按安装提示点击安装 2切换为中文模式 2-1点击Flie&#xff0c;在点击图中高亮的位置&#xff0c;进入 2-2选择语言 3创建esp32项目 3-1在线安装&#xff08;不一定成功&#xff0c;可以一直试&#xff09; …

各维度卷积神经网络内容收录

各维度卷积神经网络内容收录 卷积神经网络&#xff08;CNN&#xff09;&#xff0c;通常是指用于图像分类的2D CNN。但是&#xff0c;现实世界中还使用了其他两种类型的卷积神经网络&#xff0c;即1D CNN和3D CNN。 在1D CNN中&#xff0c;内核沿1个方向移动。1D CNN的输入和…

100张linux C/C++工程师面试高质量图

文章目录 杂项BIOSlinux开机启动流程内核启动流程网络编程网络编程流程tcp状态机三次握手四次断开reactor模型proactor模型select原理poll原理epoll原理文件系统虚拟文件系统文件系统调用阻塞IO非阻塞IO异步IO同步阻塞同步非阻塞IO多路复用进程管理进程状态程序加载内存管理MMU…

ArtTS系统能力-通知的学习(3.1)

上篇回顾&#xff1a; ArtTS语言基础类库-容器类库内容的学习(2.10.2&#xff09; 本篇内容&#xff1a; ArtTS系统能力-通知的学习&#xff08;3.1&#xff09; 一、 知识储备 1. 基础类型通知 按内容分成四类&#xff1a; 类型描述NOTIFICATION_CONTENT_BASIC_TEXT普通文…

基于STM32的智能农业环境监控系统

目录 引言环境准备智能农业环境监控系统基础代码实现&#xff1a;实现智能农业环境监控系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;农业环境管理与优化问题解决方案与优化收尾与总结 1. 引言 智能农业环境监控系…

Linux rpm与yum

一、rpm包管理 rpm用于互联网下载包的打包及安装工具&#xff0c;它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager (RedHat软件包管理工具&#xff09;的缩写&#xff0c;类似windows的setup.exe&#xff0c;这一文件格式名称虽然打上了R…

技术打包 催化剂浸渍制作方法设备

网盘 https://pan.baidu.com/s/1Bybbyy5qEA2uTUlaELmWwg?pwdepdk 改性加氢处理催化剂载体、催化剂及其制备方法和应用.pdf 水滑石基催化剂在高浓度糖转化到1,2-丙二醇中的应用.pdf 海泡石负载铁锰双金属催化剂及其制备方法和应用.pdf 甘油氢解催化剂及其制备方法和应用.pdf 用…

LeetCode-Leetcode 1120:子树的最大平均值

LeetCode-Leetcode 1120&#xff1a;子树的最大平均值 题目描述&#xff1a;解题思路一&#xff1a;递归解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给你一棵二叉树的根节点 root&#xff0c;找出这棵树的 每一棵 子树的 平均值 中的 最大 值。 子…