Commit 1b636526 authored by rosemaryng's avatar rosemaryng
Browse files

[Measures] Implemented new metrics for retrial orbit size and waiting time

parent f0a5335b
......@@ -367,16 +367,13 @@ public class Queue extends InputSection {
waitingRequests = new LinkedJobInfoList(jobClasses.size());
waitingRequests.setNetSystem(node.getNetSystem());
// retrialFullGroup = new LinkedJobInfoList(jobClasses.size());
if (putStrategies == null) {
putStrategies = new QueuePutStrategy[jobClasses.size()];
for (int i = 0; i < putStrategies.length; i++) {
putStrategies[i] = new TailStrategy();
}
}
// droppedJobs = 0;
// droppedJobsPerClass = new int[jobClasses.size()];
renegedJobs = 0;
renegedJobsPerClass = new int[jobClasses.size()];
balkedJobs = 0;
......@@ -490,7 +487,7 @@ public class Queue extends InputSection {
job = message.getJob();
double randomDelay = retrial.generateRandomDelay();
double retrialTime = this.getNetSytem().getTime() + randomDelay;
nodeJobsList.addToRetrialOrbit(job.getId());
nodeJobsList.addToRetrialOrbit(job);
// System.out.println("Retrial signaled for " + job.getId() + " at " + retrialTime);
// System.out.println("retrialJobsCount: " + retried.size() + " retrials Total Count: " + retrialCount + " retrial group: " + retrialFullGroup.keySet() + " NodeJobsList: " + nodeJobsList.getInternalJobInfoList());
......@@ -533,9 +530,7 @@ public class Queue extends InputSection {
nodeJobsList.retryJob(jobInfo);
netJobsList.retryJob(job);
}
if (job.getId() == 161) {
System.out.println("shit");
}
// System.out.println("----- \n" + jobInfo + " Time now: " + getNetSytem().getTime());
......@@ -598,7 +593,7 @@ public class Queue extends InputSection {
// Queue is not full. Okay.
if (retrialFullGroup.containsKey(job.getId())) {
// System.out.println(job.getId() + " proceeds.");
nodeJobsList.removeFromRetrialOrbit(job.getId());
nodeJobsList.removeFromRetrialOrbit(job);
}
// If parent node is a fork node adds job to FJ info list
......@@ -655,7 +650,7 @@ public class Queue extends InputSection {
// Retry Full route
if (dropStrategies != null && dropStrategies[0].equals(FINITE_RETRIAL)) {
// System.out.println(job.getId() + " full, will be retried. Time now: " + this.getNetSytem().getTime());
System.out.println("retrialJobsCount: " + retried.size() + " retrials Total Count: " + retrialCount + " retrial group: " + nodeJobsList.getRetrialOrbit() + " NodeJobsList: " + nodeJobsList.getInternalJobInfoList());
System.out.println("retrialJobsCount: " + retried.size() + " retrials Total Count: " + retrialCount + " orbit size: " + nodeJobsList.getRetrialOrbit().size() + " NodeJobsList: " + nodeJobsList.getInternalJobInfoList());
sendMe(NetEvent.EVENT_RETRIAL, job, 0);
} else {
......
......@@ -89,6 +89,7 @@ public abstract class ServiceSection extends PipeSection {
* @return a token to remove sent event.
*/
protected RemoveToken sendBackward(int event, Object data, double delay) {
this.getOwnerNode().getJobInfoList().updateWaitingTime((Job) data);
return send(event, data, delay, NodeSection.INPUT);
}
......
......@@ -67,6 +67,9 @@ public class GlobalJobInfoList {
private double lastModifyNumber;
private double[] lastModifyNumberPerClass;
private double lastModifyRetrialOrbitNumber;
private double[] lastModifyRetrialOrbitNumberPerClass;
private int jobs;
private int[] jobsPerClass;
......@@ -88,6 +91,12 @@ public class GlobalJobInfoList {
private InverseMeasure retrialRate;
private InverseMeasure[] retrialRatePerClass;
// private Measure retrialOrbitJobNum;
// private Measure[] retrialOrbitJobNumPerClass;
private Measure waitingTime;
private Measure[] waitingTimePerClass;
private InverseMeasure throughput;
private InverseMeasure[] throughputPerClass;
......@@ -137,6 +146,8 @@ public class GlobalJobInfoList {
lastJobRetrialTimePerClass = new double[classNum];
lastModifyNumber = 0.0;
lastModifyNumberPerClass = new double[classNum];
lastModifyRetrialOrbitNumber = 0.0;
lastModifyRetrialOrbitNumberPerClass = new double[classNum];
jobs = 0;
jobsPerClass = new int[classNum];
......@@ -150,6 +161,10 @@ public class GlobalJobInfoList {
renegingRatePerClass = null;
retrialRate = null;
retrialRatePerClass = null;
// retrialOrbitJobNum = null;
// retrialOrbitJobNumPerClass = null;
waitingTime = null;
waitingTimePerClass = null;
throughput = null;
throughputPerClass = null;
systemPower = null;
......@@ -191,6 +206,7 @@ public class GlobalJobInfoList {
public void removeJob(Job job) {
updateJobNumber(job);
updateResponseTime(job);
updateWaitingTime(job);
updateThroughput(job);
updateSystemPower(job);
updateVisitCountPerChain(job);
......@@ -209,6 +225,7 @@ public class GlobalJobInfoList {
public void recycleJob(Job job) {
updateJobNumber(job);
updateResponseTime(job);
updateWaitingTime(job);
updateThroughput(job);
updateSystemPower(job);
updateVisitCountPerChain(job);
......@@ -433,6 +450,38 @@ public class GlobalJobInfoList {
}
}
// /**
// * Analyzes System Number of Jobs in retrial orbit for a specific job class or for every class.
// * @param jobClass specified job class. If null measure will be job independent.
// * @param Measure reference to a Measure object.
// */
// public void analyzeRetrialOrbitJobNumber(JobClass jobClass, Measure Measure) {
// if (jobClass != null) {
// if (retrialOrbitJobNumPerClass == null) {
// retrialOrbitJobNumPerClass = new Measure[classNum];
// }
// retrialOrbitJobNumPerClass[jobClass.getId()] = Measure;
// } else {
// retrialOrbitJobNum = Measure;
// }
// }
/**
* Analyzes System Waiting Time for a specific job class or for every class.
* @param jobClass specified job class. If null measure will be job independent.
* @param measure reference to a Measure object.
*/
public void analyzeWaitingTime(JobClass jobClass, Measure measure) {
if (jobClass != null) {
if (waitingTimePerClass == null) {
waitingTimePerClass = new Measure[classNum];
}
waitingTimePerClass[jobClass.getId()] = measure;
} else {
waitingTime = measure;
}
}
// ------------------------------------------------------------------------------------
// --- Methods to update measures -----------------------------------------------------
......@@ -581,6 +630,40 @@ public class GlobalJobInfoList {
}
}
// /**
// * Updates System Job Number measures.
// * @param job current job.
// */
// private void updateRetrialOrbitJobNum(Job job) {
// if (retrialOrbitJobNumPerClass != null) {
// int index = job.getJobClass().getId();
// Measure m = retrialOrbitJobNumPerClass[index];
// if (m != null) {
// m.update(retrialOrbitJobNumPerClass[index], getTime() - lastModifyNumberPerClass[index]);
// }
// }
// if (jobNum != null) {
// jobNum.update(jobs, getTime() - lastModifyNumber);
// }
// }
/**
* Updates System Response Time measures.
* @param job current job.
*/
private void updateWaitingTime(Job job) {
if (waitingTimePerClass != null) {
int index = job.getJobClass().getId();
Measure m = waitingTimePerClass[index];
if (m != null) {
m.update(netSystem.getTime() - job.getSystemEnteringTime(), 1.0);
}
}
if (waitingTime != null) {
waitingTime.update(getTime() - job.getSystemEnteringTime(), 1.0);
}
}
/**
......
......@@ -57,9 +57,9 @@ public interface JobInfoList {
public Map<Integer, List<Double>> getRetrialOrbit();
public Map<Integer, List<Double>> addToRetrialOrbit(int id);
public Map<Integer, List<Double>> addToRetrialOrbit(Job job);
public void removeFromRetrialOrbit(int id);
public void removeFromRetrialOrbit(Job job);
/**
* Gets the number of added jobs.
......@@ -332,6 +332,20 @@ public interface JobInfoList {
*/
public abstract void analyzeRetrialRate(JobClass jobClass, InverseMeasure measurement);
/**
* Analyzes the retrial orbit size for the specified job class.
* @param jobClass Specified job class. If null, analysis will be job class independent.
* @param measurement Reference to the associated inverse measure.
*/
public abstract void analyzeRetrialOrbitSize(JobClass jobClass, Measure measurement);
/**
* Analyzes the waiting time for the specified job class.
* @param jobClass Specified job class. If null, analysis will be job class independent.
* @param measurement Reference to the associated inverse measure.
*/
public abstract void analyzeWaitingTime(JobClass jobClass, Measure measurement);
/**
* Analyzes the response time of a sink for the specified job class.
* @param jobClass Specified job class. If null, analysis will be job class independent.
......@@ -394,6 +408,12 @@ public interface JobInfoList {
*/
public abstract void consumeJob(JobInfo jobInfo);
/**
* Updates the waiting time of a job -- called when a job is being served.
* @param job Reference to the job that is being sent to service section (of a queue).
*/
public void updateWaitingTime(Job job);
/**
* Sets the number of servers. This parameter is used to scale utilization.
* @param numberOfServers Number of servers.
......
......@@ -45,6 +45,7 @@ public class LinkedJobInfoList implements JobInfoList {
// Retrial group when the main jobsList (primary queue) is full
protected Map<Integer, List<Double>> retrialOrbit = new HashMap<>();
protected Map<Integer, List<Double>> retrialOrbitPerClass[];
//arrivals and completions
protected int jobsIn;
......@@ -87,6 +88,10 @@ public class LinkedJobInfoList implements JobInfoList {
protected double lastJobSojournTimePerClass[];
protected double lastRetrialTime;
protected double lastRetrialTimePerClass[];
protected Measure queueLength;
protected Measure queueLengthPerClass[];
......@@ -129,6 +134,12 @@ public class LinkedJobInfoList implements JobInfoList {
protected InverseMeasure retrialRatePerClass[];
protected Measure waitingTime;
protected Measure waitingTimePerClass[];
protected Measure retrialOrbitSize;
protected Measure retrialOrbitSizePerClass[];
protected Measure responseTimePerSink;
......@@ -152,8 +163,10 @@ public class LinkedJobInfoList implements JobInfoList {
this.numberOfJobClasses = numberOfJobClasses;
list = new LinkedList<JobInfo>();
listPerClass = new LinkedList[numberOfJobClasses];
retrialOrbitPerClass = new HashMap[numberOfJobClasses];
for (int i = 0; i < numberOfJobClasses; i++) {
listPerClass[i] = new LinkedList<JobInfo>();
retrialOrbitPerClass[i] = new HashMap<Integer, List<Double>>();
}
jobsInPerClass = new int[numberOfJobClasses];
jobsOutPerClass = new int[numberOfJobClasses];
......@@ -165,6 +178,7 @@ public class LinkedJobInfoList implements JobInfoList {
lastJobRetrialTimePerClass = new double[numberOfJobClasses];
totalSojournTimePerClass = new double[numberOfJobClasses];
lastJobSojournTimePerClass = new double[numberOfJobClasses];
lastRetrialTimePerClass = new double[numberOfJobClasses];
}
/**---------------------------------------------------------------------
......@@ -189,15 +203,27 @@ public class LinkedJobInfoList implements JobInfoList {
return retrialOrbit;
}
public Map<Integer, List<Double>> addToRetrialOrbit(int id) {
public Map<Integer, List<Double>> addToRetrialOrbit(Job job) {
int id = job.getId();
int classID = job.getJobClass().getId();
updateRetrialOrbitSize(job);
List<Double> currList = (retrialOrbit.get(id) == null ? new ArrayList<Double>() : retrialOrbit.get(id));
currList.add(this.getTime());
retrialOrbit.put(id, currList);
retrialOrbit.put(job.getId(), currList);
retrialOrbitPerClass[classID].put(job.getId(), currList);
lastRetrialTime = getTime();
lastRetrialTimePerClass[classID] = getTime();
return retrialOrbit;
}
public void removeFromRetrialOrbit(int id) {
public void removeFromRetrialOrbit(Job job) {
int id = job.getId();
int classID = job.getJobClass().getId();
updateRetrialOrbitSize(job);
retrialOrbit.remove(id);
retrialOrbitPerClass[classID].remove(id);
lastRetrialTime = getTime();
lastRetrialTimePerClass[job.getJobClass().getId()] = getTime();
}
/* (non-Javadoc)
......@@ -325,15 +351,26 @@ public class LinkedJobInfoList implements JobInfoList {
}
}
// /* (non-Javadoc)
// * @see jmt.engine.QueueNet.JobInfoList#getLastModifyTimePerClass(jmt.engine.QueueNet.JobClass)
// */
// public double getLastModifyRetrialPerClass(JobClass jobClass) {
//
// }
//
// public double getLastModifyRetrialTime() {
//
// }
/* (non-Javadoc)
* @see jmt.engine.QueueNet.JobInfoList#getLastModifyTimePerClass(jmt.engine.QueueNet.JobClass)
*/
public double getLastModifyTimePerClass(JobClass jobClass) {
if (lastJobOutTimePerClass[jobClass.getId()] >= lastJobInTimePerClass[jobClass.getId()]
&& lastJobOutTimePerClass[jobClass.getId()] >= lastJobDropTimePerClass[jobClass.getId()]) {
&& lastJobOutTimePerClass[jobClass.getId()] >= lastJobDropTimePerClass[jobClass.getId()]) {
return lastJobOutTimePerClass[jobClass.getId()];
} else if (lastJobInTimePerClass[jobClass.getId()] >= lastJobOutTimePerClass[jobClass.getId()]
&& lastJobInTimePerClass[jobClass.getId()] >= lastJobDropTimePerClass[jobClass.getId()]) {
&& lastJobInTimePerClass[jobClass.getId()] >= lastJobDropTimePerClass[jobClass.getId()]) {
return lastJobInTimePerClass[jobClass.getId()];
} else {
return lastJobDropTimePerClass[jobClass.getId()];
......@@ -734,6 +771,30 @@ public class LinkedJobInfoList implements JobInfoList {
}
}
@Override
public void analyzeRetrialOrbitSize(JobClass jobClass, Measure measurement) {
if (jobClass != null) {
if (retrialOrbitSizePerClass == null) {
retrialOrbitSizePerClass = new Measure[numberOfJobClasses];
}
retrialOrbitSizePerClass[jobClass.getId()] = measurement;
} else {
retrialOrbitSize = measurement;
}
}
@Override
public void analyzeWaitingTime(JobClass jobClass, Measure measurement) {
if (jobClass != null) {
if (waitingTimePerClass == null) {
waitingTimePerClass = new Measure[numberOfJobClasses];
}
waitingTimePerClass[jobClass.getId()] = measurement;
} else {
waitingTime = measurement;
}
}
/* (non-Javadoc)
* @see jmt.engine.QueueNet.JobInfoList#analyzeResponseTimePerSink(jmt.engine.QueueNet.JobClass, jmt.engine.dataAnalysis.InverseMeasure)
*/
......@@ -913,6 +974,37 @@ public class LinkedJobInfoList implements JobInfoList {
}
}
protected void updateRetrialOrbitSize(Job job) {
if (retrialOrbitSizePerClass != null) {
JobClass jobClass = job.getJobClass();
int c = jobClass.getId();
Measure m = retrialOrbitSizePerClass[c];
if (m != null) {
m.update(retrialOrbit.size(), getTime() - getLastJobRetrialTimePerClass(jobClass));
}
}
if (retrialOrbitSize != null) {
retrialOrbitSize.update(retrialOrbit.size(), getTime() - getLastJobRetrialTime());
}
}
/* (non-Javadoc)
* @see jmt.engine.QueueNet.JobInfoList#updateWaitingTime(jmt.engine.QueueNet.JobInfo)
*/
public void updateWaitingTime(Job job) {
if (waitingTimePerClass != null) {
JobClass jobClass = job.getJobClass();
int c = jobClass.getId();
Measure m = waitingTimePerClass[c];
if (m != null) {
m.update(getTime() - job.getServiceArrivalTime(), 1.0);
}
}
if (waitingTime != null) {
waitingTime.update(getTime() - job.getServiceArrivalTime(), 1.0);
}
}
protected void updateResponseTimePerSink(JobInfo jobInfo) {
if (responseTimePerSinkPerClass != null) {
JobClass jobClass = jobInfo.getJob().getJobClass();
......
......@@ -356,6 +356,12 @@ public class NetNode extends SimEntity {
case SimConstants.LIST_RETRIAL_RATE:
jobsList.analyzeRetrialRate(jobClass, (InverseMeasure) measurement);
break;
case SimConstants.LIST_RETRIAL_ORBIT_SIZE:
jobsList.analyzeRetrialOrbitSize(jobClass, measurement);
break;
case SimConstants.LIST_WAITING_TIME:
jobsList.analyzeWaitingTime(jobClass, measurement);
break;
case SimConstants.RESPONSE_TIME_PER_SINK:
jobsList.analyzeResponseTimePerSink(jobClass, measurement);
break;
......
......@@ -108,7 +108,7 @@ public interface SimConstants {
public static final int SYSTEM_RETRIAL_RATE = 31;
/** Measure identifier: number of jobs in the retrial orbit of the node */
public static final int NUMBER_OF_JOBS_IN_RETRIAL_ORBIT = 33;
public static final int RETRIAL_ORBIT_SIZE = 33;
/** Measure identifier: number of jobs in the retrial orbit of the system */
public static final int SYSTEM_NUMBER_OF_JOBS_IN_RETRIAL_ORBIT = 34;
......@@ -149,7 +149,7 @@ public interface SimConstants {
public static final int LIST_RETRIAL_RATE = 32;
/** Measure identifier: number of jobs in the retrial orbit in the list */
public static final int LIST_NUMBER_OF_JOBS_IN_RETRIAL_ORBIT = 35;
public static final int LIST_RETRIAL_ORBIT_SIZE = 35;
/** Measure identifier: (total) waiting time of a job of the list (system entering time - time when job is pass to serving section) */
public static final int LIST_WAITING_TIME = 38;
......
......@@ -56,6 +56,10 @@ public abstract class EngineUtils {
return SimulationDefinition.MEASURE_BR;
case SimConstants.RETRIAL_RATE:
return SimulationDefinition.MEASURE_R;
case SimConstants.RETRIAL_ORBIT_SIZE:
return SimulationDefinition.MEASURE_RS;
case SimConstants.WAITING_TIME:
return SimulationDefinition.MEASURE_WT;
case SimConstants.SYSTEM_NUMBER_OF_JOBS:
return SimulationDefinition.MEASURE_S_CN;
case SimConstants.SYSTEM_RESPONSE_TIME:
......@@ -72,6 +76,10 @@ public abstract class EngineUtils {
return SimulationDefinition.MEASURE_S_R;
case SimConstants.SYSTEM_POWER:
return SimulationDefinition.MEASURE_S_P;
case SimConstants.SYSTEM_NUMBER_OF_JOBS_IN_RETRIAL_ORBIT:
return SimulationDefinition.MEASURE_S_RS;
case SimConstants.SYSTEM_WAITING_TIME:
return SimulationDefinition.MEASURE_S_WT;
case SimConstants.RESPONSE_TIME_PER_SINK:
return SimulationDefinition.MEASURE_RP_PER_SINK;
case SimConstants.THROUGHPUT_PER_SINK:
......@@ -118,6 +126,10 @@ public abstract class EngineUtils {
return SimConstants.BALKING_RATE;
} else if (type.equals(SimulationDefinition.MEASURE_R)) {
return SimConstants.RETRIAL_RATE;
} else if (type.equals(SimulationDefinition.MEASURE_RS)) {
return SimConstants.RETRIAL_ORBIT_SIZE;
} else if (type.equals(SimulationDefinition.MEASURE_WT)) {
return SimConstants.WAITING_TIME;
} else if (type.equals(SimulationDefinition.MEASURE_S_CN)) {
return SimConstants.SYSTEM_NUMBER_OF_JOBS;
} else if (type.equals(SimulationDefinition.MEASURE_S_RP)) {
......@@ -134,6 +146,10 @@ public abstract class EngineUtils {
return SimConstants.SYSTEM_POWER;
} else if (type.equals(SimulationDefinition.MEASURE_S_R)) {
return SimConstants.SYSTEM_RETRIAL_RATE;
} else if (type.equals(SimulationDefinition.MEASURE_S_RS)) {
return SimConstants.SYSTEM_NUMBER_OF_JOBS_IN_RETRIAL_ORBIT;
} else if (type.equals(SimulationDefinition.MEASURE_S_WT)) {
return SimConstants.SYSTEM_WAITING_TIME;
} else if (type.equals(SimulationDefinition.MEASURE_RP_PER_SINK)) {
return SimConstants.RESPONSE_TIME_PER_SINK;
} else if (type.equals(SimulationDefinition.MEASURE_X_PER_SINK)) {
......
......@@ -526,6 +526,12 @@ public class Simulation {
case SimConstants.RETRIAL_RATE:
netNodes[nodePosition].analyze(SimConstants.LIST_RETRIAL_RATE, jClass, ms.getMeasure());
break;
case SimConstants.RETRIAL_ORBIT_SIZE:
netNodes[nodePosition].analyze(SimConstants.LIST_RETRIAL_ORBIT_SIZE, jClass, ms.getMeasure());
break;
case SimConstants.WAITING_TIME:
netNodes[nodePosition].analyze(SimConstants.LIST_WAITING_TIME, jClass, ms.getMeasure());
break;
case SimConstants.RESPONSE_TIME_PER_SINK:
netNodes[nodePosition].analyze(SimConstants.RESPONSE_TIME_PER_SINK, jClass, ms.getMeasure());
break;
......@@ -575,6 +581,13 @@ public class Simulation {
break;
case SimConstants.SYSTEM_RETRIAL_RATE:
network.getJobInfoList().analyzeRetrialRate(jClass, ms.getMeasure());
break;
// case SimConstants.SYSTEM_NUMBER_OF_JOBS_IN_RETRIAL_ORBIT:
// network.getJobInfoList().ana(jClass, ms.getMeasure());
// break;
// case SimConstants.SYSTEM_RETRIAL_RATE:
// network.getJobInfoList().analyzeRetrialRate(jClass, ms.getMeasure());
// break;
}
}
}
......
......@@ -212,16 +212,16 @@ public interface MeasureDefinition {
public int[] getRetrialRateMeasures();
/**
* Returns an array with the measureIndex of every retrialOrbit length measure
* Returns an array with the measureIndex of every retrial orbit size measure
* @return an array with measures' index
*/
public int[] getRetrialOrbitLengthMeasures();
public int[] getRetrialOrbitSizeMeasures();
/**
* Returns an array with the measureIndex of every waiting time measure
* @return an array with measures' index
*/
public int[] getWaitingTime();
public int[] getWaitingTimeMeasures();
/**
* Returns an array with the measureIndex of every system customer number measure
......@@ -275,13 +275,13 @@ public interface MeasureDefinition {
* Returns an array with the measureIndex of every system retrialOrbit length measure
* @return an array with measures' index
*/
public int[] getSystemRetrialOrbitLengthMeasures();
public int[] getSystemRetrialOrbitSizeMeasures();
/**
* Returns an array with the measureIndex of every system waiting time measure
* @return an array with measures' index
*/
public int[] getSystemWaitingTime();
public int[] getSystemWaitingTimeMeasures();
/**
* Returns an array with the measureIndex of every response time per sink measure
......
......@@ -55,6 +55,9 @@ public class PAResultsModel implements MeasureDefinition {
private Vector<Integer> renegingRate = new Vector<Integer>();
private Vector<Integer> balkingRate = new Vector<Integer>();
private Vector<Integer> retrialRate = new Vector<Integer>();
private Vector<Integer> waitingTime = new Vector<Integer>();
private Vector<Integer> retrialOrbitSize = new Vector<Integer>();
private Vector<Integer> systemCustomerNumber = new Vector<Integer>();
private Vector<Integer> systemResponseTime = new Vector<Integer>();
private Vector<Integer> systemThroughput = new Vector<Integer>();
......@@ -63,6 +66,8 @@ public class PAResultsModel implements MeasureDefinition {
private Vector<Integer> systemBalkingRate = new Vector<Integer>();
private Vector<Integer> systemPower = new Vector<Integer>();
private Vector<Integer> systemRetrialRate = new Vector<Integer>();
private Vector<Integer> systemWaitingTime = new Vector<Integer>();
private Vector<Integer> systemCustomerNumberInRetrialOrbit = new Vector<Integer>();
private Vector<Integer> responseTimePerSink = new Vector<Integer>();
private Vector<Integer> throughputPerSink = new Vector<Integer>();
private Vector<Integer> FCRTotalWeight = new Vector<Integer>();
......@@ -138,6 +143,10 @@ public class PAResultsModel implements MeasureDefinition {
balkingRate.add(new Integer(i));
} else if (measureType.equals(SimulationDefinition.MEASURE_RR)) {
renegingRate.add(new Integer(i));
} else if (measureType.equals(SimulationDefinition.MEASURE_WT)) {
waitingTime.add(new Integer(i));
} else if (measureType.equals(SimulationDefinition.MEASURE_RS)) {
retrialOrbitSize.add(new Integer(i));
} else if (measureType.equals(SimulationDefinition.MEASURE_S_CN)) {
systemCustomerNumber.add(new Integer(i));