Mercurial > gemma
comparison pkg/controllers/gauges.go @ 3101:41ed69dbf9bb
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.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2019 11:39:17 +0200 |
parents | f516ac26f4db |
children | 54a3e40cfbed |
comparison
equal
deleted
inserted
replaced
3100:d79e6045452e | 3101:41ed69dbf9bb |
---|---|
446 ); err != nil { | 446 ); err != nil { |
447 return nil, err | 447 return nil, err |
448 } | 448 } |
449 defer rows.Close() | 449 defer rows.Close() |
450 | 450 |
451 acceptedDeltas := []time.Duration{ | |
452 -time.Hour * 24, | |
453 -time.Hour * 48, | |
454 -time.Hour * 72, | |
455 } | |
456 | |
457 isAccepted := func(observed, predicted time.Time) bool { | |
458 for _, delta := range acceptedDeltas { | |
459 t := observed.Add(delta) | |
460 d := predicted.Sub(t) | |
461 if -10*time.Millisecond < d && d < 10*time.Millisecond { | |
462 return true | |
463 } | |
464 } | |
465 return false | |
466 } | |
467 | |
451 var ( | 468 var ( |
452 hasCurrent bool | 469 hasCurrent bool |
453 current observedPredictedValues | 470 current observedPredictedValues |
454 values []observedPredictedValues | 471 values []observedPredictedValues |
455 ) | 472 ) |
489 when: measureDate, | 506 when: measureDate, |
490 } | 507 } |
491 } | 508 } |
492 | 509 |
493 if predicted { | 510 if predicted { |
494 current.predicted = append( | 511 if isAccepted(measureDate, issueDate) { |
495 current.predicted, | 512 current.predicted = append( |
496 common.TimedValue{When: issueDate, Value: value}, | 513 current.predicted, |
497 ) | 514 common.TimedValue{When: issueDate, Value: value}, |
498 /* | 515 ) |
499 // current prediction same as last two? | 516 } |
500 if l := len(current.predicted); l > 1 && current.predicted[l-1].Value == value && current.predicted[l-2].Value == value { | |
501 // only update last time. | |
502 current.predicted[l-1].When = issueDate | |
503 } else { | |
504 current.predicted = append( | |
505 current.predicted, | |
506 common.TimedValue{When: issueDate, Value: value}, | |
507 ) | |
508 } | |
509 */ | |
510 } else { | 517 } else { |
511 current.observed = value | 518 current.observed = value |
512 } | 519 } |
513 } | 520 } |
514 | 521 |