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 (将#修改为@)