Overview | Package | Class | Tree | Deprecated | Index | Help
| ContactCenters V. 0.9.9.
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES

## 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

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 (k, i) and (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 (k, i) specifies how contacts prefer agents, and is used for agent selection. The second matrix, defining (i, k), specifies how agents prefer contacts, and is used for contact selection. In many cases, it is possible to have (i, k) = (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.

Overview | Package | Class | Tree | Deprecated | Index | Help
| ContactCenters V. 0.9.9.
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES

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