An efficient algorithm is presented for selecting an agent to service a
task in a skills-based routing system. A set X is determined of all
states of the boolean variables that contain the required skills for a
task. A resume table of available agents is built, organized by the
states of the N variables; each agent is represented in each state that
includes all skills possessed by the agent. All available and qualified
agents are determined from the resume table; those agents associated with
a state of the resume table outside of the set X are disqualified. An
agent is selected from those remaining. Preferably, an agent is selected
having a minimum qualification level to service the task. One preferred
way of doing this is to subtract from the number of terms in a canonical
form of the required skills expression a number equal to the number of
times the agent appears in the set of states X and picking an agent with
the lowest result. In the preferred embodiment, however, proficiency
levels of each required skill are taken into account in making the final
selection.