【问题标题】:Bad data in Python moving horizon time-series nonlinear regressionPython移动地平线时间序列非线性回归中的不良数据
【发布时间】:2019-12-28 00:58:58
【问题描述】:

我有一个Python Gekko 应用程序来估计和控制对工业聚合物制造过程(UNIPOL 聚乙烯)的干扰。该方法是更新未知的催化剂活性以最小化测量的和预测的生产率之间的差异。然后将催化剂活性用于生产控制。预测的生产率基于与冷却水的热交换。我遇到的问题是,有时由于与测量(流量计、温度)和大瞬变期间的计算相关的间歇性问题,生产率测量并不好。分布式控制系统(Honeywell Experion 与 TDC3000)具有适当的保护措施,可防止错误测量并报告值但状态不佳。如何使用可用的良好测量值,但忽略 Python Gekko 中间歇性的不良测量值?由于专有问题,我没有可以分享的示例代码,但它是similar to this TCLab exercise

 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) 作为衡量标准还是有其他方法来处理不良数据?

【问题讨论】:

  • 无法使用np.nan 忽略测量。目标变为 NaN,因此如果 TC1.MEAS = np.nan 则使用该值。

标签: python time-series nonlinear-optimization gekko honeywell


【解决方案1】:

对于任何不良数据,您可以将 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 的更多信息,请查看documentation

【讨论】:

    猜你喜欢
    • 2020-09-30
    • 1970-01-01
    • 2013-11-29
    • 2018-12-09
    • 1970-01-01
    • 2020-04-16
    • 2015-11-26
    • 2015-08-06
    • 2014-08-30
    相关资源
    最近更新 更多