I find this acceptable.

It's true, however, that the need for this behavior is quite common -- so eventually it would be nice to have a more unified/integrated solution, IMO.  That may require rolling out own distributions library, though.


On Fri, Jul 20, 2012 at 6:58 PM, Sean Luke <[log in to unmask]> wrote:
Okay, here's a first cut at an approach to allow repeats drawn from a distribution.  If there are certain very common distribution needs, we could make those built into the class, but for now you have to roll you own.

The revised code (which is NOT out on SVN) is attached.  The modified files are Schedule.java, Repeat.java, RandomRepeat.java, all of which should be placed into sim/engine/

Let's say you want to schedule something which repeatedly reschedules itself using the absolute value of a standard normal distribution, plus 1.0.  You could say this:

Steppable step = ...
double initialTime = 5.0;
int initialOrdering = 0;

RandomRepeat repeat = new RandomRepeat(step, initialOrdering, false)  // use 'true' if multithreaded
        protected double getNextTime(SimState state, double currentTime)
                return currentTime + Math.abs(state.random.nextGaussian()) + 1.0;

state.schedule.scheduleOnce(initialTIme, initialOrdering, repeat);

This code was written at 12:50 at night and has not been tested or even tried.  But there is a slight chance it might work right.  Anyway, it's a first draft which uses an abstract superclass and anonymous subclass to get around the issue of a multitude of distribution APIs in sim.util.distribution.  Opinions?


Ph.D. Student in Computer Science
Volgenau School of Engineering
George Mason University