Algorithm to schedule employees into days I'm trying to build a scheduling app for a friend, but am stuck on how to sort the employees.
I have three holidays each with their own employee_need:
thanks_giving: 2
christmas: 3
new_years_eve: 2
I have employees who have a predetermined number of days they will work. The sum of the employee’s predetermined work days will always add up to the sum of the three holiday’s employee_need. They also have ranked the holidays by preference, which should guide the scheduling process.
The data looks something like this:
Polly:
days_to_work: 1
preferences: [christmas, new_years_eve, thanks_giving]
Stan:
days_to_work: 2
preferences: [thanks_giving, christmas, new_years_eve]
etcetera.
Right now my process of sorting is to

Fill each holiday with a list of all employees.

Loop through the employees, starting with those who have the most days off.

Loop through the employee's preferences and pull them from the one they most desire to have off that also has room for them to be taken off

Continue looping until the days are properly scheduled.  If there is room to remove them from that day, I do so, until they are working the number of days they are supposed to.


The algorithm works a decent amount of time, but I really need it to work all the time.
Is anyone familiar with this kind of problem, and can point me toward a better methodology?
This looks a lot like the stable marriage problem, itself related to the problem of matching in biparftite graphs. There are very efficient algorithms to solve both problems.