微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ARX型号是Gekko

如何解决ARX型号是Gekko

因此,这是该问题的后续问题:ARX Models in Gekko

我想我没有提供足够的细节,我的问题也不是很清楚。 首先,我正在寻找要在MPC中使用它的系统模型,因此为了从我的MPC中获得良好的结果,标识必须是好的。

这是我用于GEKKO系统识别的代码。我使用了大约5个小时的数据,其中冰箱仅由恒温器控制。每5秒就会有来自我的传感器的数据。

具有Sysid()的标识

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

#Load data

a_dataframe = pd.read_csv("State.txt")
a_dataframe.columns = ["State"]
u = a_dataframe["State"]
b_dataframe = pd.read_csv("Temp.txt")
b_dataframe.columns = ["Temp"]
T = b_dataframe["Temp"]
t = np.linspace(0,17180,3436)

#Identification
m = GEKKO()
na = 1 # output coefficients
nb = 1 # input coefficients
yp,p,K = m.sysid(t,u,T,na,nb,shift='calc',pred='meas')

#Plots
plt.figure()
plt.subplot(2,1,1)
plt.plot(t,u)
plt.subplot(2,2)
plt.plot(t,T)
plt.plot(t,yp)
plt.xlabel('Time')
plt.show()

绘制结果

enter image description here

我用sysid()获得的结果不好。尽管有这些结果,

我用以下代码模拟了ARX模型。使用从sysid()获得的p字典。

模拟

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

na = 1# Number of A coefficients
nb = 1 # Number of B coefficients
ny = 1 # Number of outputs
nu = 1 # Number of inputs

# A (na x ny)
# actual A,B,C values are from 5 h data
A = np.array([[1.00037807]])
# B (ny x (nb x nu))
B= np.array([[[-0.01318095]]])
C = np.array([-0.00162522])

# create parameter dictionary
# parameter dictionary p['a'],p['b'],p['c']
# a (coefficients for a polynomial,na x ny)
# b (coefficients for b polynomial,ny x (nb x nu))
# c (coefficients for output bias,ny)
p = {'a':A,'b':B,'c':C}

m = GEKKO(remote=True)
y,u = m.arx(p)

# load inputs
#tf = 719 # final time
u1 = np.append(np.ones(500),np.zeros(500),0)
u2 = np.append(u1,np.ones(500),0)
u3 = np.append(u2,0)
u4 = np.append(u3,0)
u5 = np.append(u4,np.zeros(936),0)
u[0].value = u5

cv = y[0]
mv= u[0]
cv.value = 14.2

m.time = np.linspace(0,3436)
m.options.imode = 4
m.options.nodes= 2
#m.options.soLVER = 1
# simulate
m.solve()

模拟结果:

enter image description here

温度变化不符合逻辑。最后,冰箱关闭,温度持续下降。而且我的冰箱强度不足以达到-5°C。 我的问题是:

  1. 在这里可能做错了什么?我是否使用了足够的数据进行识别?
  2. 为什么使用线性回归而不是sysid()会得到p的其他系数? (我上一篇文章代码
  3. sysid()是否像线性回归一样进行?
  4. 为什么通过线性回归可以获得更好的拟合结果,但是在绘制模拟时温度变化不大? (请参阅我上一篇文章中的线性回归模拟图)

预先感谢:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。