Chci, aby se pokusili přidat distanční matice na jednoduché plánování problém v CPLEX pomocí CP nicméně nemohu se dostat to bez chyby v mé nové dvar sekvence.
Snažím se zahrnují nastavení časů mezi výrobky 1,2 a 3, které jsou závislé na pořadí, které produkty jsou plánované. Nastavení časů pro různé sekvence jsou uvedeny v distancematrix.Snažil jsem se definovat vzdálenost matrix jako n-tice trojice v mod souboru a jako matice v souboru dat, ale obě možnosti nejsou pro mě.
Nové nastavení dvar posloupnost pro tato nastavení času se nazývá setup, a měly by představovat posloupnost každé úlohy J na stroji. Nicméně, se zobrazí chyba, že funkce noOverlap dvarsequence,[rozsah][range] neexistuje. Já nechápu, co dělám špatně, co jsem definoval dvar násl. a matice, takže v mém chápání by to mělo fungovat
Mohl by mi někdo pomoci ven? Přilepená s tímto problémem na chvíli teď.
Níže naleznete mod. a dat. soubory.
Děkuji předem! 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]
]};