package edu.stanford.nlp.sequences;
/**
* @author grenager
* Date: Dec 14, 2004
*/
public abstract class CoolingSchedule {
public abstract int numIterations();
public abstract double getTemperature(int iteration);
public static CoolingSchedule getExponentialSchedule(final double start, final double rate, final int numIterations) {
return new CoolingSchedule() {
@Override
public int numIterations() {
return numIterations;
}
@Override
public double getTemperature(int iteration) {
return start * Math.pow(rate, iteration);
}
};
}
public static CoolingSchedule getLinearSchedule(final double start, final int numIterations) {
return new CoolingSchedule() {
final double rate = start / numIterations;
@Override
public int numIterations() {
return numIterations+1; // will hit zero on the last one
}
@Override
public double getTemperature(int iteration) {
return start - rate*iteration;
}
};
}
}