# HG changeset patch # User Sascha L. Teichmann # Date 1556185157 -7200 # Node ID 41ed69dbf9bbcddbf386ef7704cfdcb14d679229 # Parent d79e6045452eb68f8baff42b668bfdf99be67b80 Nash Sutcliffe: Optimization: When append predicted values only accept predictions where the issue date is 24/48/72h in the past of the measure date. diff -r d79e6045452e -r 41ed69dbf9bb pkg/controllers/gauges.go --- a/pkg/controllers/gauges.go Thu Apr 25 11:15:27 2019 +0200 +++ b/pkg/controllers/gauges.go Thu Apr 25 11:39:17 2019 +0200 @@ -448,6 +448,23 @@ } defer rows.Close() + acceptedDeltas := []time.Duration{ + -time.Hour * 24, + -time.Hour * 48, + -time.Hour * 72, + } + + isAccepted := func(observed, predicted time.Time) bool { + for _, delta := range acceptedDeltas { + t := observed.Add(delta) + d := predicted.Sub(t) + if -10*time.Millisecond < d && d < 10*time.Millisecond { + return true + } + } + return false + } + var ( hasCurrent bool current observedPredictedValues @@ -491,22 +508,12 @@ } if predicted { - current.predicted = append( - current.predicted, - common.TimedValue{When: issueDate, Value: value}, - ) - /* - // current prediction same as last two? - if l := len(current.predicted); l > 1 && current.predicted[l-1].Value == value && current.predicted[l-2].Value == value { - // only update last time. - current.predicted[l-1].When = issueDate - } else { - current.predicted = append( - current.predicted, - common.TimedValue{When: issueDate, Value: value}, - ) - } - */ + if isAccepted(measureDate, issueDate) { + current.predicted = append( + current.predicted, + common.TimedValue{When: issueDate, Value: value}, + ) + } } else { current.observed = value }