Snažím sa pridať Endbeforestartconstraint na moje contrained programovania problém. Avšak, ja sa zobraziť chybové hovorí, že môj koniec beforestart nie je pole typu. Nechápem to, ako som takmer kopíroval obmedzenia a údaje z sched_seq napríklad v CPLEX, len som ho zmenili na celé čísla.
To, čo sa snažím dosiahnuť s obmedzení je, že úloha 3 úloha 1 sa vykonáva pred úlohou 2 začne.
Ako môžem opraviť pole chyby pre toto obmedzenie?
Nižšie nájdete príslušné časti môj kód
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;