# What AI technique should I use to assign a person to a task?

I'm trying to learn AI and thinking to apply it to our system. We have an application for the translation industry. What we are doing now is the coordinator $$C$$ assigns a file to a translator $$T$$. The coordinator usually considers these criteria (but not limited to):

• the deadline of the file and availability of a translator
• the language pair that the translator can translate
• is the translator already reached his target? (maybe we can give the file to other translators to reach their target)
• the difficulty level of the file for the translator (basic translation, medical field, IT field)
• accuracy of translator
• speed of translator

Given the following, is it possible to make a recommendation to the coordinator, to whom she can assign a particular file?

What are the methods/topics that I need to research?

(I'm considering javascript as the primary tool, and maybe python if javascript will be more of a hindrance in implementation.)

In addition to suggesting a translator, we are also looking into suggesting the "deadline of the translator". Basically, we have "deadline of the customer" and "deadline of the translator"

The reason for this is that, if the translators are occupied throughout the day, it makes sense to suggest it to a busy translator but allow him to finish it until next day.

What you have could be well described as a Task Allocation problem, which is studied as part of the planning subfield of AI. Chapters 10 & 11 of Russell & Norvig provide a good overview of this area, although I think they don't talk too much about Task Allocation in particular.

There are two basic approaches to this problem: centralized approaches, and decentralized approaches.

In centralized approaches, the properties of each task (or sub-task) and the skills of each processing entity are recorded in a central database. The task is phrased as an optimization problem. For example, given the skills of the processors and the tasks' types, find the schedule that minimizes average processing time (or cost, or usage of rare-resource types, or whatever you're interested in). Common approaches include phrasing the optimization task as a linear-programming problem; phrasing the problem as a graph and using something like the graphplan algorithm; or phrasing the problem as a constraint satisfaction problem and using some kind of heuristic-guided local search.

There are all kinds of other more modern techniques too. I'm not aware of a survey paper for translation tasks in particular, but there are lots of examples in robotics and distributed computing.

Although good AI techniques exist for scheduling the task, they are predicated on being able to quantify the tasks' properties and the abilities of the agents, and on the translators accepting the decisions of the system. If you want an interactive system, you may need to look at techniques from Natural Language Processing. The work on Mixed Initiative Scheduling Systems might also be relevant if you have to go that route.