亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

GEKKO:避免預測中第一個 MV 值的影響

GEKKO:避免預測中第一個 MV 值的影響

胡說叔叔 2023-10-06 11:01:46
我在 MPC 模式下使用 GEKKO (Solver APOPT)。我定義我的操縱變量如下:u = m.MV(lb=0, ub=1, integer=True)u.STATUS = 1 我故意不使用:u = m.MV(value=1 ,lb=0, ub=1, integer=True)u.STATUS = 1 或者:u = m.MV(value=0 ,lb=0, ub=1, integer=True)u.STATUS = 1 因為我不知道下一個決定是什么,我希望優化器來定義它。顯然,當您未定義 的值時u,GEKKO 會為其指定默認值 0。問題是這個值u用于我的模型預測以及其他計算中,這是不希望的(見圖)。正如您所看到的, 的新值u是 1 ,在我的例子中意味著冰箱處于打開狀態。但是,溫度預測從默認值u0 開始。因此,冰箱中的溫度在下一個時間步長中上升,并且僅在下一個時間步長中開始下降。我可以將 value 定義為之前的結果,u但這也不是 100% 正確。我怎樣才能避免這種情況?還有其他選擇可以讓我的預測正確開始嗎?我很感激你的幫助:)
查看完整描述

1 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

有一個選項可以計算任何參數或變量(包括 MV)的初始條件:

m.free_initial(u)

這是一個簡單的應用程序,顯示了此函數對解決方案的影響。

free_initial(mv)

https://img1.sycdn.imooc.com//651f78e20001bafc10780339.jpg

import numpy as np

from gekko import GEKKO

m = GEKKO(remote=False)

m.time = np.linspace(0,10,11)

mv = m.MV(value=0,lb=0,ub=1,integer=True);? ? mv.STATUS=1

cv = m.CV(value=1); cv.SPHI=0.6; cv.SPLO=0.4; cv.STATUS=1

m.Equation(3*cv.dt()+(cv-1)==-0.8*mv)

m.free_initial(mv)

m.options.IMODE=6; m.options.CV_TYPE=1

m.options.NODES=3; m.options.MV_TYPE=0

m.options.SOLVER =1

m.solve(disp=False)


import matplotlib.pyplot as plt

plt.step(m.time,mv,'r.',markersize=5,where='post',label='MV')

plt.plot(m.time,cv,'b:',label='CV')

plt.plot([0,10],[0.6,0.6],'k:',label='SP Range')

plt.plot([0,10],[0.4,0.4],'k:')

plt.legend(); plt.xlabel('Time')

plt.show()

沒有free_initial(mv)

https://img1.sycdn.imooc.com//651f78ef00015f6810410353.jpg

查看完整回答
反對 回復 2023-10-06
  • 1 回答
  • 0 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號