控制范围和预测范围

2023-12-03

我已经回顾了模型预测控制的参考书目和 Gekko 编程结构。尽管我了解它的编程方式及其目的。例如,我想了解 Gekko 如何根据 Seborg 中的相关内容来管理控制范围和预测范围之间的差异。我看不出代码有什么区别。下面是一个用于说明的 MPC 应用程序示例。

Model Predictive Control

from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt  

m = GEKKO()

# Time Horizon [0,1,2,...,39,40]
m.time = np.linspace(0,40,41)

# MV = Manipulated Variable
u = m.MV(value=0, lb=0, ub=100)
u.STATUS=1; u.DCOST=0.1; u.DMAX=20

# CV = Controlled Variable
x = m.CV(value=0,name='x')
x.STATUS=1; x.SP=45

# Define model
K = m.Param(value=0.8); tau = 15.0
m.Equation(tau*x.dt() == -x + K*u)

# Options and solve
m.options.CV_TYPE = 2
m.options.MV_TYPE = 0
m.options.NODES   = 3
m.options.IMODE   = 6

# Define Control and Prediction Horizon
m.options.CTRL_HOR = 10
m.options.CTRL_TIME = 1
m.options.PRED_HOR = 40
m.options.PRED_TIME = 2

m.solve(disp=False)

# Plot results
plt.figure()
plt.subplot(2,1,1)
plt.step(m.time,u.value,'b-',label='MV Move Plan')
plt.legend()
plt.ylabel('MV')
plt.subplot(2,1,2)
plt.plot([0,40],[45,45],'k-',label='Target Setpoint')
plt.plot(m.time,x.value,'r--',label='CV Response')
plt.ylabel('CV')
plt.xlabel('Time')
plt.legend(loc='best')
plt.show()

我很感激您对我应该如何考虑的反馈np.linspace()代码中使用的指令。

谢谢。

桑德拉·罗德里格斯


控制范围是允许 MV 移动的时间范围部分。预测范围延伸超过控制范围以预测最终的 CV 结果,但没有 MV 移动。这是工业模型预测控制器的遗留概念,需要计算短期移动计划,但也需要预测控制器 MV 和 CV 最终将在哪里解决。

选项 1:使用 Gekko 选项定义时间范围(不推荐)

参数CTRL_HOR, CTRL_TIME, PRED_HOR, and PRED_TIME是来自 APMonitor 的选项,但不要更改 Gekko 解决方案,除非您设置m.options.CSV_READ=0。不建议关闭 CSV 文件读取,因为 Gekko 使用 CSV 数据文件来传达更改。

m.options.CSV_READ = 0

# Define Control and Prediction Horizon
m.options.CTRL_HOR = 10
m.options.CTRL_TIME = 1
m.options.PRED_HOR = 40
m.options.PRED_TIME = 1

Control horizon

选项 2:使用m.time()定义时间范围

Using m.time是定义 MPC 时间范围的首选方法。它可以是不均匀的,不仅仅是控制和预测区间。

m.time = [0,1,2,3,4,6,8,10,15,25,35,50,80]

Non-uniform time horizon

减少预测范围的自由度

预测范围的目的是计算稳定状态,保持控制范围的最后允许的 MV 移动恒定。如果您需要在某个点之后禁止 MV 移动,那么m.Connection()可以将 MV 值链接在一起,以禁止在特定时间范围位置之后移动。

# Create prediction horizon
for i in range(9,len(m.time)):
    m.Connection(u,u,8,i)     # connect end point node
    m.Connection(u,u,8,i,1,2) # connect internal node

Prediction Horizon

这是此示例问题的完整代码。

from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt  

m = GEKKO()

# Time Horizon
m.time = [0,1,2,3,4,6,8,10,15,25,35,50,80]

# MV = Manipulated Variable
u = m.MV(value=0, lb=0, ub=100)
u.STATUS=1; u.DCOST=0.1; u.DMAX=20

# CV = Controlled Variable
x = m.CV(value=0,name='x')
x.STATUS=1; x.SP=45

# Define model
K = m.Param(value=0.8); tau = 15.0
m.Equation(tau*x.dt() == -x + K*u)

