public static class WeightRoutingIdleness.WeightRouterIdleness extends Router
Modifier and Type | Field and Description |
---|---|
protected double[][] |
callCoeffs |
protected boolean[][] |
canServe |
protected double[][] |
constWeights |
protected Event[] |
delayCheckEvent |
protected double[][] |
groupCoeffs |
protected int |
numGroups |
protected double[][] |
numIdleCoeffs |
protected int |
numTypes |
static int |
ROUTING_DELAY_CONSTTIME
Choose to check routing delay at constant interval, use
variable delaySecFactor to control the delay time.
|
static int |
ROUTING_DELAY_EXPTIME
Choose to check routing delay by predicting the first delay time (the expected time).
|
protected double |
routingDelayConstTime |
protected int |
routingDelayMethod |
protected RandomStream |
streamAgentSelection |
protected RandomStream |
streamContactSelection |
BLOCKTYPE_CANTQUEUE, BLOCKTYPE_NOLINE, BLOCKTYPE_QUEUEFULL, DEQUEUETYPE_BEGINSERVICE, DEQUEUETYPE_FANTOM, DEQUEUETYPE_NOAGENT, DEQUEUETYPE_TRANSFER, dqTypeRet
Constructor and Description |
---|
WeightRoutingIdleness.WeightRouterIdleness(int numTypes,
int numGroups,
double[][] constWeights,
double[][] callCoeffs,
double[][] groupCoeffs,
double[][] numIdleCoeffs,
boolean[][] canServe)
Constructor of the weight router.
|
Modifier and Type | Method and Description |
---|---|
boolean |
canServe(int group,
int type) |
protected void |
checkWaitingQueues(AgentGroup agentGroup) |
protected double |
computeDelayCheckTime(int callType,
boolean firstDelay)
Compute the time for the next routing delay check.
|
protected double |
computeScore(int type,
int group)
Compute the current score for the pair (call type, group).
|
protected double |
computeScoreNewContact(int type,
int group)
Compute the current score for the pair (call type, group).
|
double[][] |
getCallCoeffsTG()
Get the call waiting time coefficient matrix.
|
boolean[][] |
getCanServeGT()
Get the canServe skillset matrix.
|
double[][] |
getConstWeightsTG()
Get the constant weights matrix.
|
String |
getDescription() |
double[][] |
getGroupCoeffsGT()
Get the agent group idle time coefficient matrix.
|
double[][] |
getNumIdleCoeffsGT()
Get the number of idle agents coefficient matrix.
|
double |
getRoutingDelayConstTime()
Get the constant time interval used to check the delay events.
|
int |
getRoutingDelayMethod()
Get the routing delay method to be used.
|
RandomStream |
getStreamAgentSelection()
Get the random stream used for tie-breaking when choosing
an agent group.
|
RandomStream |
getStreamContactSelection()
Get the random stream used for tie-breaking when choosing
a call type.
|
WaitingQueueType |
getWaitingQueueType() |
boolean |
needsDetailedAgentGroup(int i) |
protected EndServiceEvent |
selectAgent(Contact contact)
Select a free agent to serve this contact.
|
protected EndServiceEvent |
selectAgentRerouting(Contact contact)
Same selection procedure as
selectAgent(umontreal.iro.lecuyer.contactcenters.contact.Contact) , but the
contact must be in the waiting queue (not a new call). |
protected DequeueEvent |
selectContact(AgentGroup agentGroup,
Agent agent) |
protected DequeueEvent |
selectWaitingQueue(Contact contact) |
void |
setCallCoeffsTG(double[][] c)
Change the call waiting time coefficient matrix, must be of size
K×I, where
K is the number of call types and I is the number of agent groups.
|
void |
setCanServeGT(boolean[][] b)
Change the canServe skillset matrix of the agent groups, must be a boolean
matrix of dimensions
I×K where I is the number of agent groups and
K is the number of call types.
|
void |
setConstWeightsTG(double[][] w)
Change the constant weight matrix, must be of dimensions
K×I, where
K is the number of call types and I is the number of agent groups.
|
void |
setGroupCoeffsGT(double[][] c)
Change the agent group idle time coefficient matrix, must be of dimensions
I×K where I is the number of agent groups and K is the number of
call types.
|
void |
setNumIdleCoeffsGT(double[][] c)
Change the number of idle agents coefficient matrix, must be of dimensions
I×K where I is the number of agent groups and K is the number of
call types.
|
void |
setRoutingDelayConstTime(double c)
Set the constant time interval to check the delay events.
|
void |
setRoutingDelayMethod(int m)
Set the delay method to be used when rescheduling the delay events
during the simulation.
|
void |
setStreamAgentSelection(RandomStream s)
Set the random stream for tie-breaking when selecting an
agent group.
|
void |
setStreamContactSelection(RandomStream s)
Set the random stream for tie-breaking when selecting an
call type.
|
addExitedContactListener, agentReroutingEventsIterator, beginService, checkFreeAgents, clearExitedContactListeners, contactReroutingEventsIterator, dequeued, endContact, endService, enqueued, exitBlocked, exitDequeued, exitServed, formatAgentGroups, formatWaitingQueues, getAgentGroup, getAgentGroupListener, getAgentGroups, getAgentReroutingEvents, getContactFactory, getContactReroutingEvents, getCurrentQueueSize, getDialers, getExitedContactListeners, getNeededWaitingQueueComparator, getNeededWaitingQueueStructure, getNumAgentGroups, getNumContactTypes, getNumWaitingQueues, getReroutingDelay, getReroutingDelay, getTotalQueueCapacity, getWaitingQueue, getWaitingQueueListener, getWaitingQueues, init, isKeepingReroutingEvents, mustClearWaitingQueue, newContact, notifyBlocked, notifyDequeued, notifyServed, removeExitedContactListener, restore, save, selectAgent, selectContact, selectWaitingQueue, setAgentGroup, setClearWaitingQueue, setClearWaitingQueues, setContactFactory, setKeepingReroutingEvents, setTotalQueueCapacity, setWaitingQueue, startDialers, toLongString, toString
public static final int ROUTING_DELAY_CONSTTIME
public static final int ROUTING_DELAY_EXPTIME
protected int routingDelayMethod
protected double routingDelayConstTime
protected int numTypes
protected int numGroups
protected boolean[][] canServe
protected double[][] constWeights
protected double[][] callCoeffs
protected double[][] groupCoeffs
protected double[][] numIdleCoeffs
protected RandomStream streamAgentSelection
protected RandomStream streamContactSelection
protected Event[] delayCheckEvent
public WeightRoutingIdleness.WeightRouterIdleness(int numTypes, int numGroups, double[][] constWeights, double[][] callCoeffs, double[][] groupCoeffs, double[][] numIdleCoeffs, boolean[][] canServe)
numTypes
- the number of call types.numGroups
- the number of agent groups.constWeights
- the constant weight matrix, if null then it will
use an all-zero matrix.callCoeffs
- the call waiting time coefficient matrix, if null then it
will use an all-one matrix.groupCoeffs
- the group idle time coefficient matrix, if null then it
will use an all-one matrix.numIdleCoeffs
- the number of idle agents coefficient matrix, if null
then it will use an all-zero matrix.canServe
- public boolean needsDetailedAgentGroup(int i)
needsDetailedAgentGroup
in class Router
public WaitingQueueType getWaitingQueueType()
getWaitingQueueType
in class Router
public String getDescription()
getDescription
in class Router
public void setStreamAgentSelection(RandomStream s)
s
- the random stream for tie-breaking agent groups.public void setStreamContactSelection(RandomStream s)
s
- the random stream for tie-breaking call types.public RandomStream getStreamAgentSelection()
public RandomStream getStreamContactSelection()
public void setRoutingDelayMethod(int m)
m
- the routing delay method to be used.public int getRoutingDelayMethod()
public void setRoutingDelayConstTime(double c)
setRoutingDelayMethod(int)
is
set to ROUTING_DELAY_CONSTTIME
.c
- the time interval to check the delay events.public double getRoutingDelayConstTime()
public void setConstWeightsTG(double[][] w)
w
- the new constant weights matrix.public double[][] getConstWeightsTG()
public void setCallCoeffsTG(double[][] c)
c
- the new call waiting time coefficient matrix.public double[][] getCallCoeffsTG()
public void setGroupCoeffsGT(double[][] c)
c
- the new agent group idle time coefficient matrix.public double[][] getGroupCoeffsGT()
public void setNumIdleCoeffsGT(double[][] c)
c
- the new number of idle agents coefficient matrix.public double[][] getNumIdleCoeffsGT()
public void setCanServeGT(boolean[][] b)
b
- the new canServe skillset matrix.public boolean[][] getCanServeGT()
protected double computeScore(int type, int group)
Double.NEGATIVE_INFINITY
.
Implementation note : This score function should not be used when a new call just arrived,
because new calls do not enter the waiting queue immediately on arrival.
For new call, use the score functio computeScoreNewContact(int, int)
.type
- the call type.group
- the agent group.protected double computeScoreNewContact(int type, int group)
Double.NEGATIVE_INFINITY
.
Implementation note : This score function is adapted to compute the score
of a new call only.type
- the call type of the new call.group
- the agent group.protected EndServiceEvent selectAgent(Contact contact)
Note : This method should be called only when a new call just arrived. It will create a routing delay check event if necessary.
selectAgent
in class Router
contact
- the contact to be served.protected EndServiceEvent selectAgentRerouting(Contact contact)
selectAgent(umontreal.iro.lecuyer.contactcenters.contact.Contact)
, but the
contact must be in the waiting queue (not a new call).
The main difference is that since the contact is not a new call, this
method does not create a routing delay check event.
This function is called by the routing delay check event.
The new routing delay check event is created by the current delay check.contact
- the contact to check for re-routingnull
if no idle agent foundprotected DequeueEvent selectWaitingQueue(Contact contact)
selectWaitingQueue
in class Router
protected DequeueEvent selectContact(AgentGroup agentGroup, Agent agent)
selectContact
in class Router
protected void checkWaitingQueues(AgentGroup agentGroup)
checkWaitingQueues
in class Router
protected double computeDelayCheckTime(int callType, boolean firstDelay)
Double.POSITIVE_INFINITY
which signifies infinite time before the next routing check.callType
- the call type to check for reroutingfirstDelay
- if we are setting the first routing check first (of a new call),
then we need to use a different score function.Double.POSITIVE_INFINITY
if
no more routing check to do.