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

Commit HW 4 Sloan

parent a354b228
No related branches found
No related tags found
No related merge requests found
...@@ -14,6 +14,7 @@ import simkit.random.RandomVariate; ...@@ -14,6 +14,7 @@ import simkit.random.RandomVariate;
*/ */
public class PartArrivalProcess extends ArrivalProcess{ public class PartArrivalProcess extends ArrivalProcess{
public int numberPartsArrived;
/** /**
* Zero-argument constructor * Zero-argument constructor
*/ */
...@@ -38,6 +39,14 @@ public class PartArrivalProcess extends ArrivalProcess{ ...@@ -38,6 +39,14 @@ public class PartArrivalProcess extends ArrivalProcess{
public void doArrival() { public void doArrival() {
super.doArrival(); super.doArrival();
Part part = new Part(); Part part = new Part();
numberPartsArrived +=1;
waitDelay("Arrival", 0.0, part, 0); waitDelay("Arrival", 0.0, part, 0);
} }
/**
* @return the numberPartsArrived
*/
public int getNumberPartsArrived() {
return numberPartsArrived;
}
} }
...@@ -14,7 +14,7 @@ public class TransferLineComponent extends SimEntityBase { ...@@ -14,7 +14,7 @@ public class TransferLineComponent extends SimEntityBase {
protected double[] timeAtStation; protected double[] timeAtStation;
protected double totalDelayInQueue; protected double totalDelayInQueue;
protected double totalTimeInSystem; protected double totalTimeInSystem;
private int numberComplete; protected int numberComplete;
/** /**
* Constructor method for TransferLineComponent that passes in Array values * Constructor method for TransferLineComponent that passes in Array values
...@@ -74,11 +74,11 @@ public class TransferLineComponent extends SimEntityBase { ...@@ -74,11 +74,11 @@ public class TransferLineComponent extends SimEntityBase {
* Init Event. * Init Event.
*/ */
public void doRun() { public void doRun() {
// totalDelayInQueue = Double.NaN; totalDelayInQueue = Double.NaN;
// totalTimeInSystem = Double.NaN; totalTimeInSystem = Double.NaN;
firePropertyChange("totalDelayInQueue", getTotalDelayInQueue()); // firePropertyChange("totalDelayInQueue", getTotalDelayInQueue());
firePropertyChange("totalDelayInSystem", getTotalTimeInSystem()); // firePropertyChange("totalDelayInSystem", getTotalTimeInSystem());
firePropertyChange("numberAvailableMachines", getNumberAvailableMachines()); // firePropertyChange("numberAvailableMachines", getNumberAvailableMachines());
waitDelay("Init", 0.0, 0); waitDelay("Init", 0.0, 0);
} }
...@@ -95,20 +95,18 @@ public class TransferLineComponent extends SimEntityBase { ...@@ -95,20 +95,18 @@ public class TransferLineComponent extends SimEntityBase {
* @param i * @param i
*/ */
public void doInit(int i) { public void doInit(int i) {
if (i < totalNumberMachines.length) { this.numberAvailableMachines[i] = totalNumberMachines[i];
this.numberAvailableMachines[i] = totalNumberMachines[i];
// fireIndexedPropertyChange(i, "numberAvailableMachines", getNumberAvailableMachines(i)); // fireIndexedPropertyChange(i, "numberAvailableMachines", getNumberAvailableMachines(i));
queue.get(i).clear(); queue.get(i).clear();
// fireIndexedPropertyChange(i, "queue", getQueue(i)); // fireIndexedPropertyChange(i, "queue", getQueue(i));
// double[] oldDelayInQueue = getDelayInQueue().clone(); // double[] oldDelayInQueue = getDelayInQueue().clone();
delayInQueue[i] = Double.NaN; delayInQueue[i] = Double.NaN;
// firePropertyChange("delayInQueue", oldDelayInQueue, getDelayInQueue()); // firePropertyChange("delayInQueue", oldDelayInQueue, getDelayInQueue());
// double[] oldTimeAtStation = getTimeAtStation().clone(); // double[] oldTimeAtStation = getTimeAtStation().clone();
timeAtStation[i] = Double.NaN; timeAtStation[i] = Double.NaN;
// firePropertyChange("timeAtStation", oldTimeAtStation, getTimeAtStation()); // firePropertyChange("timeAtStation", oldTimeAtStation, getTimeAtStation());
if (i < totalNumberMachines.length - 1) { if (i < totalNumberMachines.length - 1) {
waitDelay("Init", 0.0, i + 1); waitDelay("Init", 0.0, i + 1);
}
} }
} }
...@@ -143,15 +141,19 @@ public class TransferLineComponent extends SimEntityBase { ...@@ -143,15 +141,19 @@ public class TransferLineComponent extends SimEntityBase {
public void doStartProcessing(int station) { public void doStartProcessing(int station) {
SortedSet<Part> oldQueue = queue.get(station); SortedSet<Part> oldQueue = queue.get(station);
Part part = oldQueue.first(); Part part = oldQueue.first();
queue.get(station).remove(part); queue.get(station).remove(part);
fireIndexedPropertyChange(station, "queue", oldQueue, getQueue(station)); //fireIndexedPropertyChange(station, "queue", oldQueue, getQueue(station));
int[] oldNumberAvailableMachines = getNumberAvailableMachines().clone(); int[] oldNumberAvailableMachines = getNumberAvailableMachines().clone();
oldNumberAvailableMachines[station]--; numberAvailableMachines[station]--;
fireIndexedPropertyChange(station, "numberAvailableMachines", oldNumberAvailableMachines[station], getNumberAvailableMachines()[station]); fireIndexedPropertyChange(station, "numberAvailableMachines", oldNumberAvailableMachines[station], getNumberAvailableMachines()[station]);
double[] oldDelayInQueue = getDelayInQueue().clone(); double[] oldDelayInQueue = getDelayInQueue();
delayInQueue[station] = part.getElapsedTime(); delayInQueue[station] = part.getElapsedTime();
firePropertyChange("delayInQueue", oldDelayInQueue, getDelayInQueue());
part.incrementDelayInQueue(oldDelayInQueue[station]); fireIndexedPropertyChange(station, "delayInQueue", oldDelayInQueue[station], delayInQueue[station]);
part.incrementDelayInQueue(delayInQueue[station]);
waitDelay("EndProcessing", getProcessingTimeGenerator()[station].generate(), part, station); waitDelay("EndProcessing", getProcessingTimeGenerator()[station].generate(), part, station);
} }
...@@ -168,8 +170,8 @@ public class TransferLineComponent extends SimEntityBase { ...@@ -168,8 +170,8 @@ public class TransferLineComponent extends SimEntityBase {
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();
firePropertyChange("timeAtStation", oldTimeAtStation, getTimeAtStation()); fireIndexedPropertyChange(station, "timeAtStation", oldTimeAtStation[station], getTimeAtStation(station));
if (station < totalNumberMachines.length) { if (station < totalNumberMachines.length - 1) {
waitDelay("Arrival", 0.0, part, station + 1); waitDelay("Arrival", 0.0, part, station + 1);
} }
if (station == totalNumberMachines.length - 1) { if (station == totalNumberMachines.length - 1) {
...@@ -179,7 +181,6 @@ public class TransferLineComponent extends SimEntityBase { ...@@ -179,7 +181,6 @@ 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
...@@ -189,9 +190,7 @@ public class TransferLineComponent extends SimEntityBase { ...@@ -189,9 +190,7 @@ public class TransferLineComponent extends SimEntityBase {
public void doPartComplete(Part part) { public void doPartComplete(Part part) {
totalTimeInSystem = part.getAge(); totalTimeInSystem = part.getAge();
totalDelayInQueue = part.getTotalDelayInQueue(); totalDelayInQueue = part.getTotalDelayInQueue();
numberComplete += 1;
} }
/** /**
* @return the totalNumberMachines * @return the totalNumberMachines
*/ */
......
...@@ -43,8 +43,7 @@ public class RunTransferLineComponent { ...@@ -43,8 +43,7 @@ public class RunTransferLineComponent {
arrivalProcess.addSimEventListener(transferLineComponent); arrivalProcess.addSimEventListener(transferLineComponent);
// This was used for debugging model // This was used for debugging model
SimplePropertyDumper simplePropertyDumper = new SimplePropertyDumper(true); // SimplePropertyDumper simplePropertyDumper = new SimplePropertyDumper(true);
// This listener computes time-varying statistics for multiple Collection states // This listener computes time-varying statistics for multiple Collection states
MultipleCollectionSizeTimeVarying numberInQueueStat MultipleCollectionSizeTimeVarying numberInQueueStat
= new MultipleCollectionSizeTimeVarying("queue"); = new MultipleCollectionSizeTimeVarying("queue");
...@@ -65,31 +64,30 @@ public class RunTransferLineComponent { ...@@ -65,31 +64,30 @@ public class RunTransferLineComponent {
transferLineComponent.addPropertyChangeListener("delayInQueue", transferLineComponent.addPropertyChangeListener("delayInQueue",
delayInQueueStat); delayInQueueStat);
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 = 500000.0; double stopTime = 500.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(); //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("%nSimulation ended at time %,.2f%n%n", Schedule.getSimTime());
System.out.printf("Number arrivals: %n", arrivalProcess.getNumberArrivals()); System.out.printf("Number arrivals: %5s%n", arrivalProcess.getNumberArrivals());
System.out.printf("Number Completed: %n%n", transferLineComponent.getNumberComplete()); 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", "", "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");
for (int i = 0; i < totalNumberMachines.length; i++) { for (int i = 0; i < totalNumberMachines.length; i++) {
double utilization = 1.0 - numberAvailableMachinesStat.getMean() / totalNumberMachines.length; double utilization = 1.0 - numberAvailableMachinesStat.getMean(i) / transferLineComponent.getTotalNumberMachines(i);
double avgNumberInQueue = numberInQueueStat.getMean(); double avgNumberInQueue = numberInQueueStat.getMean(i);
double avgDelayInQueue = delayInQueueStat.getMean(); double avgDelayInQueue = delayInQueueStat.getMean(i);
double avgTimeAtStation = timeAtStationStat.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.printf("%15d%15.4f%15.4f%15.4f%15.4f%n", i, utilization, avgNumberInQueue, avgDelayInQueue, avgTimeAtStation);
} }
...@@ -100,8 +98,8 @@ public class RunTransferLineComponent { ...@@ -100,8 +98,8 @@ public class RunTransferLineComponent {
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 avgDelayInQueue = delayInQueueStat.getMean(i); double avgDelayInQueue = delayInQueueStat.getMean(i);
double avgTimeInSystem = avgDelayInQueue + timeAtStationStat.getMean(i) / transferLineComponent.getNumberComplete(); double avgTimeAtStation = avgDelayInQueue + timeAtStationStat.getMean() / transferLineComponent.getNumberComplete();
System.out.printf("%15s%15.4f%15.4f%n", i, avgDelayInQueue, avgTimeInSystem); 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(), System.out.printf("Avg Time in System: %.4f (Using Little: %.4f)%n", timeAtStationStat.getMean() + delayInQueueStat.getMean(),
......
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