- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是从这个 one 派生的问题.发布我的问题后,我找到了一个解决方案(更像是一个强制优化器优化的补丁)。有件事让我很困惑。 John Hedengren正确指出 ODE 中的 b=1.0
导致了 IMODE=6
的不可行解。然而,在我对 IMODE=3
的零碎工作中,我确实找到了解决方案。
我试图通过阅读 GEKKO's 了解这里发生的事情IMODE=3
和 6
的文档,但我不清楚
IMODE=3
RTO Real-Time Optimization (RTO) is a steady-state mode that allows decision variables (FV or MV types with STATUS=1) or additional variables in excess of the number of equations. An objective function guides the selection of the additional variables to select the optimal feasible solution. RTO is the default mode for Gekko if m.options.IMODE is not specified.
IMODE=6
MPC Model Predictive Control (MPC) is implemented with IMODE=6 as a simultaneous solution or with IMODE=9 as a sequential shooting method.
为什么 b=1。在一种模式下工作但在另一种模式下不工作?
这是我对 IMODE=3
和 b=1.0
的修补工作:
from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt
m = GEKKO(remote=False)
m.time = np.linspace(0,23,24)
#initialize variables
T_e = [50.,50.,50.,50.,45.,45.,45.,60.,60.,63.,\
64.,45.,45.,50.,52.,53.,53.,54.,54.,53.,52.,51.,50.,45.]
temp_low = [55.,55.,55.,55.,55.,55.,55.,68.,68.,68.,68.,55.,55.,68.,\
68.,68.,68.,55.,55.,55.,55.,55.,55.,55.]
temp_upper = [75.,75.,75.,75.,75.,75.,75.,70.,70.,70.,70.,75.,75.,\
70.,70.,70.,70.,75.,75.,75.,75.,75.,75.,75.]
TOU = [0.05,0.05,0.05,0.05,0.05,0.05,0.05,200.,200.,\
200.,200.,200.,200.,200.,200.,200.,200.,200.,\
200.,200.,200.,0.05,0.05,0.05]
b = m.Param(value=1.)
k = m.Param(value=0.05)
u = [m.MV(0.,lb=0.,ub=1.) for i in range(24)]
# Controlled Variable
T = [m.SV(60.,lb=temp_low[i],ub=temp_upper[i]) for i in range(24)]
for i in range(24):
u[i].STATUS = 1
for i in range(23):
m.Equation( T[i+1]-T[i]-k*(T_e[i]-T[i])-b*u[i]==0.0 )
m.Obj(np.dot(TOU,u))
m.options.IMODE = 3
m.solve(debug=True)
myu =[u[0:][i][0] for i in range(24)]
print myu
myt =[T[0:][i][0] for i in range(24)]
plt.plot(myt)
plt.plot(temp_low)
plt.plot(temp_upper)
plt.show()
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot(myu,color='b')
ax2.plot(TOU,color='k')
plt.show()
结果:
最佳答案
不可行IMODE=6
和可行IMODE=3
的区别在于IMODE=3
情况允许温度初始条件由优化器调整。优化器认识到初始条件可以更改,因此将其修改为 75 以保持可行并最大限度地减少 future 的能源消耗。
from gekko import GEKKO
import numpy as np
m = GEKKO(remote=False)
m.time = np.linspace(0,23,24)
#initialize variables
T_external = [50.,50.,50.,50.,45.,45.,45.,60.,60.,63.,\
64.,45.,45.,50.,52.,53.,53.,54.,54.,\
53.,52.,51.,50.,45.]
temp_low = [55.,55.,55.,55.,55.,55.,55.,68.,68.,68.,68.,\
55.,55.,68.,68.,68.,68.,55.,55.,55.,55.,55.,55.,55.]
temp_upper = [75.,75.,75.,75.,75.,75.,75.,70.,70.,70.,70.,75.,\
75.,70.,70.,70.,70.,75.,75.,75.,75.,75.,75.,75.]
TOU_v = [0.05,0.05,0.05,0.05,0.05,0.05,0.05,200.,200.,200.,200.,\
200.,200.,200.,200.,200.,200.,200.,200.,200.,200.,0.05,\
0.05,0.05]
b = m.Param(value=1.)
k = m.Param(value=0.05)
T_e = m.Param(value=T_external)
TL = m.Param(value=temp_low)
TH = m.Param(value=temp_upper)
TOU = m.Param(value=TOU_v)
u = m.MV(lb=0, ub=1)
u.STATUS = 1 # allow optimizer to change
# Controlled Variable
T = m.SV(value=75)
m.Equations([T>=TL,T<=TH])
m.Equation(T.dt() == k*(T_e-T) + b*u)
m.Minimize(TOU*u)
m.options.IMODE = 6
m.solve(disp=True,debug=True)
import matplotlib.pyplot as plt
plt.subplot(2,1,1)
plt.plot(m.time,temp_low,'k--')
plt.plot(m.time,temp_upper,'k--')
plt.plot(m.time,T.value,'r-')
plt.ylabel('Temperature')
plt.subplot(2,1,2)
plt.step(m.time,u.value,'b:')
plt.ylabel('Heater')
plt.xlabel('Time (hr)')
plt.show()
如果再试一天(48 小时),您可能会发现问题最终无法解决,因为较小的加热器 b=1
无法满足较低的温度约束条件。
使用 IMODE=6
的优点之一是您可以编写微分方程而不是自己进行离散化。使用 IMODE=3
,您可以对微分方程使用欧拉方法。 IMODE>=4
的默认离散化为 NODES=2
,相当于您的 Euler 有限差分法。设置 NODES=3-6
可提高 orthogonal collocation on finite elements 的准确性.
关于GEKKO RTO 与 MPC 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60772432/
我不知道如何使用 mpc 正确查询 mpd。 例如:我知道如何列出所有专辑 mpc list album 但我想要的不仅仅是名字。 如何查询 mpd 的专辑、路径、艺术家、轨道编号、持续时间等?最好在
我正在研究一个 MPC 问题,其中单个线性模型在预测范围内的每个时间步预测控制变量(见下文,其中 u 是操纵变量,y 是控制变量)。每次窗口移动时,预测范围中每个线性模型的系数都会根据当前状态变量而变
我正在尝试使用 MPC 为名为 Wittgen ( https://esolangs.org/wiki/Wittgen ) 的语言定义语法 我定义了以下语法: mpc_parser_t* Variab
我正在这里阅读编译器教程 www.buildyourownlisp.com 。它使用一个名为 mpc 的解析器组合器。我现在所拥有的将解析波兰表示法,但我正在尝试找出如何使用标准表示法。我只是似乎不知
我正在试验 OpenDDS(和 ACE/TAO),它使用 MPC(Make Project Creator)来生成实际的 make 文件,它做了一些非常烦人的事情。 首先,它生成大量中间源文件(一些
此模型预测控制 (MPC) 示例使用 GEKKO(将 throttle 踏板运动与汽车速度相关联),未明确说明要最小化的成本函数: from gekko import GEKKO import num
MPC 在这里:http://www.multiprecision.org/我想在安装了 GMP 和 MPFR 的 Linux 下用 g++ 编译 C++ 代码。关键是我不知道应该在命令行中放置什么标
所以最初我们有这段代码: browser = MCNearbyServiceBrowser(peer: peer, serviceType: "sample") 它能看到服务类型为“sample”的所
我有一个循环的脚本: #!/bin/sh while [ true ] do mpc current > current_song.txt mpc idle player done 但是有时它
这是从这个 one 派生的问题.发布我的问题后,我找到了一个解决方案(更像是一个强制优化器优化的补丁)。有件事让我很困惑。 John Hedengren正确指出 ODE 中的 b=1.0 导致了 IM
我只需要澄清一下 GEKKO 中 MPC 模式下预测和控制范围的定义。在网上找到的例子中(例如这里 https://apmonitor.com/do/index.php/Main/TCLabF),一个
我正在尝试使用 C# 应用从我的个人最爱 Media Player Classic 中获取媒体信息。 假设我得到了我感兴趣的 MPC-HC 实例的窗口句柄,但 WM_GETTEXT 只得到了窗口标题。
我想在真实的机器人上做一些轨迹跟踪,并且我想使用MPC,所以我找到了这个gekko。我可以对我的机器人和其他东西进行模拟,但是是否可以实时使用它,因为我发现计算最佳解决方案需要一些时间,而且我不太确定
我认为这是我安装 GCC 的问题。我不断得到 checking for the correct version of gmp.h... yes checking for the correct ver
我正在尝试使用 MPC 和 GEKKO 实现恒温器控制。 状态变量(温度)应在预先指定的下限和上限温度值范围内,temp_low和 temp_upper在下面的代码中。 两者的界限在一天中都不同:每小
按照此处发布的说明进行操作:http://stackoverflow.com/questions/9450394/how-to-install-gcc-from-scratch-with-gmp-mp
假设我有两个 gmpy2.mpc 对象 x 和 y 精确到 p 位。当我计算 x+y 时,x 和 y 的某些部分可能会抵消,因此精度较低。 例如 from gmpy2 import * x = mpc
我正在尝试使用 C 语言的 MPC(微解析器组合器)库编写一个反向波兰表示法解析器。但是,我正在使用的语法问题或其他地方的另一个问题意味着它只输出第一个数字而不是完整的 AST。 语法: mpc_pa
我已经在离线模式下使用 Gekko python 为 MPC 构建了几个成功的代码。但是,我仍然想在运行程序时删除命令窗口的闪烁。有什么建议 ?谢谢。 最佳答案 新版本编辑 latest versio
我想知道是否有人知道为什么 gcc 对用于编译和构建 gcc 本身的库的版本往往如此保守。 我问这个的主要原因是: 我认为列出的“隐含建议”版本之间有很大的转变 here (它们也出现在 gcc 源代
我是一名优秀的程序员,十分优秀!