Зависимое от последовательности время переключения - PullRequest
0 голосов
/ 09 марта 2019

Я рассмотрел 4 вида затрат. Я получаю ответ на вопрос о стоимости обработки, стоимости запасов и коммунальных услуг, однако я не могу получить стоимость переключения, зависящую от последовательности. Может ли кто-нибудь помочь мне написать код для времени и стоимости перехода?

using CP;

// Number of Machines (Packing + Manufacturing)
int nbMachines = 3;
range Machines = 1..nbMachines;

// Number of Jobs
int nbJobs = 18;
range Jobs = 1..nbJobs;

//Processing time
int Ptime[Jobs,Machines] = [

//processing cost
int Pcost[Jobs,Machines] =[

int Start[Jobs] =[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
int due  [Jobs] = 
[8640,8640,8640,8640,8640,8640,8640,8640,8640,8640,8640,
 8640,8640,8640,8640,8640,8640,8640];
int Ctime[Jobs, Jobs]=[

int ChangeCost[Jobs, Jobs]=200*Ctime;
int UtilityCost[Jobs,Machines] = 55*Ctime;
int InvCost[Jobs, Machines]  = 55*Ctime;
int Utility[Jobs,Machines];
int Inv[Jobs, Machines];

//decision variables
dvar interval task[j in Jobs] in Start[j]..due[j];
dvar interval opttask[j in Jobs][m in Machines] optional size Ptime[j][m];
dvar sequence tool[m in Machines] in all(j in Jobs) opttask[j][m];

execute {
    cp.param.FailLimit = 50000;
}

// Minimize the total processing cost (24)
 minimize 
 sum(j in Jobs, m in Machines) (Pcost[j][m] * presenceOf(opttask[j][m])+ 
 ChangeCost[j][j]*(Ctime[j][j]) +
 UtilityCost[j][m] * Utility[j][m] +  InvCost[j][m] * Inv[j][m]);
 subject to {

 // Each job needs one unary resource of the alternative set s (28)
  forall(j in Jobs,m in Machines)
  alternative(task[j], all(m in Machines) opttask[j][m]);
  forall( j in Jobs , m in Machines  )
     Start[j] + Ptime[j][m] + Ctime[j][j]<= due[j];

  // No overlap on machines
   forall(j in Jobs ,m in Machines)
  noOverlap(tool[m]);
    };

   execute {
        writeln(task+Ctime[j][j]);
     };
...