当前位置: 首页 > wzjs >正文

邯郸网站设计 贝壳下拉名师工作室网站建设 意义

邯郸网站设计 贝壳下拉,名师工作室网站建设 意义,网络黄页推广大全,重庆招考信息网目录 1. 前言 2. MPC控制的基本原理 2.1 核心思想 2.2 优化问题 3. MPC控制示例:赛车控制 3.1 系统参数和动态模型 3.2 动态模型 3.3 优化问题 3.4 主模拟循环 3.5 结果可视化 3.6 完整代码 4. 总结 1. 前言 在工业控制领域,模型预测控制&a…

目录

1. 前言

2. MPC控制的基本原理

2.1 核心思想

2.2 优化问题

3. MPC控制示例:赛车控制

3.1 系统参数和动态模型

3.2 动态模型

3.3 优化问题

3.4 主模拟循环

3.5 结果可视化

3.6 完整代码

4. 总结


1. 前言

在工业控制领域,模型预测控制(MPC)是一种非常重要的控制策略。它通过利用系统的动态模型来预测未来的系统行为,并通过优化控制输入来实现期望的性能。MPC在处理复杂系统、多输入多输出系统以及具有约束条件的系统方面表现出色。本文将详细介绍MPC的基本原理,并通过一个具体的Python实例来展示如何实现MPC控制。

2. MPC控制的基本原理

2.1 核心思想

MPC的核心思想是在每个控制周期内,通过解决一个有限时间范围内的优化问题来确定未来的控制输入序列。具体来说,MPC在每个时间步长内:

  1. 使用系统的当前状态作为初始条件。

  2. 基于系统的动态模型,预测未来一段时间内的系统行为。

  3. 通过优化算法(如梯度下降、序列二次规划等)来寻找使性能指标最小化的控制输入序列。

  4.  将优化得到的第一个控制输入应用到实际系统中。

  5. 在下一个时间步长重复上述过程,形成滚动优化。

2.2 优化问题

MPC的优化问题通常可以表示为以下形式:

其中:

  • xk​ 是第 k 个时间步的状态向量。

  • uk​ 是第 k 个时间步的控制输入向量。

  • Q 和 R 是权重矩阵,用于平衡状态和控制输入的相对重要性。

  • P 是终端权重矩阵,用于处理终端状态的约束。

  • N 是预测和控制的时域长度。

约束条件通常包括:

  • 状态约束:xmin​≤xk​≤xmax​

  • 控制输入约束:umin​≤uk​≤umax​

  • 系统动态约束:xk+1​=f(xk​,uk​)

3. MPC控制示例:赛车控制

在这个示例中,我们将实现一个太阳能汽车的MPC控制器。汽车的速度和电池状态是状态变量,加速度是控制输入。目标是最小化完成20公里赛程所需的时间,同时满足速度和电池状态的约束。

3.1 系统参数和动态模型

import numpy as np
from scipy.optimize import minimize
import matplotlib.pyplot as plt# 系统参数
eta = 0.9  # 电机效率
C_rr = 0.01  # 滚动阻力系数
m = 500  # 车辆质量(kg)
g = 9.8  # 重力加速度(m/s²)
rho = 1.2  # 空气密度(kg/m³)
C_d = 0.15  # 阻力系数
A_ref = 1  # 参考面积(m²)
dx = 10  # 距离步长(m)
xfinal = 20000  # 赛程总长度(m)
xpreview = 500  # 预览距离(m)# 初始条件
v0 = 15  # 初始速度(m/s)
E_bat0 = 200000  # 初始电池电量(J)
x0 = 0  # 初始位置(m)
t0 = 0  # 初始时间(s)# MPC参数
Np = 50  # 预测时域
Nc = 50  # 控制时域
sim_steps = int(xfinal / dx)  # 总模拟步数# 约束条件
v_min, v_max = 0, 30  # 速度范围(m/s)
E_bat_min, E_bat_max = 1000, 200000  # 电池电量范围(J)

