So, I’ve got kind of a crazy difficult (to me anyway), and I think the smartest people in the world are just the ones to solve it or at least point me in the right direction.
I am creating a Web application that allows customers to automatically book their own appointments online and assigns them to technicians. Different technicians have different skills. So, for instance, an HVAC tech might be able to install or size an HVAC unit, but not repair it. A plumber might be able to do.electrician work.
So if there were an electrical job, we have so many technicians who could do it. The problem is how to assign which jobs to whom. Basically, I need an algorithm that calculates the shortest possible routes for the technicians.
Sounds pretty simple, right? Yeah, I guess so.
…oh but wait, there is one more thing though. Each project takes a certain number of hours with a certain variance, and there is a limited time span to see each customer. So there are morning (8a-12p), afternoon (12p-4p), evening (4p-8p), and night appointments. So a plumber might have a call that takes two hours, 15 minutes, one hour, and 45 minutes in one morning (including travel time).
The customers will also provide a variety of time slots that will work for them. So a customer could select a morning appointment on Friday afternoon appointment on Tuesday and a forth.
So, we’ve got multiple customers with multiple.convenient appointment times, multiple technicians with different skills, and different lengths of time per appointment for which we need routes.
Then we’ve got to make sure that we’re not wasting skill. So we wouldn’t want a plumber/electrician doing an electrician call, when we’ve got an extra plumber not assigned any work.
As an added bonus feature, it needs to update in real time, every time someone books an appointment.
We’ve also got customers who will need a specific time, certain jobs that will need a specific tech (i.e. for a service failure), and these will be set by a human, and the system will need to work around it.