# Options and solve
m.options.CV_TYPE = 2
m.options.MV_TYPE = 0
m.options.NODES   = 3
m.options.IMODE   = 6

# Create prediction horizon
for i in range(9,len(m.time)):
    m.Connection(u,u,8,i)     # connect end point node
    m.Connection(u,u,8,i,1,2) # connect internal node

m.solve(disp=True)

# Plot results
plt.figure()
plt.subplot(2,1,1)
plt.step(m.time,u.value,'b-',label='MV Move Plan')
plt.plot(m.time[0:8],u.value[0:8],'o',color='orange',label='Control Horizon')
plt.plot(m.time[8:],u.value[8:],'x',color='purple',label='Prediction Horizon')
plt.legend()
plt.ylabel('MV')
plt.subplot(2,1,2)
plt.plot([0,80],[45,45],'k-',label='Target Setpoint')
plt.plot(m.time,x.value,'r.-',label='CV Response')
plt.ylabel('CV')
plt.xlabel('Time')
plt.legend(loc='best')
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

控制范围和预测范围 的相关文章

  • 如何动态清除用户控件中的所有控件?

    是否可以动态 并且一般地 清除用户控件的所有子控件的状态 例如 所有的 TextBox DropDrownList RadioButton DataGrid Repeater 等 基本上任何具有 ViewState 的东西 我试图避免做这样
  • ASP.NET 的密码强度控制

    我需要 ASP NET 的密码强度控制 我查看了ajax控制工具包中的控制 但它不是完全可配置的 我需要将它静态地放置在布局上 尝试使用谷歌 Google 密码强度 APIhttp www codeproject com KB ajax G
  • 如何在不阻塞的情况下向listview填充大量信息?

    我在后台线程上创建一个 ListViewItems 数组 然后在 ui 线程上用它填充我的列表视图 问题是 如果数组太大 则更新列表视图时 ui 会阻塞 有没有一种方法可以填充列表视图 同时对用户界面影响很小 如果您有大量数据进入其中 您可
  • 帕累托最优前沿

    我试图获得两个适应度函数的帕累托最优前沿 我通过使用虚拟矩阵对非支配解进行排序 该虚拟矩阵在矩阵中为任何非支配解分配 1 当我绘制帕累托前沿时 它不断包含我知道不属于帕累托最优的点 但是 我似乎找不到这个问题的原因 任何帮助将非常感激 fo
  • Windows 窗体中的十进制文本框

    我正在做一个 Financial Winforms 应用程序 但在控件方面遇到了一些问题 我的客户需要在各处插入小数值 价格 折扣等 我想避免一些重复验证 因此 如果不是因为焦点和蒙版的长度 我立即尝试了能够满足我的需求的 MaskedTe
  • 如何在 ASP.NET MVC 中创建可重用控件

    我应该如何 应该在 ASP NET MVC 3 中创建一些 自定义控件 我对部分观点感到愤怒 ViewUsersControl Html RenderAction 但我仍然不知道哪种方式是剃刀视图正确的 MVC 方式 如果我需要渲染一些aj
  • 在 Silverlight 中检测控件的焦点

    有什么方法可以判断某个控件 特别是 System Windows Controls TextBox 是否在 Silverlight 中获得焦点 我正在寻找类似以下内容的内容 您会在常规 Net 应用程序中看到的内容 textBox Focu
  • 如何获取 DataGridView 控件上滚动条的大小?

    如何获取控件 例如 DataGridView 上显示的水平滚动条的高度和 或垂直滚动 条的宽度 Use SystemInformation HorizontalScrollBarHeight SystemInformation Vertic
  • 在ASP.NET中的子控件中创建ASP.NET ReportViewer;文档结构图按钮中断

    我们在使用 Visual Studio 2008 ReportViewer 控件时遇到了一个奇怪的问题 具体来说 当我们在页面上有一个子控件 并且子控件本身承载一个报表查看器 并且该报表具有文档结构图时 显示 隐藏文档结构图按钮上的回发似乎
  • Gekko优化包和numpy反函数

    我使用 Gekko 为一组反应动力学选择 A 最优实验 目标函数是最小化迹 inv Z Z 其中 Z 是通过将其参数周围的 ODE 线性化而计算出的尺度灵敏度矩阵 正如您所看到的 目标函数涉及 Z Z 的倒数 我使用了 numpy 甚至 s
  • retrbinary 期间线程化“NOOP”命令

    我编写了一个 FTP 脚本 遗憾的是该脚本必须处理位于防火墙后面的服务器 ISP 也会很早就切断我的控制连接 无论我在防火墙的任一侧设置什么样的超时设置 我最终做出了两个选择 1 在 retrbinary 命令中分叉代码 以便下载完成时每
  • 为什么 ASP.NET Dynamic 控件即使添加到 Page_Load 中也能保留 ViewState?

    我做了一些与动态控件和 ViewState 相关的研究 我读到 为了保留动态控件的 ViewState 您必须将其添加到 Page Init 事件中 这是有道理的 因为 PageLifeCycle 是 初始化 加载视图状态 加载回发数据 L
  • 如何禁用 EditText 中的 SwiftKey(第三方键盘)行为?

    我在 Android 应用程序中使用标准的 EditText 控件 此 EditText 的输入只能从应用程序的内置键盘插入 When SwiftKey 第三方键盘应用程序 安装在设备上 它会导致奇怪的行为 例如光标跳动 并在某些文本下方添
  • UIButton 和外观 API - 支持与否?

    根据UIAppearance协议参考 http developer apple com library ios documentation UIKit Reference UIAppearance Protocol Reference Re
  • 如何重叠两个控件

    我有一个圆和一个线控件 Circle 控件的 OnPaint 绘制一个圆 Line 控件的 OnPaint 绘制一条线 这两个控件包含在另一个控件 DrawingControl 中 我需要在圆上放置一条线 但圆的背景删除了该线 我尝试启用透
  • .NET(或 MFC)的高速图形控件?

    我需要编写一个数字示波器类型的应用程序 有很多很棒的静态绘图控件 但我需要一些可以绘制每秒处理 4000 个样本的 16 条轨迹的东西 有人知道 NET 的高速图形控件吗 我什至会选择 MFC 因为它可以封装到 NET 控件中 谢谢您的帮助
  • 使用 z = f(x, y) 形式的 B 样条方法来拟合 z = f(x)

    作为一个潜在的解决方案这个问题 https stackoverflow com questions 76476327 how to avoid creating many binary switching variables in gekk
  • 访问 ascx 文件中的母版页控件

    我有一个母版页文件 其中包含 2 个面板控件中的 2 个菜单 我还使用控件来检查用户是否登录并获取用户类型 根据我想要显示 隐藏面板的类型 控件本身不在母版页中引用 而是通过 CMS 系统动态引用 我想在用户控件中使用findcontrol
  • 一个好的 WPF 滚动时间线控件? (精美的日期时间选择器)

    我正在寻找可以用作时间线控件的东西 一种 横幅 用户可以向左或向右拖动以前进或后退 然后他或她应该能够在该控件上选择一个时间点 一个精美的日期时间选择器 有任何想法吗 欢迎您尝试我的新 TimelineControl 我已经在 codepl
  • 更改 ASP.NET 控件的访问修饰符

    如果我像这样将控件放入 aspx 文件中

