Good afternoon, I find myself solving a group shop scheduling problem, which is a hybrid model between a Job Shop and an Open Shop, with the peculiarity that there are groups of jobs, with setup times dependent on the sequence and with the following characteristics :
- Operations must satisfy precedence restrictions if placed in different groups. (as in a Job Shop)
- Operations that are not subject to precedence restrictions and can be processed in any order are placed in the same group. (as in an Open Shop)
- All group operations must be scheduled before any operation of the next group begins.
So far I carry this advance in the code:
using CP;
int nbJobs = ...;
int nbMchs = ...;
int timeLimit = ...;
range Jobs = 0..nbJobs-1;
range Mchs = 0..nbMchs-1;
int setup[Mchs][Jobs][Jobs] = ...;
int OpDurations[j in Jobs][m in Mchs] = ...;
int W [j in Jobs] = ...;
int duedate [j in Jobs] = ...;
tuple triplet { int i; int j; int sij; }
{triplet} M[m in Mchs] = { <i,j,setup[m][i][j]> | i,j in Jobs };
dvar interval itvs [j in Jobs][m in Mchs] size OpDurations[j][m];
dvar sequence mchs [m in Mchs] in all(j in Jobs) itvs[j][m] types all(j in Jobs) j;
dvar sequence jobs [j in Jobs] in all(m in Mchs) itvs [j][m] types all(m in Mchs) m;
dexpr int T[j in Jobs] = maxl(0, (endOf(itvs[j][nbMchs])-duedate[j]));
execute {
cp.param.TimeLimit = timeLimit;
}
minimize sum(j in Jobs) W[j]*T[j];
subject to {
forall (j in Jobs)
noOverlap(jobs[j]);
forall (j in Jobs, o in 0..nbMchs-2)
endBeforeStart(itvs[j][o], itvs[j][o+1]);
forall (m in Mchs)
noOverlap(mchs[m],M[m]);
}
My consultation is that way I can make the restriction that allows me to set the scheduling of working groups with the aim of minimizing the weighted delay.
------------------------------
Natalia Peralta
------------------------------
#DecisionOptimization