3.2 动态模型

def solar_profile(x):"""太阳能功率分布函数"""return 500 * np.sin(0.0005 * x) + 500def system_dynamics(state, a):"""系统动态模型"""global dxE_bat, v, t, x = stateP_sun = solar_profile(x)P_motor = eta * (0.5 * rho * C_d * A_ref * v**3 + C_rr * m * g * v)dE_bat = P_sun - P_motordv = adt = dx / v if v > 0 else 0dx = dxreturn [E_bat + dE_bat, v + dv, t + dt, x + dx]
  • state:当前系统的状态,包含四个变量:

    • E_bat:电池的剩余电量(单位:焦耳,J)。

    • v:当前速度(单位:米每秒,m/s)。

    • t:当前时间(单位:秒,s)。

    • x:当前位置(单位:米,m)。

  • a:当前的加速度(单位:米每二次方秒,m/s²),是外部输入的控制变量。

3.3 优化问题

def cost_function(a, X):"""MPC成本函数"""E_bat, v, t, x = Xt_start = tJ = 0for i in range(Np):X = system_dynamics(X, a[i])E_bat, v, t, x = XJ += 10 * a[i]**2  # 控制输入惩罚J += (t - t_start)  # 时间惩罚return Jdef nlcon(a, X):"""非线性约束"""E_bat, v, t, x = Xc = []for i in range(Np):X = system_dynamics(X, a[i])E_bat, v, t, x = Xc.extend([v_min - v, v - v_max, E_bat_min - E_bat, E_bat - E_bat_max])return np.array(c)

3.4 主模拟循环

# 主模拟循环
x_array = [x0]
v_array = [v0]
E_bat_array = [E_bat0]
t_array = [t0]
a_array = []for k in range(sim_steps - 1):X = np.array([E_bat_array[k], v_array[k], t_array[k], x_array[k]])a_init = np.zeros(Np)  # 初始猜测bounds = [(-10, 10)] * Np  # 控制输入范围cons = {'type': 'ineq', 'fun': lambda a: -nlcon(a, X)}  # 非线性约束result = minimize(lambda a: cost_function(a, X), a_init, method='SLSQP', bounds=bounds, constraints=cons)a = result.x[0]  # 只使用第一个控制输入# 更新状态X_next = system_dynamics(X, a)E_bat_array.append(X_next[0])v_array.append(X_next[1])t_array.append(X_next[2])x_array.append(X_next[3])a_array.append(a)# 如果到达终点,提前结束if x_array[-1] >= xfinal:break
  • minimize:调用 SciPy 的优化函数,寻找使成本函数最小化的控制输入序列。

    • lambda a: cost_function(a, X):目标函数,即成本函数。

    • a_init:初始猜测的控制输入序列。

    • method='SLSQP':使用序列二次规划(SLSQP)算法进行优化。

    • bounds:控制输入的边界条件。

    • constraints:非线性约束条件。

  • result:优化结果,包含最优的控制输入序列。

3.5 结果可视化

# 绘制结果
plt.figure(figsize=(12, 8))
plt.subplot(3, 1, 1)
plt.plot(np.array(x_array) / 1000, v_array)
plt.xlabel('Position (km)')
plt.ylabel('Velocity (m/s)')
plt.title('Velocity Profile')plt.subplot(3, 1, 2)
plt.plot(np.array(x_array) / 1000, np.array(E_bat_array) / 1000)
plt.xlabel('Position (km)')
plt.ylabel('Battery State of Charge (kJ)')
plt.title('Battery State of Charge')plt.subplot(3, 1, 3)
plt.plot(t_array, a_array)
plt.xlabel('Time (s)')
plt.ylabel('Acceleration (m/s²)')
plt.title('Acceleration Profile')plt.tight_layout()
plt.show()print(f"Race completion time: {t_array[-1]:.2f} seconds")

3.6 完整代码

完整代码如下方便调试:

