[英]Bad data in Python moving horizon time-series nonlinear regression
我有一個Python Gekko應用程序來估計和控制對工業聚合物制造過程(UNIPOL 聚乙烯)的干擾。 該方法是更新未知的催化劑活性以最小化測量和預測生產率之間的差異。 然后將催化劑活性用於生產控制。 預測的生產率基於與冷卻水的熱交換。 我遇到的問題是,有時由於與測量(流量計、溫度)和大瞬變期間的計算相關的間歇性問題,生產率測量結果不佳。 分布式控制系統(帶有 TDC3000 的霍尼韋爾 Experion)具有適當的保護以防止不良測量並報告值但狀態不良。 如何使用可用的良好測量但忽略 Python Gekko 中的間歇性不良測量? 由於專有問題,我沒有可以共享的示例代碼,但它類似於這個 TCLab 練習。
for i in range(1,n):
# Read temperatures in Celsius
T1m[i] = a.T1
T2m[i] = a.T2
# Insert measurements
TC1.MEAS = T1m[i]
TC2.MEAS = T2m[i]
Q1.MEAS = Q1s[i-1]
Q2.MEAS = Q2s[i-1]
# Predict Parameters and Temperatures with MHE
m.solve(disp=True)
我可以使用np.nan
(NaN) 作為度量還是有其他方法來處理壞數據?
對於任何不良數據,您可以將 FV、MV、SV 或 CV 的反饋狀態FSTATUS
設置為關閉 (0)。
if bad_measurements:
TC1.FSTATUS = 0
TC2.FSTATUS = 0
Q1.FSTATUS = 0
Q2.FSTATUS = 0
else:
TC1.FSTATUS = 1
TC2.FSTATUS = 1
Q1.FSTATUS = 1
Q2.FSTATUS = 1
Gekko 從時間序列模型更新中消除了不良測量,但保留了良好數據。 對於 CV,它通過存儲和時移每個測量值和 fstatus 值來實現這一點。 壞數據最終會隨着FSTATUS=0
指標離開數據范圍。 如果要過濾輸入數據,還可以將FSTATUS
值設置為 0 到 1 之間:
x=LSTVAL∗(1−FSTATUS)+MEAS∗FSTATUS
其中LSTVAL
是最后一個值, MEAS
是測量值, x
是該測量值的新過濾輸入。 有關FSTATUS
更多信息在文檔中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.