Matriz de problema con endbefore inicio en CPLEX

0

Pregunta

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;
2

Mejor respuesta

1

Hay varios errores en el modelo, en rangos o invertida índices. También, la próxima vez, por favor enviar un programa completo que muestra el problema, no sólo parcial, esto puede ayudarle a obtener más rápido respuestas. Un programa corregido:

using CP;

int nbMachines = 2;
int nbJobs = 3;


range Machines = 0..nbMachines-1;
range Jobs = 0..nbJobs-1;

int duration[Jobs][Machines] = [
        [5,6], 
        [4,4],
        [5,8]
            ];

            
int release = 1;
int due = 30;

tuple Precedence {int pre;int post;};

{Precedence} Precedences = {<2,1>,<0,1>};

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(m in Machines)
    forall(p in Precedences)
    endBeforeStart(opttask[p.pre][m],opttask[p.post][m]);
};

execute {
  writeln(task);
  }
2021-11-26 11:06:37
0

Usted debe tener valores en p.pre o p.post que están fuera de la matriz de la indexación de la gama.

2021-11-22 13:52:49

Hola @rdu , he añadido el dat. el archivo que he usado . Espero que esto hace que sea un poco más claro para usted
Willem B

Lo que no entiendo es cómo los valores en p.pre o p.post puede estar fuera del índice de la matriz, ya que representan un trabajo que está dentro del rango 1..nbjobs. El tamaño de la matriz de precedencia asume en valor que representa el pre y un valor que representa el post.
Willem B

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................