La matriz de transición no se incluye en la solución de mi problema de programación en CPLEX CP

0

Pregunta

Mi matriz de distancias en mi no hay superposición de restricción no parece funcionar en mi modelo de resultado. He formulado la matriz de distancias por medio de una tupla conjunto. He intentado esto en 2 formas diferentes, como puede verse en el código. Ambos tupla conjuntos parecen ser correctos y la matriz de distancias se agrega en el noOverlap restricción para el bdvar secuencia.

Sin embargo, yo no veo el agregado de la distancia de transición entre los productos en los resultados óptimos. Trabajos parecen continuar en el mismo tiempo, cuando se ha terminado un trabajo. En lugar de esperar un tiempo de transición. Me gustaría que esta matriz de transición para sostener tanto para el equipo 1 y el equipo 2.

Podría alguien decirme qué he hecho mal en mi formulación del modelo? He mirado en los ejemplos, pero parecen ser construidos de la misma manera. Así que no sé lo que estoy haciendo mal.

mod.


using CP;

// Number of Machines (Packing + Manufacturing)
int nbMachines = ...;
range Machines = 1..nbMachines;


// Number of Jobs
int nbJobs = ...;
range Jobs = 1..nbJobs;

int duration[Jobs,Machines] = ...;
int release = ...;
int due     = ...;

tuple Matrix { int job1; int job2; int value; }; 
//{Matrix} transitionTimes ={<1,1,0>,<1,2,6>,<1,3,2>,<2,1,2>,<2,2,0>,<2,3,1>,<3,1,2>,<3,2,3>,<3,3,0>};
{Matrix} transitionTimes ={ <i,j, ftoi(abs(i-j))> | i in Jobs, j in Jobs }; 

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

execute {
        cp.param.FailLimit = 5000;
}

 // Minimize the max timespan
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]);
       }     
      forall(m in Machines){
     noOverlap(tool[m],transitionTimes);
       }     
   };

execute {
  writeln(task);
};

dat.

nbMachines = 2;
nbJobs = 3;

duration = [
        [5,6], 
        [3,4],
        [5,7]
            ];

release = 1;

due = 30;
 
``
1

Mejor respuesta

0

Usted debe especificar los tipos de intervalos para cada secuencia. En su caso, el tipo es el id de trabajo:

int JobId[j in Jobs] = j;
dvar sequence tool[m in Machines] in all(j in Jobs) opttask[j][m] types JobId;
2021-11-22 15:50:24

En otros idiomas

Esta página está en otros idiomas

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