ContactCenters
V. 0.9.9.

Package umontreal.iro.lecuyer.contactcenters.router

Contains the contact routing facilities.

See:
          Description

Interface Summary
ExitedContactListener Represents an exited-contact listener which gets notified when a contact exits the system.
RankFunction Represents a function computing a vector of ranks for a given contact, for the OverflowAndPriorityRouter router.
RoutingStageInfo Represents a stage for routing, with a minimal waiting time, and two rank functions for agent and contact selections.
 

Class Summary
AgentGroupSelectors Provides some convenience methods to select an agent from a list of agent groups.
AgentReroutingEvent Represents an event happening when the router tries once more to affect a contact to an agent.
AgentsPrefRouter Performs agent and contact selection based on user-defined priorities.
AgentsPrefRouterWithDelays Extends the agents' preference-based router to support delays for routing, and allow priority to change with waiting time.
ContactReroutingEvent Represents an event happening when the router tries to reroute a queued contact to an agent, or another queue.
EnqueueEventWithRerouting Represents an event that queues a contact, and schedules an additional event for supporting rerouting.
ExpDelayRouter Represents a router using the expected delay to assign agent groups to new contacts.
LocalSpecRouter This router implements the local-specialist policy which tries to assign contacts to agents in the same region and prefers specialists to preserve generalists.
LongestQueueFirstRouter This extends the queue priority router to select contacts in the longest waiting queue.
LongestWeightedWaitingTimeRouter This extends the queue priority router to select contacts with the longest weighted waiting time.
OverflowAndPriorityRouter Represents a routing policy allowing contacts to overflow from one set of agents to another, and agents to pick out queued contacts based on priorities that can change at predefined moments during the waiting time.
OverflowAndPriorityRouter.RoutingInfo Represents information about the routing for a particular contact.
QueueAtLastGroupRouter This router uses a queue-at-last-group policy.
QueuePriorityRouter This skill-based router with queue priority ranking is based on the routing heuristic in [14], extended to support queueing.
QueueRatioOverflowRouter This router sends new contacts to agent groups using a fixed list, but for each agent group, routing occurs conditional on the expected waiting time.
ReroutingState Represents state information for contact or agent rerouting.
Router Represents a contact router which can perform agent and contact selections.
RouterState Represents state information for a router.
RoutingTableUtils Provides some utility methods to manage routing tables represented using 2D arrays.
SingleFIFOQueueRouter This extends the queue priority router to implement a single FIFO queue.
WaitingQueueSelectors Provides some convenience methods for selecting a waiting queue from a list of indices.
 

Enum Summary
AgentSelectionScore Parameter indicating how the default agent selection score computed by AgentsPrefRouter.getScoreForAgentSelection(Contact,AgentGroup,Agent) is computed.
ContactSelectionScore Parameter indicating how the default contact selection score computed by AgentsPrefRouter.getScoreForContactSelection(AgentGroup,DequeueEvent) is computed.
WaitingQueueStructure Possible data structures for waiting queues.
WaitingQueueType Represent possible roles of waiting queues for routing policies.
 

Package umontreal.iro.lecuyer.contactcenters.router Description

Contains the contact routing facilities. A router, called an automatic call distributor (ACD) for call centers, can be any class listening to new contacts, and assigning them to agent groups or adding them to waiting queues. The router listens to service terminations to assign queued contacts to free agents and to waiting queue events for statistical collection and overflow support.

This package provides the Router base class as a basis to implement routers using almost arbitrary policy. It can listen to new contacts and interact with waiting queues and agent groups, which makes it a central point in any contact center. For contacts to be counted correctly during statistical collection, an exited-contact listener can also be registered with a router which knows exactly when contacts abandon, are blocked, and are served. Figure 3 gives a UML diagram summarizing how the router is connected to the other parts of the system.

Figure 3: UML diagram describing the routing of contacts
\begin{figure}\begin{center}
\begin{tikzpicture}[shape=rectangle,fill=gray!20,>=...
...end,left] {0,*}
(AgentListener);
\end{tikzpicture}\end{center}\par\end{figure}

The routing policy itself must be implemented in a subclass by defining fields for the data and implementing or overriding methods for the routing logic. The router needs schemes for agent and contact selections, and it can optionally clear waiting queues when the contact center does not have idle or busy agents capable of serving the waiting contacts. Algorithms to process dequeued and served contacts may also be needed in complex systems supporting overflow or service by multiple agents.

This package provides a few predefined policies inspired from [20] and [14]. These policies do not cover all possible scenarios, but new policies can easily be added.

A first class of policies uses ordered lists as follows. For each contact type k, the type-to-group map defines an ordered list ik, 0, ik, 1,… of agent groups. For each agent group i, the group-to-type map defines an ordered list ki, 0, ki, 1,… of contact types. These lists indicate which agent groups can serve a contact of type k and which contact types can be served by agents in group i, respectively. The order of the elements can be used to define priorities. This data structure prevents contact types or agent groups from sharing the same priority, and may produce inconsistent routing policies. For example, a bad router could assign new contacts of type k to agents in group i without pulling contacts of type k from queues when an agent in group i becomes free. Checker methods are provided in RoutingTableUtils to detect this problem, but they need to linearly scan the routing tables. As a result, they must be manually called by the user to avoid decreasing the performance.

In a second type of policy, matrices of ranks assign ranks or priorities $ \rTG$(k, i) and $ \rGT$(i, k) to contacts of type k served by agents in group i. If the rank is , i.e., Double.POSITIVE_INFINITY, contacts of type k cannot be served by agents in group i. Otherwise, the smaller is the rank, the higher is the priority of contacts of type k for agents in group i. The matrix defining $ \rTG$(k, i) specifies how contacts prefer agents, and is used for agent selection. The second matrix, defining $ \rGT$(i, k), specifies how agents prefer contacts, and is used for contact selection. In many cases, it is possible to have $ \rGT$(i, k) = $ \rTG$(k, i) and specify a single matrix of ranks. This structure allows equal priorities to exist, but routing policies are more complex. When ranks are equal, a secondary algorithm must be used for tie breaking, reducing the performance of the simulator.

The package also supports the incidence matrix, which assigns a boolean value m(i, k) for each contact types and agent groups. m(i, k) is true if and only if contacts of type k can be served by agents in group i. Such a matrix is not used for routing because it does not encode any priority, but the package provides methods to convert it to a type-to-group, group-to-type, or matrix of ranks.

The package also provides some helper classes and methods to ease the implementation of routers with complex routing policies. These methods can test the consistency of routing information data structures, and perform conversions from one structure to another. They can also help in contact and agent selections.


ContactCenters
V. 0.9.9.

To submit a bug or ask questions, send an e-mail to Richard Simard.