Something went wrong on our end
RunTransferLineComponent.java 5.62 KiB
/*
* 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));
}
}