Почему GEKKO не предоставляет оптимальные команды, хотя выходные данные не соответствуют эталонным?Python

Программы на Python
Anonymous
Почему GEKKO не предоставляет оптимальные команды, хотя выходные данные не соответствуют эталонным?

Сообщение Anonymous »

С этим вопросом связано следующее: модель прогнозирующего управления с использованием GEKKO
Я пытаюсь применить MPC для поддержания температуры в помещении в определенном диапазоне, но GEKKO дает мне нулевые команды, даже если выходные данные расходятся. Я запускаю исправленный код из моего предыдущего вопроса:

Код: Выделить всё

# Import library
import numpy as np
import pandas as pd
import time
from gekko import GEKKO

data_1 = data[["Tx_i","beta_i","Tz_i"]][0:8208000]
data_2 = data[["Tx_i","beta_i","Tz_i"]][-43200:]

# Initialize Model

ts = 300
t = np.arange(0,len(data_1)*ts, ts)
u_id = data_1[['Tx_i','beta_i']]
y_id = data_1[['Tz_i']]

# system identification
m = GEKKO()

#meas : the time-series next step is predicted from prior measurements as in ARX

na=10; nb=10 # ARX coefficients
print('Identify model')
start = time.time()
yp,p,K = m.sysid(t,u_id,y_id,na,nb,objf=100,scale=False,diaglevel=0,pred='meas')
print('temps de prediction :'+str(time.time()-start)+'s')

# i have used only 200 mes of T_externel
T_externel = data_2["Tx_i"].values[20000:20200]
m = GEKKO(remote=False)
m.y = m.Array(m.CV,1)
m.u = m.Array(m.MV,2)
m.arx(p,m.y,m.u)

# rename CVs
m.T = m.y[0]

# rename MVs
m.beta = m.u[1]

# distrubance
m.d = m.u[0]

# distrubance and parametres
m.d = m.Param(T_externel[0])

# lower,heigh bound for MV
TL = m.Param(value = 16)
TH = m.Param(value = 18)

# steady state initialization
m.options.IMODE = 1
m.solve(disp=False)

# set up MPC
m.d.value = T_externel

m.options.IMODE   = 6 # MPC
m.options.CV_TYPE = 2 # the objective is an l2-norm (squared error)
m.options.NODES   = 2 # Collocation nodes
m.options.SOLVER  = 1 # APOPT
m.time = np.arange(0,len(T_externel)*300,300) # step time = 300s

# Manipulated variables
m.beta.STATUS = 1  # calculated by the optimizer
m.beta.FSTATUS = 1 # use measured value
m.beta.DMAX = 1.0  # Delta MV maximum step per horizon interval
m.beta.DCOST = 2.0 # Delta cost penalty for MV movement
m.beta.UPPER = 1.0 # Lower bound
m.beta.LOWER = 0.0
m.beta.MEAS = 0    # set u=0

# Controlled variables
m.T.STATUS = 1        # drive to set point
m.T.FSTATUS = 1       # receive measurement
m.T.SP = 17           # set point

TL.value = np.ones(len(T_externel))*16
TH.value = np.ones(len(T_externel))*18
m.T.value = 17 # Temprature starts at 17

for i in range(len(T_externel)):

m.solve(disp = False)

if m.options.APPSTATUS == 1:
# Retrieve new values
beta  = m.beta.NEWVAL

else:
# Solution failed
beta  = 0.0
И это выход и оптимальное управление, полученные GEKKO:
[img]https://i .sstatic.net/H3yeAnHO.png[/img]

Изображение
< /p>
Изображение

I необходимо поддерживать температуру в помещении в определенном диапазоне.

Подробнее здесь: https://stackoverflow.com/questions/788 ... s-not-matc

Вернуться в «Python»