Tableau de problème avec endbefore commencer dans CPLEX

0

La question

Je suis en train d'ajouter un Endbeforestartconstraint à mon contrained problème de programmation. Cependant, j'ai un message d'erreur disant que ma fin beforestart n'est pas de type tableau. Je ne comprends pas ce que j'ai presque copié la contrainte et les données de la sched_seq exemple dans CPLEX, j'ai seulement changé les nombres entiers.

Ce que j'essaie de le faire avec la contrainte, c'est que les tâches 3 et de la tâche 1 sera effectuée avant que la tâche 2 va commencer.

Comment je peux résoudre le tableau d'erreur pour que cette contrainte?

Veuillez trouver ci-dessous les parties pertinentes de mon code

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

La meilleure réponse

1

Il y a plusieurs erreurs dans votre modèle, sur les plages ou sur les inversée indices. Aussi, la prochaine fois, merci de poster un programme complet montrant le problème, et pas seulement partielle, ce qui peut vous aider à obtenir plus rapidement des réponses. Une version corrigée du programme:

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

Vous devez avoir des valeurs dans p.pré ou p.poste qui sont à l'extérieur de la matrice de l'indexation de gamme.

2021-11-22 13:52:49

Salut @rdu , j'ai ajouté le dat. fichier que j'ai utilisé . Espérons que cela la rend un peu plus clair pour vous
Willem B

Ce que je ne comprends pas c'est comment les valeurs dans p.pré ou p.le post peut être à l'extérieur de l'index de tableau, car ils représentent simplement un travail qui est dans la plage de 1..nbjobs. La taille du tableau de préséance suppose sur la valeur représentant avant et un représentant de la poste.
Willem B

Dans d'autres langues

Cette page est dans d'autres langues

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