Skip to content
Snippets Groups Projects
Commit 53f96992 authored by dansl's avatar dansl
Browse files

Commit HW 4 Sloan - Complete

parent a97c9e07
No related branches found
No related tags found
No related merge requests found
...@@ -153,7 +153,6 @@ public class TransferLineComponent extends SimEntityBase { ...@@ -153,7 +153,6 @@ public class TransferLineComponent extends SimEntityBase {
fireIndexedPropertyChange(station, "delayInQueue", oldDelayInQueue[station], delayInQueue[station]); fireIndexedPropertyChange(station, "delayInQueue", oldDelayInQueue[station], delayInQueue[station]);
part.incrementDelayInQueue(delayInQueue[station]); part.incrementDelayInQueue(delayInQueue[station]);
waitDelay("EndProcessing", getProcessingTimeGenerator()[station].generate(), part, station); waitDelay("EndProcessing", getProcessingTimeGenerator()[station].generate(), part, station);
} }
...@@ -166,7 +165,7 @@ public class TransferLineComponent extends SimEntityBase { ...@@ -166,7 +165,7 @@ public class TransferLineComponent extends SimEntityBase {
*/ */
public void doEndProcessing(Part part, int station) { public void doEndProcessing(Part part, int station) {
int[] oldNumberAvailableMachines = getNumberAvailableMachines().clone(); int[] oldNumberAvailableMachines = getNumberAvailableMachines().clone();
getNumberAvailableMachines()[station]++; numberAvailableMachines[station]++;
fireIndexedPropertyChange(station, "numberAvailableMachines", oldNumberAvailableMachines[station], getNumberAvailableMachines()[station]); fireIndexedPropertyChange(station, "numberAvailableMachines", oldNumberAvailableMachines[station], getNumberAvailableMachines()[station]);
double[] oldTimeAtStation = getTimeAtStation().clone(); double[] oldTimeAtStation = getTimeAtStation().clone();
timeAtStation[station] = part.getElapsedTime(); timeAtStation[station] = part.getElapsedTime();
...@@ -181,6 +180,7 @@ public class TransferLineComponent extends SimEntityBase { ...@@ -181,6 +180,7 @@ public class TransferLineComponent extends SimEntityBase {
waitDelay("StartProcessing", 0.0, station); waitDelay("StartProcessing", 0.0, station);
} }
} }
/** /**
* doPartComplete brings in argument part and assigns the value of * doPartComplete brings in argument part and assigns the value of
* totalTimeInSystem to the parts getAge() value. It also assigns the * totalTimeInSystem to the parts getAge() value. It also assigns the
...@@ -188,9 +188,14 @@ public class TransferLineComponent extends SimEntityBase { ...@@ -188,9 +188,14 @@ public class TransferLineComponent extends SimEntityBase {
* number of completed parts by one. * number of completed parts by one.
*/ */
public void doPartComplete(Part part) { public void doPartComplete(Part part) {
double oldTotalTimeInSystem = totalTimeInSystem;
totalTimeInSystem = part.getAge(); totalTimeInSystem = part.getAge();
firePropertyChange("totalTimeInSystem", oldTotalTimeInSystem, getTotalTimeInSystem());
double oldTotalDelayInQueue = totalDelayInQueue;
totalDelayInQueue = part.getTotalDelayInQueue(); totalDelayInQueue = part.getTotalDelayInQueue();
firePropertyChange("totalDelayInQueue", oldTotalDelayInQueue, getTotalDelayInQueue());
} }
/** /**
* @return the totalNumberMachines * @return the totalNumberMachines
*/ */
......
...@@ -11,6 +11,7 @@ import simkit.random.RandomVariate; ...@@ -11,6 +11,7 @@ import simkit.random.RandomVariate;
import simkit.random.RandomVariateFactory; import simkit.random.RandomVariateFactory;
import simkit.stat.MultipleCollectionSizeTimeVarying; import simkit.stat.MultipleCollectionSizeTimeVarying;
import simkit.stat.MultipleSimpleStatsTally; import simkit.stat.MultipleSimpleStatsTally;
import simkit.stat.SimpleStatsTally;
import simkit.util.SimplePropertyDumper; import simkit.util.SimplePropertyDumper;
/** /**
...@@ -49,8 +50,8 @@ public class RunTransferLineComponent { ...@@ -49,8 +50,8 @@ public class RunTransferLineComponent {
= new MultipleCollectionSizeTimeVarying("queue"); = new MultipleCollectionSizeTimeVarying("queue");
transferLineComponent.addPropertyChangeListener("queue", numberInQueueStat); transferLineComponent.addPropertyChangeListener("queue", numberInQueueStat);
MultipleCollectionSizeTimeVarying numberAvailableMachinesStat MultipleSimpleStatsTally numberAvailableMachinesStat
= new MultipleCollectionSizeTimeVarying("numberAvailableMachines"); = new MultipleSimpleStatsTally("numberAvailableMachines");
transferLineComponent.addPropertyChangeListener("numberAvailableMachines", numberAvailableMachinesStat); transferLineComponent.addPropertyChangeListener("numberAvailableMachines", numberAvailableMachinesStat);
// Tally statistics are computed in the same way by "listening" // Tally statistics are computed in the same way by "listening"
...@@ -64,26 +65,35 @@ public class RunTransferLineComponent { ...@@ -64,26 +65,35 @@ public class RunTransferLineComponent {
transferLineComponent.addPropertyChangeListener("delayInQueue", transferLineComponent.addPropertyChangeListener("delayInQueue",
delayInQueueStat); delayInQueueStat);
SimpleStatsTally totalTimeInSystemStat = new SimpleStatsTally("totalTimeInSystem");
transferLineComponent.addPropertyChangeListener(totalTimeInSystemStat);
SimpleStatsTally totalDelayInQueueStat = new SimpleStatsTally("totalDelayInQueue");
transferLineComponent.addPropertyChangeListener(totalDelayInQueueStat);
// arrivalProcess.addPropertyChangeListener(simplePropertyDumper); // arrivalProcess.addPropertyChangeListener(simplePropertyDumper);
// transferLineComponent.addPropertyChangeListener(simplePropertyDumper); // transferLineComponent.addPropertyChangeListener(simplePropertyDumper);
// Was "true" when debugging model // Was "true" when debugging model
Schedule.setVerbose(false); Schedule.setVerbose(false);
// Run for 500,000 time units // Run for 500,000 time units
double stopTime = 500.0; double stopTime = 500000.0;
Schedule.stopAtTime(stopTime); Schedule.stopAtTime(stopTime);
// Initialized and Run // Initialized and Run
Schedule.reset(); Schedule.reset();
//Start Running of Simulation //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("%nSimulation ended at time %,.2f%n%n", Schedule.getSimTime());
System.out.printf("Number arrivals: %5s%n", arrivalProcess.getNumberArrivals()); 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", "", "Avg", "Avg #", "Avg Delay", "Avg Time");
System.out.printf("%15s%15s%15s%15s%15s%n", "station", "util", "in Queue", "in Queue", "at Station"); 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++) { for (int i = 0; i < totalNumberMachines.length; i++) {
double utilization = 1.0 - numberAvailableMachinesStat.getMean(i) / transferLineComponent.getTotalNumberMachines(i); double utilization = 1.0 - numberAvailableMachinesStat.getMean(i) / transferLineComponent.getTotalNumberMachines(i);
double avgNumberInQueue = numberInQueueStat.getMean(i); double avgNumberInQueue = numberInQueueStat.getMean(i);
...@@ -97,14 +107,16 @@ public class RunTransferLineComponent { ...@@ -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", "", "Avg Delay", "Avg Time");
System.out.printf("%15s%15s%15s%n", "station", "in Queue", "at Station"); System.out.printf("%15s%15s%15s%n", "station", "in Queue", "at Station");
for (int i = 0; i < totalNumberMachines.length; i++) { for (int i = 0; i < totalNumberMachines.length; i++) {
double avgNumberInQueue = numberInQueueStat.getMean(i);
double avgDelayInQueue = delayInQueueStat.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.printf("%15s%15.4f%15.4f%n", i, avgDelayInQueue, avgTimeAtStation);
} }
System.out.println(); 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 Time in System: %.4f (Using Little: %.4f)%n", totalTimeInSystemStat.getMean() + totalDelayInQueueStat.getMean(),
System.out.printf("Avg total delay in queue: %.4f (Using Little: %.4f)%n", delayInQueueStat.getMean(), avgNumberInSystem / arrivalRate);
delayInQueueStat.getMean() - transferLineComponent.getTotalTimeInSystem() * (1.0 - numberAvailableMachinesStat.getMean() / totalNumberMachines.length)); 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));
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment