I would model this as a [Constraint Satisfaction Problem][1]Constraint Satisfaction Problem where your goal is to find a configuration of assignments that fulfills your requirements. This is generally an NP-complete problem, but depending on the size of your data set it could be possible to find a solution.
Here's a description of how to go about solving that problem with a [Backtracking][2]Backtracking-style algorithm
- Let W be a set of work assignments such as { W1, W2, ..., Wn }
- For every assignment, assign the worker most suitable to it (as per requirement 2)
- For all remaining assignments, attempt to schedule it to the highest priority available worker
- Continue to the next unassigned assignment until they are all assigned or until no workers are available at that time
- If no solution was found, go back one step and try again with the next available worker
It's very similar to how Sudoku grids are solved, which are often modeled as CSPs themselves. This is only possible because assignments are not prerequisites to each other according to your description, which makes it less relevant to model the problem as a scheduling problem.
Good luck! [1]: http://en.wikipedia.org/wiki/Constraint_satisfaction_problem [2]: http://en.wikipedia.org/wiki/Backtracking