Chcem skúsiť pridať matica vzdialeností na jednoduché plánovanie problém v CPLEX pomocou CP však nemôžem spravovať, aby si to v bez chyba v mojom novom dvar postupnosť.
Snažím sa, aby nastavenie časov medzi produkty 1,2 a 3, ktoré závisia od sekvencie, že výrobky sú naplánované. Nastavenie časy pre jednotlivé sekvencie sú uvedené v distancematrix.Snažil som sa definujú vzdialenosť matica n-tice triplet v mod súbor a ako matrice, v súbor dát, ale obe možnosti nie je práca pre mňa.
Nové nastavenie dvar poradí, toto nastavenie času sa nazýva setup, a mali by predstavovať poradia každý pracovný J na stroj. Avšak, som sa chybové hlásenie, že " funkcia noOverlap dvarsequence,[rozsah][rozsah] neexistuje. Nechápem, čo robím zle, pretože som definoval dvar nasl a matice, takže v mojom chápaní by to malo fungovať
Mohol by mi niekto pomôcť sa tu? Zasekol sa s týmto problémom na chvíľu teraz.
Nižšie nájdete mod. a dat. súbory.
Vopred ďakujeme! 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]
]};