Eu quero tentar adicionar uma matriz de distância de um simples problema de programação no CPLEX usando o CP no entanto, eu não conseguiria isso sem um erro no meu novo bdvarest sequência.
Estou tentando incluir o tempo de instalação entre os produtos 1, 2 e 3, que dependem da seqüência em que os produtos são agendadas. Os tempos de preparação para as diversas sequências são dadas em um distancematrix.Tentei definir a matriz de distância como uma tupla trio no arquivo mod e como uma matriz no arquivo dat, mas ambas as opções não funcionam para mim.
A nova configuração bdvarest de seqüência para esta configuração de tempo é chamado de instalação, e deve representar a seqüência de cada tarefa J na máquina. No entanto, recebo a mensagem de erro que " a função noOverlap dvarsequence,[intervalo][intervalo] não existe. Eu não entendo o que estou fazendo de errado, já que eu defini o bdvarest seq e a matriz portanto, no meu entendimento, isso deve funcionar
Alguém poderia me ajudar aqui? Preso com esse problema por um tempo agora.
Veja abaixo o mod. e dat. ficheiros.
Obrigado antecipadamente! 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]
]};