All pastes #384939 Raw Edit

Stuff

public text v1 · immutable
·published 2007-03-07 13:46 UTC
rendered paste body
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();
  }
}