随机推荐

  • 清理嵌套的 mod_rewrite 语句

    我正在清理一个大 htaccess文件包含很多mod rewrite声明 混乱的最大部分来自捕获各种事件的语句 directory1 directory1 directory2 directory1 directory2 directory
  • 如何使 Laravel 雄辩地进行“IN”查询?

    我想在 Laravel Eloquent 中进行查询 就像这里的原始 MySQL 查询一样 SELECT from exampleTbl where id in 1 2 3 4 我已经在 Laravel Eloquent 中尝试过这个 但它
  • 将java对象序列化为文本文件

    我有一个java库 我想将java对象的实例保存到文本文件中 我尝试使用所有java库进行序列化和反序列化为xml http karussell wordpress com 2009 09 03 xml serializers for ja
  • 在Python中从文本文件读取多个变量的聪明方法

    我正在尝试加载存储在单个文本文件中的多个向量和矩阵 对于 numpy 该文件如下所示 VectorA 1 2 3 4 MatrixA 1 2 3 4 5 6 VectorB 3 4 5 6 7 理想的解决方案是拥有一个字典对象 例如 Vec
  • py2exe 因 pandas 导入失败

    我有一个 python 脚本 我想使用 py2exe 将其制作成可执行文件 当我尝试导入 pandas 时它失败了 这实际上是我的示例失败脚本中的全部内容 import pandas 回溯看起来像 File c users appdata
  • javascript 在数组中的对象之间保留某些属性

    我想从数组中的对象中删除每个属性 除了其中一些属性 var listToKeep name school var arrayOfObjects id abc name oh school a sport a id efg name em s
  • 模板静态成员初始化顺序

    我有一个与此处发布的上一个问题相关的问题静态字段初始化顺序假设我有以下结构 有 2 个静态成员x and y 模板类型本身 include
  • Android - 为我的应用程序创建一个将从网页链接打开的架构

    我正在尝试创建一个类似 myapp somthing anotherthing 的架构 如果网页或任何其他应用程序链接到该架构将打开我的应用程序 我已将其添加到我的 AndroidManifest xml 中以用于我的主要活动
  • BufferGeometry 面材质

    使用 BufferGeometry 时 如何将材质分配给面 是否有类似数组包含相同信息的东西Face materialIndex BufferGeometry不支持MeshFaceMaterial
  • 将sql查询输出到html表中

    我试图将此 PHP SQL 查询的输出放入数据库表中 但它将所有行数据输出到一列中 if isset POST submit name htmlentities POST name parts explode name lastname a
  • OpenCV Mat 旋转得到错误结果

    我想将图像旋转 90 度 我的代码如下 int main int argc const char argv Mat img imread Users chuanliu Desktop src4 p00 JPG resize img img
  • 您没有 /var/lib/gems/2.3.0 目录的写权限

    我在 ubuntu 16 04 上安装了 ruby which ruby usr bin ruby ruby v ruby 2 3 0p0 2015 12 25 x86 64 linux gnu gem install bundler ER
  • 我可以使用 Liquid 模板在 Jekyll 中实现合适的平铺分页吗?

    I ve found this nice jekyll theme http www jacoporabolini com emerald with good looking pagination Unfortunately is only
  • 获取MySql数据并将其存储到Javascript数组中

    想要从 Mysql 检索记录数据并将其存储到 Javascript 数组中 以获取以下格式的 heatmap js 地图数据 var testData max 46 data lat 33 5363 lon 117 044 value 1
  • 什么时候我可以放心地用-O3编译程序?

    我见过很多人抱怨 O3 option GCC 程序无法使用编译选项 O3 浮点问题由 David Hammen 提供 我查看了 GCC 的手册 O3 Optimize yet more O3 turns on all optimizatio
  • Java EE 6 与 Spring 3 堆栈 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我现在正在开始一个新项目
  • 如何在 Angular 中重现 Angular JS .broadcast() / .on() 行为?

    我正在努力用 Angular8 重写 AngularJS 应用程序 我已经阅读了组件之间通信的不同方法 但鉴于我当前的要求 似乎无法找到实现此目的的正确方法 我目前有 2 个兄弟组件 它们都使用处理基本 CRUD 功能的通用服务 表单组件调
  • 将 ORB 特征与阈值进行匹配

    我的项目是基于android的草药识别 我使用 ORB 来获取关键点 特征并匹配特征 我想使用这个算法 我使用 4 个参考图像 并将它们的特征 image1 与 image1 1 2 1 3 1 4 2 3 3 4 进行匹配 然后我将到数据
  • SQL Server Express 4GB 限制

    简单问题 4GB 限制是针对每个数据库还是针对已安装的 SQL Server 实例 如您所知 您可以在 SQL Server 实例中创建多个数据库 每个数据库的大小限制为 4GB
  • 控制范围和预测范围

    我已经回顾了模型预测控制的参考书目和 Gekko 编程结构 尽管我了解它的编程方式及其目的 例如 我想了解 Gekko 如何根据 Seborg 中的相关内容来管理控制范围和预测范围之间的差异 我看不出代码有什么区别 下面是一个用于说明的 M