/* * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template */ package mv3302.run; import mv3302.PartArrivalProcess; import mv3302.TransferLineComponent; import simkit.Schedule; import simkit.random.RandomVariate; import simkit.random.RandomVariateFactory; import simkit.stat.MultipleCollectionSizeTimeVarying; import simkit.stat.MultipleSimpleStatsTally; import simkit.util.SimplePropertyDumper; /** * * @author dansl */ public class RunTransferLineComponent { /** * @param args the command line arguments */ public static void main(String[] args) { // Instantiate PartArrivalProcess RandomVariate interarrivalTimeGenerator = RandomVariateFactory.getInstance("Exponential", 1.7); PartArrivalProcess arrivalProcess = new PartArrivalProcess(interarrivalTimeGenerator); System.out.println(arrivalProcess); // Instantiate TransferLineComponent int[] totalNumberMachines = new int[3]; totalNumberMachines[0] = 5; totalNumberMachines[1] = 4; totalNumberMachines[2] = 2; RandomVariate[] processingTimeGenerator = {RandomVariateFactory.getInstance("Gamma", 3.2, 2.3), RandomVariateFactory.getInstance("Uniform", 4.5, 6.7), RandomVariateFactory.getInstance("Exponential", 3.0)}; TransferLineComponent transferLineComponent = new TransferLineComponent(processingTimeGenerator, totalNumberMachines); System.out.println(transferLineComponent); // The transferLineComponent will "hear" Arrival(part) events arrivalProcess.addSimEventListener(transferLineComponent); // This was used for debugging model // SimplePropertyDumper simplePropertyDumper = new SimplePropertyDumper(true); // This listener computes time-varying statistics for multiple Collection states MultipleCollectionSizeTimeVarying numberInQueueStat = new MultipleCollectionSizeTimeVarying("queue"); transferLineComponent.addPropertyChangeListener("queue", numberInQueueStat); MultipleCollectionSizeTimeVarying numberAvailableMachinesStat = new MultipleCollectionSizeTimeVarying("numberAvailableMachines"); transferLineComponent.addPropertyChangeListener("numberAvailableMachines", numberAvailableMachinesStat); // Tally statistics are computed in the same way by "listening" MultipleSimpleStatsTally timeAtStationStat = new MultipleSimpleStatsTally("timeAtStation"); transferLineComponent.addPropertyChangeListener("timeAtStation", timeAtStationStat); MultipleSimpleStatsTally delayInQueueStat = new MultipleSimpleStatsTally("delayInQueue"); transferLineComponent.addPropertyChangeListener("delayInQueue", delayInQueueStat); // arrivalProcess.addPropertyChangeListener(simplePropertyDumper); // transferLineComponent.addPropertyChangeListener(simplePropertyDumper); // Was "true" when debugging model Schedule.setVerbose(false); // Run for 500,000 time units double stopTime = 500.0; Schedule.stopAtTime(stopTime); // Initialized and Run Schedule.reset(); //Start Running of Simulation Schedule.startSimulation(); //Commented out because I couldn't get the code to run past the doArrival() method. System.out.printf("%nSimulation ended at time %,.2f%n%n", Schedule.getSimTime()); System.out.printf("Number arrivals: %5s%n", arrivalProcess.getNumberArrivals()); System.out.printf("Number Completed: %4s%n%n", timeAtStationStat.getCount()); System.out.printf("%15s%15s%15s%15s%15s%n", "", "Avg", "Avg #", "Avg Delay", "Avg Time"); System.out.printf("%15s%15s%15s%15s%15s%n", "station", "util", "in Queue", "in Queue", "at Station"); for (int i = 0; i < totalNumberMachines.length; i++) { double utilization = 1.0 - numberAvailableMachinesStat.getMean(i) / transferLineComponent.getTotalNumberMachines(i); double avgNumberInQueue = numberInQueueStat.getMean(i); double avgDelayInQueue = delayInQueueStat.getMean(i); double avgTimeAtStation = timeAtStationStat.getMean(i); System.out.printf("%15d%15.4f%15.4f%15.4f%15.4f%n", i, utilization, avgNumberInQueue, avgDelayInQueue, avgTimeAtStation); } System.out.println(); System.out.println("Using Little's Formula"); System.out.println(); System.out.printf("%15s%15s%15s%n", "", "Avg Delay", "Avg Time"); System.out.printf("%15s%15s%15s%n", "station", "in Queue", "at Station"); for (int i = 0; i < totalNumberMachines.length; i++) { double avgDelayInQueue = delayInQueueStat.getMean(i); double avgTimeAtStation = avgDelayInQueue + timeAtStationStat.getMean() / transferLineComponent.getNumberComplete(); System.out.printf("%15s%15.4f%15.4f%n", i, avgDelayInQueue, avgTimeAtStation); } System.out.println(); System.out.printf("Avg Time in System: %.4f (Using Little: %.4f)%n", timeAtStationStat.getMean() + delayInQueueStat.getMean(), timeAtStationStat.getMean() + delayInQueueStat.getMean() - transferLineComponent.getTotalTimeInSystem()); System.out.printf("Avg total delay in queue: %.4f (Using Little: %.4f)%n", delayInQueueStat.getMean(), delayInQueueStat.getMean() - transferLineComponent.getTotalTimeInSystem() * (1.0 - numberAvailableMachinesStat.getMean() / totalNumberMachines.length)); } }