import umontreal.iro.lecuyer.stat.*; import umontreal.iro.lecuyer.rng.*; import umontreal.iro.lecuyer.probdist.ExponentialDist; import umontreal.iro.lecuyer.util.Chrono; public class QueueLindley { RandomStream streamArr = new RandMrg(); RandomStream streamServ = new RandMrg(); public double simulateOneRun (int numCust, double lambda, double mu) { double Wi = 0.0; double sumWi = 0.0; for (int i = 2; i <= numCust; i++) { Wi += ExponentialDist.inverseF (mu, streamServ.nextDouble()) - ExponentialDist.inverseF (lambda, streamArr.nextDouble()); if (Wi < 0.0) Wi = 0.0; sumWi += Wi; } return sumWi / numCust; } public static void main (String[] args) { System.out.println ("Average waiting time: " + (new QueueLindley()).simulateOneRun (10000, 1.0/10.0, 1.0/9.0)); } }