diff --git a/MV3302ClassCode/src/mv3302/TransferLineComponent.java b/MV3302ClassCode/src/mv3302/TransferLineComponent.java index b46c06603364a66f34598f617d6869382f8daa6b..8086aa8b4d265436e46e1dc0777fb12032f93920 100644 --- a/MV3302ClassCode/src/mv3302/TransferLineComponent.java +++ b/MV3302ClassCode/src/mv3302/TransferLineComponent.java @@ -153,7 +153,6 @@ public class TransferLineComponent extends SimEntityBase { fireIndexedPropertyChange(station, "delayInQueue", oldDelayInQueue[station], delayInQueue[station]); part.incrementDelayInQueue(delayInQueue[station]); - waitDelay("EndProcessing", getProcessingTimeGenerator()[station].generate(), part, station); } @@ -166,7 +165,7 @@ public class TransferLineComponent extends SimEntityBase { */ public void doEndProcessing(Part part, int station) { int[] oldNumberAvailableMachines = getNumberAvailableMachines().clone(); - getNumberAvailableMachines()[station]++; + numberAvailableMachines[station]++; fireIndexedPropertyChange(station, "numberAvailableMachines", oldNumberAvailableMachines[station], getNumberAvailableMachines()[station]); double[] oldTimeAtStation = getTimeAtStation().clone(); timeAtStation[station] = part.getElapsedTime(); @@ -181,6 +180,7 @@ public class TransferLineComponent extends SimEntityBase { waitDelay("StartProcessing", 0.0, station); } } + /** * doPartComplete brings in argument part and assigns the value of * totalTimeInSystem to the parts getAge() value. It also assigns the @@ -188,9 +188,14 @@ public class TransferLineComponent extends SimEntityBase { * number of completed parts by one. */ public void doPartComplete(Part part) { + double oldTotalTimeInSystem = totalTimeInSystem; totalTimeInSystem = part.getAge(); + firePropertyChange("totalTimeInSystem", oldTotalTimeInSystem, getTotalTimeInSystem()); + double oldTotalDelayInQueue = totalDelayInQueue; totalDelayInQueue = part.getTotalDelayInQueue(); + firePropertyChange("totalDelayInQueue", oldTotalDelayInQueue, getTotalDelayInQueue()); } + /** * @return the totalNumberMachines */ diff --git a/MV3302ClassCode/src/mv3302/run/RunTransferLineComponent.java b/MV3302ClassCode/src/mv3302/run/RunTransferLineComponent.java index dbd08447ed8a969f0ff07e55c47a1c4160b68a23..da91a5c3390777c75f720fd766e0962f0fdcea31 100644 --- a/MV3302ClassCode/src/mv3302/run/RunTransferLineComponent.java +++ b/MV3302ClassCode/src/mv3302/run/RunTransferLineComponent.java @@ -11,6 +11,7 @@ import simkit.random.RandomVariate; import simkit.random.RandomVariateFactory; import simkit.stat.MultipleCollectionSizeTimeVarying; import simkit.stat.MultipleSimpleStatsTally; +import simkit.stat.SimpleStatsTally; import simkit.util.SimplePropertyDumper; /** @@ -49,8 +50,8 @@ public class RunTransferLineComponent { = new MultipleCollectionSizeTimeVarying("queue"); transferLineComponent.addPropertyChangeListener("queue", numberInQueueStat); - MultipleCollectionSizeTimeVarying numberAvailableMachinesStat - = new MultipleCollectionSizeTimeVarying("numberAvailableMachines"); + MultipleSimpleStatsTally numberAvailableMachinesStat + = new MultipleSimpleStatsTally("numberAvailableMachines"); transferLineComponent.addPropertyChangeListener("numberAvailableMachines", numberAvailableMachinesStat); // Tally statistics are computed in the same way by "listening" @@ -64,26 +65,35 @@ public class RunTransferLineComponent { transferLineComponent.addPropertyChangeListener("delayInQueue", delayInQueueStat); + SimpleStatsTally totalTimeInSystemStat = new SimpleStatsTally("totalTimeInSystem"); + transferLineComponent.addPropertyChangeListener(totalTimeInSystemStat); + + SimpleStatsTally totalDelayInQueueStat = new SimpleStatsTally("totalDelayInQueue"); + transferLineComponent.addPropertyChangeListener(totalDelayInQueueStat); + // arrivalProcess.addPropertyChangeListener(simplePropertyDumper); // transferLineComponent.addPropertyChangeListener(simplePropertyDumper); // Was "true" when debugging model Schedule.setVerbose(false); // Run for 500,000 time units - double stopTime = 500.0; + double stopTime = 500000.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. + Schedule.startSimulation(); 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("Number Completed: %4s%n%n", totalTimeInSystemStat.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"); + double avgNumberInSystem = numberInQueueStat.getMean() + 11 + - numberAvailableMachinesStat.getMean(); + double arrivalRate = arrivalProcess.getNumberArrivals() / Schedule.getSimTime(); for (int i = 0; i < totalNumberMachines.length; i++) { double utilization = 1.0 - numberAvailableMachinesStat.getMean(i) / transferLineComponent.getTotalNumberMachines(i); double avgNumberInQueue = numberInQueueStat.getMean(i); @@ -97,14 +107,16 @@ public class RunTransferLineComponent { 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 avgNumberInQueue = numberInQueueStat.getMean(i); double avgDelayInQueue = delayInQueueStat.getMean(i); - double avgTimeAtStation = avgDelayInQueue + timeAtStationStat.getMean() / transferLineComponent.getNumberComplete(); + double avgTimeAtStation = avgNumberInQueue / arrivalRate; 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)); + + System.out.printf("Avg Time in System: %.4f (Using Little: %.4f)%n", totalTimeInSystemStat.getMean() + totalDelayInQueueStat.getMean(), + avgNumberInSystem / arrivalRate); + System.out.printf("Avg total delay in queue: %.4f (Using Little: %.4f)%n", totalDelayInQueueStat.getMean(), + totalDelayInQueueStat.getMean() - transferLineComponent.getTotalTimeInSystem() * ((1.0 - numberAvailableMachinesStat.getMean()) / totalNumberMachines.length)); } }