import desmoj.core.simulator.*;import desmoj.core.dist.*;import desmoj.core.advancedModellingFeatures.*;public class SimulationModel extends Model { private static final int NUM_CUSTOMER_INIT = 4; private static int SIM_DURATION = 1000; // 1000 takes ~20sec on a Pentium 1.8Ghz (for customers=4) private static double SIM_TRACE_PERIOD = 10; private static double SIM_DEBUG_PERIOD = 0; private static boolean SHOW_PROGRESS_BAR = false; private RealDistUniform routingProb; private RealDistExponential cpuServiceTime; private RealDistExponential disk1ServiceTime; private RealDistExponential disk2ServiceTime; Res cpu; Res disk1; Res disk2; Res infiniteServer; public SimulationModel(Model owner, String modelName, boolean showInReport, boolean showInTrace) { super(owner, modelName, showInReport, showInTrace); } public String description() { return "This is the Central Server model description,"+ "in a process oriented version with RES objects that HOLD."+ "This model is a central server model where customers(requests) will arrive and "+ "require the service of a CPU, which in turn requests service at one of."+ "two disks. The customer may then leave the system, or get serviced once "+ "more by the CPU. We use an InfiniteServer with no servicetime to get the "+ "Throughput of the system. Simulation time is in seconds"; } public double getRoutingProb() { return routingProb.sample(); } public double getCPUServiceTime() { return cpuServiceTime.sample(); } public double getDisk1ServiceTime() { return disk1ServiceTime.sample(); } public double getDisk2ServiceTime() { return disk2ServiceTime.sample(); } public void doInitialSchedules() { for (int i=0; i<NUM_CUSTOMER_INIT; i++) { // # of customers in system at simulation start Customer newCustomer = new Customer(this, "Customer", true); newCustomer.activate(new SimTime(0.0)); } } public void init() { routingProb = new RealDistUniform(this, "RoutingProbability", 0.0, 1.0, true, false); routingProb.setNonNegative(true); cpuServiceTime = new RealDistExponential(this,"CPUServiceTimeStream", 0.01, true, false); cpuServiceTime.setNonNegative(true); disk1ServiceTime = new RealDistExponential(this,"Disk1ServiceTimeStream", 0.0125, true, false); disk1ServiceTime.setNonNegative(true); disk2ServiceTime = new RealDistExponential(this,"Disk2ServiceTimeStream", 0.020, true, false); disk2ServiceTime.setNonNegative(true); cpu = new Res(this, "CPU", 1, true, true); disk1 = new Res(this, "Disk1", 1, true, true); disk2 = new Res(this, "Disk2", 1, true, true); infiniteServer = new Res(this, "InfiniteServer", 1, true, true); } public static void main(java.lang.String[] args) { Experiment exp = new Experiment("centralserver_experiment"); SimulationModel simModel = new SimulationModel(null, "CentralServer Model", true, false); simModel.connectToExperiment(exp); exp.setShowProgressBar(SHOW_PROGRESS_BAR); exp.tracePeriod(new SimTime(0.0),new SimTime(SIM_TRACE_PERIOD) ); exp.debugPeriod(new SimTime(0.0),new SimTime(SIM_DEBUG_PERIOD) ); exp.stop(new SimTime(SIM_DURATION)); exp.start(); exp.report(); exp.finish(); }}