public class HaywardFredericksApprox extends AbstractContactCenterEval implements ContactCenterEval
The service rates can be dependent on both the call type and agent group. As an extension, the service level is approximated by taking: 1 minus the blocking probability. This is a crude heuristic which is used similarly in Pot et al. (2008).
To execute the approximation, the user must first select the period to evaluate
with EvalOptionType.CURRENTPERIOD
and
set the staffing vector with EvalOptionType.STAFFINGVECTOR
. After that
the user can call eval()
to execute the approximation.
The available performance measures are :
PerformanceMeasureType.SERVICELEVEL
(for global service level only),
PerformanceMeasureType.RATEOFBLOCKING
,
PerformanceMeasureType.BLOCKRATIO
,
PerformanceMeasureType.SERVEDRATES
,
PerformanceMeasureType.RATEOFSERVICES
.
This approximation requires a type-to-group routing matrix
(see QueuePriorityRouter
to define the skill sets and the routing priorities.
Since there is no waiting queues in this model, the group-to-type routing
matrix is not required.
Model limitation: this approximation cannot evaluate a call center that has cross-routing. Cross-routing exists when 2 agent groups appear in opposite order in the priority lists of at least 2 call types. For example, consider a call center with 2 call types and 2 agent groups. If call type 1 has priority list (1, 2) and call type 2 has priority list (2, 1) (defined by the typeToGroupMap matrix), then there is cross-routing. Cross-routing can also appear in more complex situations. Consider a call center with 3 call types and 3 agent groups. If type 1 has priority list (1, 2), type 2 has priority (2, 3) and type 3 has priority (3, 1), then there is also cross-routing, because the call flow that arrives at groups 1 or 3 depends on the performance of each other.
Modifier and Type | Field and Description |
---|---|
static PerformanceMeasureType[] |
perfMeasureTypes |
Constructor and Description |
---|
HaywardFredericksApprox(CallCenter cc,
HaywardFredericksParams hfParams)
Creates a new instance of HaywardFredericksApprox
|
HaywardFredericksApprox(CallCenterParams ccParams,
HaywardFredericksParams hfParams)
Creates a new instance of HaywardFredericksApprox
|
Modifier and Type | Method and Description |
---|---|
void |
approximate()
Executes the approximation.
|
void |
eval() |
String |
getAgentGroupName(int i) |
String |
getContactTypeName(int i) |
TimeUnit |
getDefaultUnit() |
Object |
getEvalOption(EvalOptionType option) |
EvalOptionType[] |
getEvalOptions() |
int |
getNumAgentGroups() |
int |
getNumContactTypes() |
int |
getNumInContactTypes() |
int |
getNumMainPeriods()
The number of periods in the call center, however this approximation
will only evaluate 1 period at a time.
|
int |
getNumMatricesOfAWT()
This approximation doesn't estimate the service level and doesn't require an AWT.
|
int |
getNumOutContactTypes() |
int |
getNumWaitingQueues()
Always returns 0 because this model assumes no waiting queues.
|
DoubleMatrix2D |
getPerformanceMeasure(PerformanceMeasureType pmt) |
PerformanceMeasureType[] |
getPerformanceMeasures() |
String |
getWaitingQueueName(int i) |
boolean |
hasEvalOption(EvalOptionType option) |
boolean |
hasPerformanceMeasure(PerformanceMeasureType pmt) |
boolean |
isVerbose() |
static void |
main(String[] args)
Executes the Hayward-Fredericks approximation.
|
void |
reset() |
boolean |
seemsUnstable()
Since we are analyzing a loss system, it is always stable.
|
void |
setEvalOption(EvalOptionType option,
Object value) |
void |
setVerbose(boolean v) |
formatStatistics, formatStatisticsExcel, formatStatisticsLaTeX, getEvalInfo, getReportParams, setReportParams
getAgentGroupProperties, getAgentGroupSegmentName, getAgentGroupSegmentProperties, getContactTypeProperties, getContactTypeSegmentName, getContactTypeSegmentProperties, getInContactTypeSegmentName, getInContactTypeSegmentProperties, getMainPeriodName, getMainPeriodSegmentName, getMatrixOfAWTName, getNumAgentGroupSegments, getNumAgentGroupsWithSegments, getNumContactTypeSegments, getNumContactTypesWithSegments, getNumInContactTypeSegments, getNumInContactTypesWithSegments, getNumMainPeriodSegments, getNumMainPeriodsWithSegments, getNumOutContactTypeSegments, getNumOutContactTypesWithSegments, getNumWaitingQueueSegments, getNumWaitingQueuesWithSegments, getOutContactTypeSegmentName, getOutContactTypeSegmentProperties, getWaitingQueueProperties, getWaitingQueueSegmentName, getWaitingQueueSegmentProperties
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
formatStatistics, formatStatisticsExcel, formatStatisticsLaTeX, getEvalInfo, getReportParams, setReportParams
getAgentGroupProperties, getAgentGroupSegmentName, getAgentGroupSegmentProperties, getContactTypeProperties, getContactTypeSegmentName, getContactTypeSegmentProperties, getInContactTypeSegmentName, getInContactTypeSegmentProperties, getMainPeriodName, getMainPeriodSegmentName, getMatrixOfAWTName, getNumAgentGroupSegments, getNumAgentGroupsWithSegments, getNumContactTypeSegments, getNumContactTypesWithSegments, getNumInContactTypeSegments, getNumInContactTypesWithSegments, getNumMainPeriodSegments, getNumMainPeriodsWithSegments, getNumOutContactTypeSegments, getNumOutContactTypesWithSegments, getNumWaitingQueueSegments, getNumWaitingQueuesWithSegments, getOutContactTypeSegmentName, getOutContactTypeSegmentProperties, getWaitingQueueProperties, getWaitingQueueSegmentName, getWaitingQueueSegmentProperties
public static final PerformanceMeasureType[] perfMeasureTypes
public HaywardFredericksApprox(CallCenterParams ccParams, HaywardFredericksParams hfParams)
public HaywardFredericksApprox(CallCenter cc, HaywardFredericksParams hfParams)
public void reset()
reset
in interface ContactCenterEval
public void eval()
eval
in interface ContactCenterEval
public void approximate()
public int getNumAgentGroups()
getNumAgentGroups
in interface ContactCenterInfo
public int getNumContactTypes()
getNumContactTypes
in interface ContactCenterInfo
public int getNumInContactTypes()
getNumInContactTypes
in interface ContactCenterInfo
public int getNumOutContactTypes()
getNumOutContactTypes
in interface ContactCenterInfo
public int getNumMainPeriods()
getNumMainPeriods
in interface ContactCenterInfo
public int getNumWaitingQueues()
getNumWaitingQueues
in interface ContactCenterInfo
public String getWaitingQueueName(int i)
getWaitingQueueName
in interface ContactCenterInfo
getWaitingQueueName
in class AbstractContactCenterInfo
public String getAgentGroupName(int i)
getAgentGroupName
in interface ContactCenterInfo
getAgentGroupName
in class AbstractContactCenterInfo
public String getContactTypeName(int i)
getContactTypeName
in interface ContactCenterInfo
getContactTypeName
in class AbstractContactCenterInfo
public boolean seemsUnstable()
seemsUnstable
in interface ContactCenterEval
public boolean isVerbose()
isVerbose
in interface ContactCenterEval
isVerbose
in class AbstractContactCenterEval
public void setVerbose(boolean v)
setVerbose
in interface ContactCenterEval
setVerbose
in class AbstractContactCenterEval
public TimeUnit getDefaultUnit()
getDefaultUnit
in interface ContactCenterInfo
public int getNumMatricesOfAWT()
getNumMatricesOfAWT
in interface ContactCenterInfo
public EvalOptionType[] getEvalOptions()
getEvalOptions
in interface ContactCenterEval
public Object getEvalOption(EvalOptionType option)
getEvalOption
in interface ContactCenterEval
public boolean hasEvalOption(EvalOptionType option)
hasEvalOption
in interface ContactCenterEval
public void setEvalOption(EvalOptionType option, Object value)
setEvalOption
in interface ContactCenterEval
public PerformanceMeasureType[] getPerformanceMeasures()
getPerformanceMeasures
in interface ContactCenterEval
public boolean hasPerformanceMeasure(PerformanceMeasureType pmt)
hasPerformanceMeasure
in interface ContactCenterEval
public DoubleMatrix2D getPerformanceMeasure(PerformanceMeasureType pmt)
getPerformanceMeasure
in interface ContactCenterEval
public static void main(String[] args) throws Exception
The available performance measures are specified in the description of this class.
args
- see the description of this methodException