Estou tentando adicionar um Endbeforestartconstraint para o meu contrained problema de programação. No entanto, recebo um erro dizendo que o meu fim beforestart não é um tipo de matriz. Eu não entendo isso como eu quase copiado a restrição e dados do sched_seq exemplo, no CPLEX, eu apenas mudei para números inteiros.
O que eu tento fazer com a restrição, é que a tarefa 3 tarefa e 1 será executada antes da tarefa 2 vai começar.
Como posso corrigir a matriz de erro para essa restrição?
Por favor, veja abaixo as partes relevantes do meu código
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;