Decision Optimization

Decision Optimization

Delivers prescriptive analytics capabilities and decision intelligence to improve decision-making.

 View Only

I have changed the objective function and I wanna see the end data of opérations Jlast of each jobs

  • 1.  I have changed the objective function and I wanna see the end data of opérations Jlast of each jobs

    Posted Mon June 05, 2023 11:47 AM
    using CP;
     
    tuple paramsT{
    int nbJobs;
    int nbMchs;
    };
    paramsT Params = ...;
    int nbJobs = Params.nbJobs;
    int nbMchs = Params.nbMchs;
     
    range Jobs = 1..nbJobs;
    range Mchs = 1..nbMchs; 
     
    tuple Operation {
      int id;    // Operation id
      int jobId; // Job id
      int pos;   // Position in job
    };
     
    tuple Mode {
      int opId; // Operation id
      int mch;  // Machine
      int pt;   // Processing time
    };
     
    {Operation} Ops   = ...;
    {Mode}      Modes = ...;
     
    // Position of last operation of job j
    int jlast[j in Jobs] = max(o in Ops: o.jobId==j) o.pos;
     
    dvar interval ops  [Ops]; 
    dvar interval modes[md in Modes] optional size md.pt;
    dvar sequence mchs[m in Mchs] in all(md in Modes: md.mch == m) modes[md];
     
    execute {
      cp.param.FailLimit = 10000;
    }
    minimize sum(j in Jobs, o in Ops: o.pos==jlast[j]) endOf(ops[o]);
    subject to {
      forall (j in Jobs, o1 in Ops, o2 in Ops: o1.jobId==j && o2.jobId==j && o2.pos==1+o1.pos)
        endBeforeStart(ops[o1],ops[o2]);
      forall (o in Ops)
        alternative(ops[o], all(md in Modes: md.opId==o.id) modes[md]);
      forall (m in Mchs)
        noOverlap(mchs[m]);
    }
    execute {
      for (var m in Modes) {
        if (modes[m].present)
          writeln("Operation " + m.opId + " on machine " + m.mch + " starting at " + modes[m].start);  }
    }
    execute {
      for (var m in Modes) {
        if (modes[m].present)
          writeln("Operation " + m.opId + " on machine " + m.mch + " starting at " + modes[m].start);
     
      }
    }
     
    tuple solutionT{
    int operation;
    int machine;
    int start;
    };
    {solutionT} solution = {<m.opId, m.mch, startOf(modes[m])> | m in Modes : startOf(modes[m]) != 0};
     


    ------------------------------
    Ghada Ouerfelli
    ------------------------------