Estoy tratando de agregar un Endbeforestartconstraint a mi contrained problema de programación. Sin embargo, me aparece un error diciendo que mi final beforestart no es un tipo de matriz. Yo no entiendo de esto, ya que casi copiado la restricción y los datos de la sched_seq ejemplo en CPLEX, sólo he cambiado los números enteros.
Lo que trato de lograr con la restricción, es que las tareas 3 y 1 se realizará antes de la tarea 2, se iniciará.
Cómo puedo arreglar la matriz de error para esta restricción?
Por favor buscar debajo de las correspondientes partes de mi 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;