import numpy as np
from scipy.optimize import minimize
import matplotlib.pyplot as plt
from tqdm import tqdm# 系统参数
eta = 0.9  # 电机效率
C_rr = 0.01  # 滚动阻力系数
m = 500  # 车辆质量(kg)
g = 9.8  # 重力加速度(m/s²)
rho = 1.2  # 空气密度(kg/m³)
C_d = 0.15  # 阻力系数
A_ref = 1  # 参考面积(m²)
dx = 10  # 距离步长(m)
xfinal = 20000  # 赛程总长度(m)
xpreview = 500  # 预览距离(m)# 初始条件
v0 = 15  # 初始速度(m/s)
E_bat0 = 200000  # 初始电池电量(J)
x0 = 0  # 初始位置(m)
t0 = 0  # 初始时间(s)# MPC参数
Np = 50  # 预测时域
Nc = 50  # 控制时域
sim_steps = int(xfinal / dx)  # 总模拟步数# 约束条件
v_min, v_max = 0, 30  # 速度范围(m/s)
E_bat_min, E_bat_max = 1000, 200000  # 电池电量范围(J)def solar_profile(x):"""太阳能功率分布函数"""return 500 * np.sin(0.0005 * x) + 500def system_dynamics(state, a):"""系统动态模型"""global dxE_bat, v, t, x = stateP_sun = solar_profile(x)P_motor = eta * (0.5 * rho * C_d * A_ref * v**3 + C_rr * m * g * v)dE_bat = P_sun - P_motordv = adt = dx / v if v > 0 else 0dx = dxreturn [E_bat + dE_bat, v + dv, t + dt, x + dx]def cost_function(a, X):"""MPC成本函数"""E_bat, v, t, x = Xt_start = tJ = 0for i in range(Np):X = system_dynamics(X, a[i])E_bat, v, t, x = XJ += 10 * a[i]**2  # 控制输入惩罚J += (t - t_start)  # 时间惩罚return Jdef nlcon(a, X):"""非线性约束"""E_bat, v, t, x = Xc = []for i in range(Np):X = system_dynamics(X, a[i])E_bat, v, t, x = Xc.extend([v_min - v, v - v_max, E_bat_min - E_bat, E_bat - E_bat_max])return np.array(c)# 主模拟循环
x_array = [x0]
v_array = [v0]
E_bat_array = [E_bat0]
t_array = [t0]
a_array = []for k in tqdm(range(sim_steps - 1)):X = np.array([E_bat_array[k], v_array[k], t_array[k], x_array[k]])a_init = np.zeros(Np)  # 初始猜测bounds = [(-10, 10)] * Np  # 控制输入范围cons = {'type': 'ineq', 'fun': lambda a: -nlcon(a, X)}  # 非线性约束result = minimize(lambda a: cost_function(a, X), a_init, method='SLSQP', bounds=bounds, constraints=cons)a = result.x[0]  # 只使用第一个控制输入# 更新状态X_next = system_dynamics(X, a)E_bat_array.append(X_next[0])v_array.append(X_next[1])t_array.append(X_next[2])x_array.append(X_next[3])a_array.append(a)# 如果到达终点,提前结束if x_array[-1] >= xfinal:break# 绘制结果
plt.figure(figsize=(12, 8))
plt.subplot(3, 1, 1)
plt.plot(np.array(x_array) / 1000, v_array)
plt.xlabel('Position (km)')
plt.ylabel('Velocity (m/s)')
plt.title('Velocity Profile')plt.subplot(3, 1, 2)
plt.plot(np.array(x_array) / 1000, np.array(E_bat_array) / 1000)
plt.xlabel('Position (km)')
plt.ylabel('Battery State of Charge (kJ)')
plt.title('Battery State of Charge')plt.subplot(3, 1, 3)
t_array.pop(0)
plt.plot(t_array, a_array)
plt.xlabel('Time (s)')
plt.ylabel('Acceleration (m/s²)')
plt.title('Acceleration Profile')plt.tight_layout()
plt.show()print(f"Race completion time: {t_array[-1]:.2f} seconds")

