import umontreal.iro.lecuyer.stat.Tally;
import umontreal.iro.lecuyer.util.Chrono;
public class InventoryCRN extends Inventory {
Tally statDiff = new Tally ("stats on difference");
public InventoryCRN (double lambda, double c, double h,
double K, double k, double p) {
super (lambda, c, h, K, k, p);
}
public void simulateDiff (int n, int m, int s1, int S1, int s2, int S2) {
statDiff.init();
for (int i = 0; i < n; i++) {
double value1 = simulateOneRun (m, s1, S1);
double value2 = simulateOneRun (m, s2, S2);
statDiff.add (value2 - value1);
}
}
public void simulateDiffCRN (int n, int m, int s1, int S1, int s2, int S2) {
statDiff.init();
streamDemand.resetStartStream();
streamOrder.resetStartStream();
for (int i = 0; i < n; i++) {
double value1 = simulateOneRun (m, s1, S1);
streamDemand.resetStartSubstream();
streamOrder.resetStartSubstream();
double value2 = simulateOneRun (m, s2, S2);
statDiff.add (value2 - value1);
streamDemand.resetNextSubstream();
streamOrder.resetNextSubstream();
}
}
public static void main (String[] args) {
InventoryCRN system = new InventoryCRN (100.0, 2.0, 0.1, 10.0, 1.0, 0.95);
Chrono timer = new Chrono();
system.simulateDiff (5000, 200, 80, 198, 80, 200);
system.statDiff.setConfidenceIntervalStudent();
System.out.println (system.statDiff.report (0.9, 3));
double varianceIndep = system.statDiff.variance();
System.out.println ("Total CPU time: " + timer.format() + "\n");
timer.init();
system.simulateDiffCRN (5000, 200, 80, 198, 80, 200);
System.out.println (system.statDiff.report (0.9, 3));
double varianceCRN = system.statDiff.variance();
System.out.println ("Total CPU time: " + timer.format());
System.out.printf ("Variance ratio: %8.4g%n", varianceIndep/varianceCRN);
}
}