 Hello, I'm Radvan Sinek. In this video, I'm going to show you how to schedule incoming calls in a call center using an open source AI constraint solver, the Optaplanner. Let's imagine a call center of a large insurance company. Customers call here to seek help with their questions and problems from the call center agents. The agents need to have certain skills to be able to help them. They need to speak several languages and they also have to understand the products the insurance company offers. If you take a look on the left, the first column shows the call center agents. For example, we have Anne here who can speak English and understands life insurance and property insurance. Beth speaks both English and Spanish and specializes in car insurance. Now let me start solving and the simulation of incoming calls. Notice that we don't rerun solving. Every incoming call is incorporated into the schedule real time. Calls are assigned to agents based on matching skills. For example, here both calls are about property insurance and customers would like to speak English. That's something Anne can handle. When a call finishes, the agent should pick up the next waiting call like here. Some call may actually take longer and in that case we need to recalculate the estimated waiting time. Or on the contrary, some customers may not be willing to wait any longer so they cancel the call. And again, we need to incorporate it into the schedule. All these events, called problem fact changes, are applied to the working solution while OptaPlanner continues to further improve the schedule. What constraints drive this use case? Let's have a look. This is the constraint streams provider for this quick start and it's quite simple. It consists just of two constraints. The first one, called no required skill missing, makes sure that calls are redirected to agents with matching skills. We penalize the solution for the number of skills that the agent who is supposed to handle the call is missing. And this is a hard constraint. The second constraint is a soft constraint that balances the incoming calls between agents. We filter the last call of every agent and penalize for the square of its estimated waiting time in seconds. This way, OptaPlanner keeps the queues of waiting calls as short as possible, of course still respecting the required skills. Now let me show you how balancing of incoming calls works in practice. Notice that both ELSA and Francis speak Spanish and one of their specializations is property insurance. So if we cancel a couple of calls, ELSA, the waiting calls of Francis are redirected to ELSA. Thank you for watching. If you want to learn more about OptaPlanner, please visit www.optiplanner.org.