-
Notifications
You must be signed in to change notification settings - Fork 9
/
stats.go
37 lines (28 loc) · 985 Bytes
/
stats.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package polygen
import (
"log"
"time"
)
// Stats is used by the Evolver for printing runtime statistics.
type Stats struct {
startTime time.Time
prevTime time.Time
candidatesEvaluated int
}
func NewStats() *Stats {
timeNow := time.Now()
return &Stats{startTime: timeNow, prevTime: timeNow}
}
// Increments the number of candidates that have been evaluated since last call to Print().
func (s *Stats) Increment(count int) {
s.candidatesEvaluated += count
}
func (s *Stats) Print(best, worst *Candidate, generation, generationsSinceChange int) {
timeNow := time.Now()
durOverall := timeNow.Sub(s.startTime)
durSinceLastStats := time.Since(s.prevTime)
cps := float64(s.candidatesEvaluated) / durSinceLastStats.Seconds()
s.prevTime = timeNow
s.candidatesEvaluated = 0
log.Printf("dur: %s, gen: %d, since change: %d, candidates/sec: %.2f, best: %d, worst: %d", durOverall, generation, generationsSinceChange, cps, best.Fitness, worst.Fitness)
}