Quiero intentar agregar una matriz de distancias a un simple problema de programación en CPLEX el uso de CP, sin embargo yo no puede conseguir esto sin la necesidad de un error en mi nuevo bdvar secuencia.
Estoy tratando de incluir a los tiempos de instalación entre los productos de 1,2 y 3, que dependen de la secuencia en que los productos están programados. Los tiempos de preparación de las diferentes secuencias se dan en un distancematrix.Traté de definir la distancia de la matriz como una tupla triplete en el archivo mod y como una matriz en el archivo dat pero ambas opciones no funcionan para mí.
La nueva configuración de bdvar de secuencia para este tiempo de configuración se llama el programa de instalación, y debe representar la secuencia de cada trabajo J en la máquina. Sin embargo, me aparece el error de que " la función noOverlap dvarsequence,[rango][rango] no existe. No entiendo lo que estoy haciendo mal, ya que he definido la bdvar seq y la matriz de modo que, en mi entender debería funcionar
Podría alguien ayudarme a salir de aquí? Pegado con este problema por un tiempo ahora.
Por favor buscar debajo de la mod. y dat. los archivos.
Gracias de antemano! 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 = ...;
int distanceMatrix[1..nbJobs][1..nbJobs] = ...;
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];
dvar sequence setup[j in Jobs] in all (m in Machines,j in Jobs)opttask[j][m];
execute {
cp.param.FailLimit = 5000;
}
// Minimize the total processing cost (24)
dexpr int day = sum(j in Jobs, m in Machines) duration[j][m] * presenceOf(opttask[j][m]);
minimize day;
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]);
noOverlap(setup[j],distanceMatrix);
}
// No overlap on machines
forall(m in Machines){
noOverlap(tool[m]);
}
// forall(m in Machines,j in Jobs)
};
execute {
writeln(task);
};
dat.
nbMachines = 2;
nbJobs = 3;
duration = [
[5,1],
[3,4],
[5,7]
];
release = 1;
due = 30;
distanceMatrix = [
1:[0,2,0],
2:[4,0,6],
3:[0,2,0]
]};