예제 #1
0
  private void matchTriangular(double mean, Triangular t) {
    double c2v = 0.0;
    double var = 0.0;
    int i = (int) myTriangCasesCDF.getValue();

    switch (i) {
      case 1: // symmetric
        myC2vCDF.setRange(0.0, 1.0 / 6.0);
        c2v = myC2vCDF.getValue();
        var = c2v * mean * mean;
        triangSymmetric(mean, var, t);
        break;
      case 2: // positive skew
        myC2vCDF.setRange(0.0, 1.0 / 8.0);
        c2v = myC2vCDF.getValue();
        var = c2v * mean * mean;
        triangPositiveSkew(mean, var, t);
        break;
      case 3: // negative skew
        myC2vCDF.setRange(0.0, 1.0 / 2.0);
        c2v = myC2vCDF.getValue();
        var = c2v * mean * mean;
        triangNegativeSkew(mean, var, t);
        break;
    }
  }
예제 #2
0
  public QParameterSet generateQParameterSet() {
    QParameterSet q = new QParameterSet();

    q.mtba = myMTBACDF.getValue();
    q.numServers = (int) myServerCDF.getValue();
    q.rho = myRhoCDF.getValue();
    q.mst = q.rho * q.mtba * q.numServers;

    matchDistribution(q, ARRIVAL);
    matchDistribution(q, SERVICE);

    return (q);
  }
예제 #3
0
  private void matchDistribution(QParameterSet q, int processType) {
    double mean = 0.0;
    double p1 = 0.0;
    double p2 = 0.0;
    double p3 = 0.0;
    double[] param = new double[3];

    Distribution d;

    int type = (int) myDCDF.getValue();

    if (processType == ARRIVAL) {
      q.acdfType = type;
      q.acdf = (Distribution) myArrivalCDFs.get(q.acdfType - 1);
      d = q.acdf;
      mean = q.mtba;
    } else {
      q.scdfType = type;
      q.scdf = (Distribution) myServiceCDFs.get(q.scdfType - 1);
      d = q.scdf;
      mean = q.mst;
    }

    switch (type) {
      case EXPONENTIAL:
        matchExponential(mean, (Exponential) d);
        param = d.getParameters();
        p1 = param[0];
        break;
      case UNIFORM:
        matchUniform(mean, (Uniform) d);
        param = d.getParameters();
        p1 = param[0];
        p2 = param[1];
        break;
      case GAMMA:
        matchGamma(mean, (Gamma) d);
        param = d.getParameters();
        p1 = param[0];
        p2 = param[1];
        break;
      case WEIBULL:
        matchWeibull(mean, (Weibull) d);
        param = d.getParameters();
        p1 = param[0];
        p2 = param[1];
        break;
      case TRIANGULAR:
        matchTriangular(mean, (Triangular) d);
        param = d.getParameters();
        p1 = param[0];
        p2 = param[1];
        p3 = param[2];
        break;
      case LOGNORMAL:
        matchLognormal(mean, (Lognormal) d);
        param = d.getParameters();
        p1 = param[0];
        p2 = param[1];
        break;
    }

    double var = d.getVariance();
    double cv2 = var / (mean * mean);
    if (processType == ARRIVAL) {
      q.c2va = cv2;
      q.aP1 = p1;
      q.aP2 = p2;
      q.aP3 = p3;
    } else {
      q.c2vs = cv2;
      q.sP1 = p1;
      q.sP2 = p2;
      q.sP3 = p3;
    }
  }
예제 #4
0
 public void setMaxNumServers(int maxNumServers) {
   if (maxNumServers < 1) throw new IllegalArgumentException("Number of servers must be >=1");
   myMaxNumServers = maxNumServers;
   if (myServerCDF == null) myServerCDF = new DUniform(1, myMaxNumServers);
   else myServerCDF.setRange(1, myMaxNumServers);
 }