Mon matrice de distance dans mon pas de chevauchement de contrainte ne semble pas fonctionner dans mon modèle de résultat. J'ai formulé la matrice de distance par le biais d'un tuple ensemble. J'ai essayé de 2 façons différentes comme on peut le voir dans le code. Les deux tuple ensembles semblent être correct et de la matrice de distance est ajouté dans le noOverlap contrainte pour le dvar séquence.
Néanmoins, je ne vois pas la transition ajoutée de la distance entre les produits dans les meilleurs résultats. Emplois semblent continuer dans le même temps, lorsqu'un travail est terminé. Au lieu d'attendre une période de transition. Je voudrais que cette matrice de transition de tenir à la fois pour la machine 1 et 2 de l'ordinateur.
Quelqu'un pourrait-il me dire ce que j'ai fait de mal dans ma formulation du modèle? J'ai regardé dans les exemples, mais ils semblent être construit de la même manière. Donc je ne sais pas ce que je fais de mal.
mod.
using CP;
// Number of Machines (Packing + Manufacturing)
int nbMachines = ...;
range Machines = 1..nbMachines;
// Number of Jobs
int nbJobs = ...;
range Jobs = 1..nbJobs;
int duration[Jobs,Machines] = ...;
int release = ...;
int due = ...;
tuple Matrix { int job1; int job2; int value; };
//{Matrix} transitionTimes ={<1,1,0>,<1,2,6>,<1,3,2>,<2,1,2>,<2,2,0>,<2,3,1>,<3,1,2>,<3,2,3>,<3,3,0>};
{Matrix} transitionTimes ={ <i,j, ftoi(abs(i-j))> | i in Jobs, j in Jobs };
dvar interval task[j in Jobs] in release..due;
dvar interval opttask[j in Jobs][m in Machines] optional size duration[j][m];
dvar sequence tool[m in Machines] in all(j in Jobs) opttask[j][m];
execute {
cp.param.FailLimit = 5000;
}
// Minimize the max timespan
dexpr int makespan = max(j in Jobs, m in Machines)endOf(opttask[j][m]);
minimize makespan;
subject to {
// Each job needs one unary resource of the alternative set s (28)
forall(j in Jobs){
alternative(task[j], all(m in Machines) opttask[j][m]);
}
forall(m in Machines){
noOverlap(tool[m],transitionTimes);
}
};
execute {
writeln(task);
};
dat.
nbMachines = 2;
nbJobs = 3;
duration = [
[5,6],
[3,4],
[5,7]
];
release = 1;
due = 30;
``