/**
Keep track of a sequence of elapsed timings.
*/
import java.util.Vector;
public class
EpisodeTimer {
/**
@return The average of all complete collected episode lengths.
*/
public double
average() {
long total = 0
for (long t: times)
total += t
return ((double) total)/times.size()
}
/**
Create an episode timer.
*/
public
EpisodeTimer() {
times = new Vector<Long>()
}
/**
Start timing.
*/
public void
start() {
times.add(System.currentTimeMillis())
}
/**
@return The standard deviation of all complete collected episode lengths.
*/
public double
stddev() {
long
sum = 0,
sumSqr = 0
for (long t: times) {
sum += t
sumSqr += t*t
}
final int n = times.size()
return Math.sqrt((sumSqr - ((double) (sum*sum)/n))/(n - 1))
}
/**
Stop timing.
*/
public void
stop() {
final int n = times.size() - 1
times.set(n, System.currentTimeMillis() - times.get(n))
}
/**
The collected episode lengths.
*/
private Vector<Long> times
}
syntax highlighted by Code2HTML, v. 0.9.1