ここで見つけたホワイトペーパーからセンサー障害検出アルゴリズムを実装しようとしています: http://www.hindawi.com/journals/mpe/2013/712028/ref/ 私の数学のスキルはまともですが、この記事では得られませんすべてがどのように設定されているかについての詳細。
私の現在の実装は次のようになります。
/*******************************************************************************
How this algorithm works:
1) There exists W historical windows which hold the distribution objects (mean, variance)
for that window. Each window is of size m (the sliding window size)
2) There exists a current window which changes every iteration by popping the
oldest value into the buffer window.
3) There exists a buffer window which takes the oldest values from the current window
each iteration. Once the buffer window reaches size m
it then becomes the newest historical window.
*******************************************************************************/
int m = 10; //Statistics sliding window size
float outlierDetectionThreshold; // The outlier detection threshold for sensor s, also called epsilon
List<float> U; // Holds the last 10 windows mean
List<float> V; // Holds the last 10 windows variance
List<float> CurrentWindow; // Holds the last m values
procedure GFD()
do
get a value vi
Detection(vi)
while not end
return
procedure Detection(vi)
init outlierDetectionThreshold
init U and V, loading last m distribution characteristics from DB
init CurrentWindow loading the last m - 1 values
Xi; // What is this?
Tau; // What is this?
Insert vi into CurrentWindow // CurrentWindow now has the m latest values
float CurrentWindowMean = Mean(CurrentWindow)
float CurrentWindowVariance = Variance(CurrentWindow)
if (IsStuck(CurrentWindowVariance) or IsSpikes(vi))
return
If (IsOutlier(vi) and not IsRatStatChagne(vi))
return;
IsRatStatChagne(vi);
return
procedure IsStuck(variance)
if (variance == 0)
return true;
return false;
procedure IsSpike(windowMean, windowVariance, historicalMeans, historicalVariances, xi, tau)
if ( (mean / Mean(historicalMeans)) < xi)
if ( (variance / Mean(historicalVariances)) > tau)
return true;
return false;
procedure IsOutlier(historicalMeans, historicalVariances, outlierDetectionThreshold)
// use historicalMeans and historicalVariances to calculate theta
if (theta > outlierDetectionThreshold)
return true;
IsOutlier および IsRatStatChange 関数の実装が困難になっています。
- IsSpike では、xi と tau はどのように計算されますか、またはそれらは何を表していますか?
- IsOutlier 関数の場合、シータはどのように計算されますか?
- IsRatStatStange 関数については、まだ詳しく調べていないのですが、これをしっかりと把握している方はいらっしゃいますか?
あなたが輝く他の洞察は、最も高く評価されます。前もって感謝します。