Take OptaPlanner's "Project job scheduling" example and adjust it accordingly:
- "there are 1 to n projects": The "Project job scheduling" example already has multiple projects.
- "Each project has its own deadline." Add a hard constraint that the last job of a project must end before the project deadline. Make sure penalize the amount of time it's too late (see "score trap" in docs).
- "sequenced series of jobs": configure the precedence constraints accordingly
- "Any given job can appear 0 to many times in the sequence": each of those times is a separate job in the example-terminology.
- "Each project shares global resources, namely employees A, B, and C": global, renewable resources
- Solutions only need to be feasible, not optimal: Yet, I 'd still keep using the soft constraint to minimize the makespan.
Note: OptaPlanner 6.0 solves the "Project job scheduling" example pretty good already, but improvements planned for 6.1 are likely to improve results even more.