Prechod matice nie sú zahrnuté v mojom riešenie môjho plánovanie problém v CPLEX CP

0

Otázka

Môj matica vzdialeností v mojom č prekrývajú obmedzenia nezdá sa pracovať v mojom model výsledok. Som formuloval matica vzdialeností pomocou n-tice nastaviť. Snažil som sa na to v 2 rôznych spôsobov, ako možno vidieť v kóde. Oba n-tice nastaví sa zdajú byť správne a matica vzdialeností je pridané v noOverlap obmedzenia pre dvar postupnosť.

Napriek tomu nevidím pridané prechod vzdialenosť medzi produkty v optimálnych výsledkov. Pracovných miest zdať, že naďalej v tom čase, keď dokončení práce. Namiesto čakania na prechodné obdobie. Ja by som tento prechod matice držať ako pre počítač 1 a stroj 2.

Mohol by mi niekto povedať, čo som urobil zle, v mojom model formulácia? Díval som sa do príklady, ale zdá sa, konštruované rovnakým spôsobom. Tak neviem, čo robím zle.

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     = ...;

tuple Matrix { int job1; int job2; int value; }; 
//{Matrix} transitionTimes ={<1,1,0>,<1,2,6>,<1,3,2>,<2,1,2>,<2,2,0>,<2,3,1>,<3,1,2>,<3,2,3>,<3,3,0>};
{Matrix} transitionTimes ={ <i,j, ftoi(abs(i-j))> | i in Jobs, j in Jobs }; 

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];   

execute {
        cp.param.FailLimit = 5000;
}

 // Minimize the max timespan
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]);
       }     
      forall(m in Machines){
     noOverlap(tool[m],transitionTimes);
       }     
   };

execute {
  writeln(task);
};

dat.

nbMachines = 2;
nbJobs = 3;

duration = [
        [5,6], 
        [3,4],
        [5,7]
            ];

release = 1;

due = 30;
 
``
1

Najlepšiu odpoveď

0

Mali by ste zadať interval typy postupnosti. Vo vašom prípade je typ práce id:

int JobId[j in Jobs] = j;
dvar sequence tool[m in Machines] in all(j in Jobs) opttask[j][m] types JobId;
2021-11-22 15:50:24

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
..................................................................................................................