Moje distance matrix v mé žádné překrytí omezení nezdá se, že práce v mém modelu výsledek. Jsem formuloval distanční matice pomocí n-tice nastavit. Zkoušel jsem to ve 2 různých způsobů, jak lze vidět v kódu. Obě n-tice, nastaví se zdají být správné a matice vzdáleností je přidáno v noOverlap omezení pro dvar sekvence.
Nicméně nevidím přidanou přechod vzdálenost mezi produkty v optimální výsledky. Míst se zdá, aby i nadále ve stejné době, kdy práce je dokončena. Namísto čekání na přechodnou dobu. Rád bych tento přechod matrix držet jak pro stroj 1 stroj 2.
Může mi někdo říct, co jsem udělal špatně v mém modelu formulace? Díval jsem se do příkladů, ale oni se zdají být konstruovány stejným způsobem. Tak já nevím, co dělám špatně.
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;
``