当然因为损失函数设置问题,优化效果一般,仅作学习示例。 

4. 总结

MPC是一种强大的控制策略,特别适用于处理复杂的动态系统和具有约束条件的系统。通过预测未来的系统行为并优化控制输入,MPC能够在满足约束的同时实现期望的性能。本文通过一个太阳能汽车的MPC控制实例,详细介绍了MPC的基本原理和Python实现。希望本文能够帮助大家更好地理解和应用MPC控制技术。我是橙色小博,关注我,在人工智能领域一起学习进步!


文章转载自:

http://fJ4mVQqJ.wLfxn.cn
http://myT7qUdS.wLfxn.cn
http://CFCXrHoW.wLfxn.cn
http://T9ACnJkK.wLfxn.cn
http://RCRcbARf.wLfxn.cn
http://TU3HV8i3.wLfxn.cn
http://Si6uyRAS.wLfxn.cn
http://Gh7Jk6jS.wLfxn.cn
http://EwBSSupB.wLfxn.cn
http://iP9hZtPW.wLfxn.cn
http://FEmtOAIW.wLfxn.cn
http://BsBEM1YV.wLfxn.cn
http://m3uBPmAh.wLfxn.cn
http://bpYlY3TN.wLfxn.cn
http://N4Xn9KWZ.wLfxn.cn
http://yDMx0Ffs.wLfxn.cn
http://sDPA2MQR.wLfxn.cn
http://z5unRGwI.wLfxn.cn
http://nV1IpbYm.wLfxn.cn
http://ejIerNVl.wLfxn.cn
http://AoRj03GY.wLfxn.cn
http://2L8QOfia.wLfxn.cn
http://eh0hTMAk.wLfxn.cn
http://KyU8zKre.wLfxn.cn
http://p12FFZep.wLfxn.cn
http://ShWB1eJT.wLfxn.cn
http://Km3fG2Ov.wLfxn.cn
http://yhRdLhdL.wLfxn.cn
http://y2T5Fi4a.wLfxn.cn
http://YUmFHFtn.wLfxn.cn
http://www.dtcms.com/wzjs/610338.html

相关文章:

  • 网站建设课程ppt东莞专业微网站建设推广
  • 南京网站建设 零云建站邢台高端网站建设
  • asp网站源码安装流程wordpress防止cc攻击
  • 淘宝客网站免费建站做官网网站哪家公司好
  • 化妆品网站模板下载佳能网站建设需求报告
  • 谷搜易外贸网站建设设计和建设企业网站心得和体会
  • 学校网站建设的必要性网络营销课程总结
  • 建筑案例分析模板推广优化关键词
  • 个人网站备案名称例子上海 网站制作公司
  • 沈阳网站开发培训价格东莞网站优化推荐
  • 网站建设的报价单网站logo教程
  • 网站推广建设策略wordpress上传的文件在哪
  • wordpress站群源码做视频解析网站
  • 四川专业旅游网站制作轻饮食网络推广方案
  • 古典网站案例深圳网站开发费用
  • 怎么看网站后台网页尺寸网页美工设计报价单
  • 企业建设网站的好处京东旗下的企业网站有哪些
  • 外贸网站推广招聘杭州做小型app的公司
  • 怎么给网站wordpress上海金山网站建设
  • 做网站将文字放在图片上网站备案重要性
  • 单网页网站制作电商中seo是什么意思
  • 网站如何做才能被360收录卫龙的网站做的污污分
  • 个人网站的搭建一个网站备案多个域名
  • 电子商务网站建设课程总结界面设计图片 作品
  • 建设微信网站制作企业网站带新闻发布功能的建站
  • 建网站没有公司资质做微信图文推送的网站
  • 做网站首页看不到图片php双语网站
  • 平面设计与网站开发的概述如何注册企业邮箱免费
  • 网站制作青岛做网站不好做
  • 网站开发器编程网页