Snažím se přidat Endbeforestartconstraint mé contrained programování problém. Nicméně, jsem chybová říct, že můj konec beforestart není typu pole. Nechápu to, protože jsem skoro kopíroval omezení a data z sched_seq například v CPLEX, jen jsem to změnil na celá čísla.
Co jsem se snaží dosáhnout omezení, je to úkol 3 úkol 1 bude provedena před úkol 2 začne.
Jak mohu opravit řadu chyb za toto omezení?
Níže naleznete příslušné části mého kódu
tuple Precedence {int pre;int post;};
{Precedence} Precedences = {<3,2>,<1,2>};
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]
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]);
}
// No overlap on machines
forall(j in Jobs)
forall(p in Precedences)
endBeforeStart(opttask[j][p.pre],opttask[j][p.post]);
forall(m in Machines){
noOverlap(tool[m],transitionTimes);
}
};
execute {
writeln(task);
dat.
nbMachines = 2;
nbJobs = 3;
duration = [
[5,6],
[4,4],
[5,8]
];
release = 1;
due = 30;