Je veux essayer d'ajouter une matrice de distance à un simple problème d'ordonnancement dans CPLEX à l'aide de CP cependant je n'arrive pas à obtenir ce sans une erreur dans mon nouveau dvar séquence.
Je suis en train d'essayer d'inclure des temps de configuration entre les produits 1, 2 et 3, qui dépendent de la séquence que les produits sont prévues. Le temps de configuration pour les différentes séquences sont donnés dans une distancematrix.J'ai essayé de définir la matrice de distance comme un n-uplet triplet dans le fichier mod et comme une matrice dans le fichier dat mais les deux options ne fonctionnent pas pour moi.
La nouvelle configuration dvar séquence pour ce temps d'installation est appelé le programme d'installation, qui devrait représenter la séquence de tous les emplois que J sur une machine. Cependant, je reçois l'erreur que " la fonction noOverlap dvarsequence,[plage][gamme] n'existe pas. Je ne comprends pas ce que je fais de mal, car j'ai défini le dvar seq et la matrice ainsi dans ma compréhension, il doit travailler
Quelqu'un pourrait-il m'aider ici? Bloqué avec ce problème pendant un certain temps maintenant.
Veuillez trouver ci-dessous le mod. et dat. les fichiers.
Je vous remercie à l'avance! 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 = ...;
int distanceMatrix[1..nbJobs][1..nbJobs] = ...;
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];
dvar sequence setup[j in Jobs] in all (m in Machines,j in Jobs)opttask[j][m];
execute {
cp.param.FailLimit = 5000;
}
// Minimize the total processing cost (24)
dexpr int day = sum(j in Jobs, m in Machines) duration[j][m] * presenceOf(opttask[j][m]);
minimize day;
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]);
noOverlap(setup[j],distanceMatrix);
}
// No overlap on machines
forall(m in Machines){
noOverlap(tool[m]);
}
// forall(m in Machines,j in Jobs)
};
execute {
writeln(task);
};
dat.
nbMachines = 2;
nbJobs = 3;
duration = [
[5,1],
[3,4],
[5,7]
];
release = 1;
due = 30;
distanceMatrix = [
1:[0,2,0],
2:[4,0,6],
3:[0,2,0]
]};