Python移动视界时间序列非线性回归中的坏数据

2024-04-27 03:03:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python Gekko应用程序来估计和控制对工业聚合物制造过程(UNIPOL聚乙烯)的干扰。该方法是更新未知的催化剂活性,以最小化测量和预测生产率之间的差异。然后将催化剂活性用于生产控制。预测的生产率基于与冷却水的热交换。我遇到的问题是,有时生产率测量不好,因为在大的瞬变过程中,与测量(流量计、温度)和计算相关的间歇性问题。分布式控制系统(Honeywell Experion with 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) 

TCLab Moving Horizon Estimation

我可以使用np.nan(NaN)作为度量还是有其他方法来处理坏数据


Tags: 方法in应用程序度量过程with活性工业
1条回答
网友
1楼 · 发布于 2024-04-27 03:03:15

对于任何错误数据,可以将FVs、MVs、SVs或CVs的反馈状态FSTATUS设置为off(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消除了时间序列模型更新中的不良测量,但保留了良好的数据。对于CVs,它通过存储和时移测量值以及每个值的fstatus值来实现这一点。坏数据最终与FSTATUS=0指示符一起离开数据范围。如果要筛选输入数据,也可以将FSTATUS值设置为0到1之间:

x=LSTVAL∗(1−FSTATUS)+MEAS∗FSTATUS

其中,LSTVAL是最后一个值,MEAS是度量值,x是该度量值的新过滤输入。有关FSTATUS的更多信息,请参阅documentation

相关问题 更多 >