Something went wrong on our end
-
Brutzman, Don authoredBrutzman, Don authored
RunSimpleServerOpenDis7.java 4.22 KiB
package SimkitOpenDis7Examples.run;
import SimkitOpenDis7Examples.ArrivalProcessOpenDis7;
import SimkitOpenDis7Examples.SimpleServerOpenDis7;
import simkit.Schedule;
import simkit.random.RandomVariate;
import simkit.random.RandomVariateFactory;
import simkit.stat.SimpleStatsTimeVarying;
import simkit.util.SimplePropertyDumper;
/**
* Runs SimpleServer event graph with openDis7 output PDUs added.
* TODO work in progress: adding functionality, refining naming and code patterns.
*
* <h2>Output:</h2><pre>
* ArrivalProcess.1
* interarrivalTimeGenerator = Uniform (0.900, 2.200)
* SimpleServer.2
* serviceTimeGenerator = Gamma (1.700, 1.800)
* totalNumberServers = 2
* Simulation ended at time 100,000.000
*
* There have been 64,475 arrivals
* There have been 64,472 customers served
* Average number in queue 15.9655
* Average utilization 0.9819</pre>
*
* @see SimkitOpenDis7Examples.ArrivalProcessOpenDis7
* @see SimkitOpenDis7Examples.SimpleServer
* @see <a href="RunSimpleServerOpenDis7Log.txt" target="_blank">RunSimpleServerOpenDis7Log.txt</a>
* @see <a href="../ArrivalProcessOpenDis7EventGraph.png" target="_blank">ArrivalProcessOpenDis7EventGraph.png</a>
* @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/raw/master/examples/src/SimkitOpenDis7Examples/documentation/ArrivalProcessDisPdu.png" target="_blank">ArrivalProcessDisPdu.png</a>
* @author abuss@nps.edu@nps.edu
* @author brutzman@nps.edu
*/
public class RunSimpleServerOpenDis7
{
/** Default constructor */
public RunSimpleServerOpenDis7()
{
// default constructor
}
/**
* Run a simple program and compute statistical measurement of results.
* @see RunSimpleServer
* @param args the command line arguments
*/
public static void main(String args[])
{
String rvName = "Uniform"; // TODO is enumeration available?
double lower = 0.9;
double upper = 2.2;
RandomVariate interarrivalTimeGenerator = RandomVariateFactory.getInstance(rvName, lower, upper);
ArrivalProcessOpenDis7 arrival = new ArrivalProcessOpenDis7(interarrivalTimeGenerator);
rvName = "Gamma"; // TODO is enumeration available?
double alpha = 1.7;
double beta = 1.8;
RandomVariate serviceTimeGenerator = RandomVariateFactory.getInstance(rvName, alpha, beta);
int numServ = 1;
SimpleServerOpenDis7 server = new SimpleServerOpenDis7(numServ, serviceTimeGenerator);
arrival.addSimEventListener(server);
SimplePropertyDumper simplePropertyDumper = new SimplePropertyDumper();
// server.addPropertyChangeListener(simplePropertyDumper);
// arrival.addPropertyChangeListener(simplePropertyDumper);
SimpleStatsTimeVarying numberInQueueStat = new SimpleStatsTimeVarying("numberInQueue");
SimpleStatsTimeVarying numberAvailableServersStat = new SimpleStatsTimeVarying("numberAvailableServers");
server.addPropertyChangeListener(numberInQueueStat);
server.addPropertyChangeListener(numberAvailableServersStat);
System.out.println(arrival);
System.out.println(server);
// Schedule.setVerbose(true);
// Schedule.setSingleStep(false);
// double stopTime = 6.0;
double stopTime = 100000.0;
Schedule.stopAtTime(stopTime);
Schedule.reset();
numberInQueueStat.reset();
numberAvailableServersStat.reset();
Schedule.startSimulation();
System.out.printf("Simulation ended at time %,.3f%n", Schedule.getSimTime());
System.out.printf("%nThere have been %,d arrivals%n", arrival.getNumberArrivals());
System.out.printf("There have been %,d customers served%n", server.getNumberServed());
System.out.printf("Average number in queue\t%.4f%n", numberInQueueStat.getMean());
System.out.printf("Average utilization\t%.4f%n", 1.0 - numberAvailableServersStat.getMean() / server.getTotalNumberServers());
System.out.println("Execution complete.");
// TODO send simulation management PDUs via DIS channel, announce completion
arrival.getDisChannel().tearDownNetworkInterface();
System.exit(0); // normal completion
}
}