Pole problému s endbefore začít v CPLEX

0

Otázka

Snažím se přidat Endbeforestartconstraint mé contrained programování problém. Nicméně, jsem chybová říct, že můj konec beforestart není typu pole. Nechápu to, protože jsem skoro kopíroval omezení a data z sched_seq například v CPLEX, jen jsem to změnil na celá čísla.

Co jsem se snaží dosáhnout omezení, je to úkol 3 úkol 1 bude provedena před úkol 2 začne.

Jak mohu opravit řadu chyb za toto omezení?

Níže naleznete příslušné části mého kódu

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

Nejlepší odpověď

1

Existuje několik chyb v modelu, na rozsahy nebo na obrácené indexy. Také, příště, prosím, po kompletní program ukazuje problém, ne jen částečné, to vám může pomoci získat rychlejší výsledky. Opravený program:

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

Musíte mít hodnoty v p.pre nebo p.příspěvek, který jsou mimo pole indexování rozsahu.

2021-11-22 13:52:49

Ahoj @rdu , přidal jsem dat. soubor jsem použil . Doufám, že to dělá to trochu víc jasné
Willem B

Co nechápu, je, jak hodnoty v p.pre nebo p.příspěvek může být mimo index pole jako oni prostě představují práci, která je v rozsahu 1..nbjobs. Velikost pole priority předpokládá na hodnotu představující předem a jedna hodnota představující post.
Willem B

V jiných jazycích

Tato stránka je v jiných jazycích

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