Array problém s endbefore štart v CPLEX

0

Otázka

Snažím sa pridať Endbeforestartconstraint na moje contrained programovania problém. Avšak, ja sa zobraziť chybové hovorí, že môj koniec beforestart nie je pole typu. Nechápem to, ako som takmer kopíroval obmedzenia a údaje z sched_seq napríklad v CPLEX, len som ho zmenili na celé čísla.

To, čo sa snažím dosiahnuť s obmedzení je, že úloha 3 úloha 1 sa vykonáva pred úlohou 2 začne.

Ako môžem opraviť pole chyby pre toto obmedzenie?

Nižšie nájdete príslušné časti môj kód

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

Najlepšiu odpoveď

1

Existuje niekoľko chýb v modeli, na rozsahov alebo na obrátený indexy. Tiež, nabudúce, prosím zašlite kompletný program ukazuje problém, nie len čiastočný jeden, to vám môže pomôcť dostať rýchlejšie odpovede. 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 mať hodnoty v p.pred alebo p.post, ktoré sú mimo poľa indexovanie rozsahu.

2021-11-22 13:52:49

Ahoj @rdu , pridal som dat. súbor som použil . Dúfam, že to je to trochu viac objasniť
Willem B

Čo nechápem, je, ako hodnoty v p.pred alebo p.príspevok môže byť mimo index poľa, ako sa jednoducho predstavujú prácu, ktorá je v rozsahu 1..nbjobs. Veľkosť poľa prednosť predpokladá na hodnote, ktorá predstavuje pre a jeden hodnote, ktorá predstavuje príspevok.
Willem B

V iných jazykoch

Táto stránka je v iných jazykoch

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