Vrátane matica vzdialeností v CP schedulling problém

0

Otázka

Chcem skúsiť pridať matica vzdialeností na jednoduché plánovanie problém v CPLEX pomocou CP však nemôžem spravovať, aby si to v bez chyba v mojom novom dvar postupnosť.

Snažím sa, aby nastavenie časov medzi produkty 1,2 a 3, ktoré závisia od sekvencie, že výrobky sú naplánované. Nastavenie časy pre jednotlivé sekvencie sú uvedené v distancematrix.Snažil som sa definujú vzdialenosť matica n-tice triplet v mod súbor a ako matrice, v súbor dát, ale obe možnosti nie je práca pre mňa.

Nové nastavenie dvar poradí, toto nastavenie času sa nazýva setup, a mali by predstavovať poradia každý pracovný J na stroj. Avšak, som sa chybové hlásenie, že " funkcia noOverlap dvarsequence,[rozsah][rozsah] neexistuje. Nechápem, čo robím zle, pretože som definoval dvar nasl a matice, takže v mojom chápaní by to malo fungovať

Mohol by mi niekto pomôcť sa tu? Zasekol sa s týmto problémom na chvíľu teraz.

Nižšie nájdete mod. a dat. súbory.

Vopred ďakujeme! 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]
]};
1

Najlepšiu odpoveď

1

mali by ste zase matica vzdialeností do n-tice nastaviť.

Pozrite si príklad z Ako s OPL ?

TSP (Cestovanie Predavač Problém) v OPL s plánovania, s Protivník, Programovanie, alebo odstrániť obvody a MTZ

using CP; 
int     n       = ...;
range   Cities  = 1..n;

int realCity[i in 1..n+1]=(i<=n)?i:1;



// Edges -- sparse set
tuple       edge        {int i; int j;}
setof(edge) Edges       = {<i,j> | ordered i,j in 1..n};
setof(edge) Edges2       = {<i,j> | i,j in 1..n+1};  // node n+1 is node 1

int         dist[Edges] = ...;
int         dist2[<i,j> in Edges2]=(realCity[i]==realCity[j])?0:
((realCity[i]<realCity[j])?dist[<realCity[i],realCity[j]>]:dist[<realCity[j],realCity[i]>]);


dvar interval itvs[1..n+1] size 1;


dvar sequence seq in all(i in 1..n+1) itvs[i]; 

execute
{

cp.param.TimeLimit=60;
var f = cp.factory;
  cp.setSearchPhases(f.searchPhase(seq));
}

tuple triplet { int c1; int c2; int d; };
{triplet} Dist = { 
    <i-1,j-1,dist2[<i ,j >]>
           |  i,j in 1..n+1};
           
           
minimize endOf(itvs[n+1]) - (n+1);           
subject to
{
    startOf(itvs[1])==0; // break sym
    noOverlap(seq,Dist,true);   // nooverlap with a distance matrix
    last(seq, itvs[n+1]); // last node
}
2021-11-20 18:49:09

Snažil som sa postaviť n-tice nastaviť ako dobre, však ja som sa divil, keby to bolo možné postaviť n-tice triplet s Úlohami je definovaný ako reťazec { int loc1; int loc2; int hodnota; }; {triplet} transitionTimes = { <i,j, ftoi(abs(i-j))> | i na Úlohách, j v Úlohách }; Keď Úloh je definovaný ako reťazec Úloh = {"Kečup", "Mayo","BBQ","KetchLight"}; Alebo môže n-tice stanovuje iba byť konštruované s nie string typy?
Willem B

Dokumentácia hovorí : voliteľný prechod matice M (vo forme nezáporné celočíselné n-tice nastaviť) môžu byť odovzdané k noOverlap obmedzenia znamená, že ak ai sa objaví pred aj v poradí, a potom minimálne vzdialenosti M[typei,typej] sa musia dodržiavať medzi koncom ai a začiatok aj (typei a typej označujú typy ai a aj v poradí).
Alex Fleischer

Vďaka Alex! Teraz som vidieť, ako môžem nastaviť svoj vlastný n-tice používať iba celé čísla! Napriek tomu, keď sa snažím na zostrojenie n-tice, nastavený pre prechod matice, výmena int loc1 a int loc2 s (string job1 a string job2), dostanem chybu v noOVerlap linka: Argument typu nesúlad volanie funkcie noOverlap(dvar postupnosti{n-tice-typ}):boolean s argumenty dvar postupnosti {Matrix}'. Znamená to, že môžem použiť len n-tice súbor, ktorý existuje mimo záporné celé čísla pre všetky časti n-tice? Stále nie je úplne jasné, pre mňa.. Mohli by ste možno potvrdiť to?
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
..................................................................................................................