I'm facing a problem I'm not sure how to approach. I have to generate a calendar for employees, each of them having specific work constraints (some personal, some common)
What I'm working with :
- I have Doctors
- Each doctor has to work 5 day/week.
- Each doctor has to work 1 night/week
- Each doctor has to work an equal amount of nights compared to other doctors (or as close as possible)
- Each doctor has to work an equal amount of thursday nights and sunday nights compard to other doctors (or as close as possible)
- Some doctors can't work certain days/nights (input by user)
- Some doctors would like to work certain days/nights (input by user)
- Some doctors would like to not work certain days/nights (input by user)
The user in question is the person dealing with the calendar, I'm trying to build a solution that will automatically generate a calendar that obeys all constraints. The solution is just a big settings input "add doctors" and "add constraints" for each doctor, then a "generate calendar" button. It's really basic for the user.
My problem :
I'm not sure how to generate the actual planning, I've been reading about Neural Networks, Genetic Algorithms, and so on, and they all seem kind of the right solution but also not really.
When I look at GA's, they're made to find a solution with a given population (my problem), but the starting population has to already obey the given set of constraints, which would then be optimized. In that case, my starting population is already the solution. I don't need it to be "optimized". It doesn't matter that a single person works 3 monday nights in a row, as long as it's actually correct and that others work the same amount, that means others will also work 3 monday nights at some point and it's fine. Which makes me think that GA's are too "advanced" for me, as my problem is already solved with the starting point of a GA.
But then again, GA's really really looks like they're made for this, so I might not be understanding it correctly ?
Anyway, as I've never used GAs (or neural networks, or anything of the kind), I'd like to be sure I'm going for the correct approach before engaging in a learning curve like that one.
My question :
What do you think is a good approach / algorithm / technique for a problem like mine? GA's? Neural networks? Something else entirely different?
I'm all ears and open for more details if necessary, but I think i've made myself pretty clear :)