You are consulting for a telecom company that dispatches technicians to perform various tasks for customers, ranging from equipment installations and setups to repairs. Considering various constraints such as:
- Technician availability
- Skillset matching
- Customer time window
- Service priority
- Start and return of technicians to the central depot
- Limited resources/vans
The goal is to decide:
- Which technicians are assigned to which customers and in what sequence?
- How to allocate the limited resources, ensuring each technician has access to a van?
We use a two-step solution approach, using Mathematical Optimization (MO) in both, to solve this problem.
- The first model is called Technician Routing where we decide which technicians are assigned to which customers and in what sequence. This model is described and solved in the technician_routing notebook.
- The second model is called Resource Assignment where we decide which technicians should be assigned to which vans.
This model is described and solved in the
resource_assignment
notebook.- There are two versions of this notebook: a partial version (resource_assignment) that can be used for teaching, and one with the complete description, formulation, and the code (resource_assignment_complete).
- The data-Sce0.xlsx is the input used for the Technician Routing model.
- The routes.csv and orders.csv are the outputs of Technician Routing model
and are used as inputs for the Resource Assignment model. Of course, you can run the
technician_routing
notebook and or even modify it as you please to get new results. Ensure the format of the output is similar in case you like to use theresource_assignment
notebook afterward.
The model size is intentionally small to ensure even those without access to Gurobi license can run the model (check out License Requirement section for more info about the license).
If you like to access the notebooks in Google Colab, click:
Note that you must sign in with a Google account to be able to run the code in Colab.
The problem is modeled using Gurobi Python API. So, a Gurobi license is required to run this model.
If you don't have a license, you can request a free commercial evaluation license
or a free academic license here.
The data used in the models is small enough to run the model with gurobi restricted license
(available via pip install gurobi
as shown in the notebook).