Почему 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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