簡體   English   中英

如何在 GEKKO GUI 中顯示解決方案?

[英]How do I display solution in GEKKO GUI?

我想探索 GEKKO web GUI 的功能,以可視化結果,如https://www.researchgate.net/publication/326740143_GEKKO_optimization_suite中所述。

我已啟用m.options.WEB=1並使用m.solve(GUI=True)解決。

GUI 生成但沒有預期的趨勢(見下文)。 如何顯示變量內容以及GUI使用生成的web接口html文件如何? 全局選項 變量顯示 HTML文件

如您的問題中的 plot 所示, Gekko顯示版本使用GUI=True web 界面中僅顯示FVMVSVCV值。

Gekko 網頁界面

The option WEB is the APMonitor version of the web-interface that uses AJAX and Flash plots (deprecated, to be replaced in a future version) to display the web interface. 這可以保留為m.options.WEB=0以使用 Gekko GUI。

下面是一個生成 Web 界面的示例。 flask package 是 Web 界面的依賴項,第一次啟動時需要刷新網頁。 Select plot 上的變量顯示或添加新的 plot。

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

m = GEKKO()
m.time = np.linspace(0,20,41)

# Parameters
mass = 500
b = m.Param(value=50)
K = m.Param(value=0.8)

# Manipulated variable
p = m.MV(value=0, lb=0, ub=100)
p.STATUS = 1  # allow optimizer to change
p.DCOST = 0.1 # smooth out gas pedal movement
p.DMAX = 20   # slow down change of gas pedal

# Controlled Variable
v = m.CV(value=0)
v.STATUS = 1  # add the SP to the objective
m.options.CV_TYPE = 2 # squared error
v.SP = 40     # set point
v.TR_INIT = 1 # set point trajectory
v.TAU = 5     # time constant of trajectory

# Process model
m.Equation(mass*v.dt() == -v*b + K*b*p)

m.options.IMODE = 6 # control
m.solve(disp=False,GUI=True)

調用m.solve(GUI=True)會在每次調用時生成(或更新)Web 界面。 也可以使用 Matplotlib 顯示 MPC 解決方案。

Matplotlib 繪圖

# get additional solution information
import json
with open(m.path+'//results.json') as f:
    results = json.load(f)

plt.figure()
plt.subplot(2,1,1)
plt.plot(m.time,p.value,'b-',label='MV Optimized')
plt.legend()
plt.ylabel('Input')
plt.subplot(2,1,2)
plt.plot(m.time,results['v1.tr'],'k-',label='Reference Trajectory')
plt.plot(m.time,v.value,'r--',label='CV Response')
plt.ylabel('Output')
plt.xlabel('Time')
plt.legend(loc='best')
plt.show()

還可以生成更復雜的 Matplotlib 圖,以顯示 MPC 解決方案的未來預測范圍、移動范圍估計或其他自定義功能。

我對不在 GUI 中的變量有類似的問題。 Flask 是最新的,版本 2.2.2...

我找到了讓它們消失的方法想了解解決這個問題的方法,不需要所有對象都在全局 scope 中。

運行上面的示例,GUI 會顯示變量及其結果。 但是當 init 被分成一個 function 調用(見下面的第一個代碼塊)並且在 python 中解決它之外的調用時,GUI 不起作用。 我還觀察到我是否使用點符號(第二個代碼塊)將變量放在 model 下,這樣我就可以傳遞 model 及其所有圍繞示例 mu = m.MV() 而不是 u=m.MV( ) GUI 也停止顯示變量。

從 function 傳遞 model

from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt
def init():
    m = GEKKO()
    m.time = np.linspace(0,20,41)

    # Parameters
    mass = 500
    b = m.Param(value=50)
    K = m.Param(value=0.8)

    # Manipulated variable
    p = m.MV(value=0, lb=0, ub=100)
    p.STATUS = 1  # allow optimizer to change
    p.DCOST = 0.1 # smooth out gas pedal movement
    p.DMAX = 20   # slow down change of gas pedal

    # Controlled Variable
    v = m.CV(value=0)
    v.STATUS = 1  # add the SP to the objective
    m.options.CV_TYPE = 2 # squared error
    v.SP = 40     # set point
    v.TR_INIT = 1 # set point trajectory
    v.TAU = 5     # time constant of trajectory

    # Process model
    m.Equation(mass*v.dt() == -v*b + K*b*p)

    m.options.IMODE = 6 # control
    return m

m=init()
m.solve(disp=False,GUI=True)

使用點符號將變量分組為 model

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

m = GEKKO()
m.time = np.linspace(0,20,41)

# Parameters
mass = 500
b = m.Param(value=50)
K = m.Param(value=0.8)

# Manipulated variable
m.p = m.MV(value=0, lb=0, ub=100)
m.p.STATUS = 1  # allow optimizer to change
m.p.DCOST = 0.1 # smooth out gas pedal movement
m.p.DMAX = 20   # slow down change of gas pedal

# Controlled Variable
m.v = m.CV(value=0)
m.v.STATUS = 1  # add the SP to the objective
m.options.CV_TYPE = 2 # squared error
m.v.SP = 40     # set point
m.v.TR_INIT = 1 # set point trajectory
m.v.TAU = 5     # time constant of trajectory

# Process model
m.Equation(mass*m.v.dt() == -m.v*b + K*b*m.p)

m.options.IMODE = 6 # control
m.solve(disp=False,GUI=True)

顯示參數但缺少變量! 顯示參數但缺少變量!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM