Originally posted by: stevedwards
Hi there,
I am interested in understanding whether there is a recommended way to enforce serial schedule generation schemes in CP Optimizer (at least for finding an initial feasible solution).
I'll refer to job shops with makespan objective to make the question explicit.
So say you have a set of jobs J and each job consists of an ordered set of m Operations. So (i,j) refers to the i'th operation of the j'th job. A serial schedule generation scheme (SSGS) is essentially a priority rule heuristic that schedules all the operations from one job before trying to schedule the operations from the other jobs. Whereas a parallel schedule generation scheme (PSGS) is time-oriented, i.e. for a time 't', keeps track of the operations that have been completed C(t), processing P(t), and candidates C(t), and then selects candidates based on some evaluation scheme. From what I have read / understand CP Optimizer's default search works like a very clever / general PSGS.
Generally speaking (in my experience) PSGSs obtain better results than SSGSs. However sometimes there are a number of practical benefits of SSGSs, e.g., partial schedules are feasible for jobs that are completed, when feasibility is an issue (e.g. many maximum time-lags exist) SSGSs are useful for finding feasible solutions quicker, etc.
Hence returning to my question, is there a recommended way to encourage CP Optimizer to use SSGSs? I can think of two ways,
1. Search Phases - addSearchPhase(J1, J2, J3). However this feels a bit too hard coded and often it is impossible to know which job to schedule before the other.
2. Optional Interval Variables - Essentially make all operations optional, add presenceOf constraints to ensure that if one operation from a job is present then all of the operations must be present, and then add a penalty to the objective function if a job is absent which would account for simply scheduling absent jobs one by one at the end of the schedule.
Is there a better way that I am missing?
#CPOptimizer#DecisionOptimization