Decision Optimization

Decision Optimization

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

 View Only
Expand all | Collapse all

CP Optimizer RCPSP identical parallel machines

  • 1.  CP Optimizer RCPSP identical parallel machines

    Posted Sun May 27, 2018 06:29 PM

    Originally posted by: Tunemelo


    Hello everyone:)

    Maybe there is someone dealing with a similar problem..

    I want to implement identical parallel machines with the following characteristics:
    1. Different products need to be processed through the same sequential production steps
    2. At each production step there are identical, parallel machines
    3. The processing and transition times depend on the products (not on the machines)
    4. Objective: Minimization of processing time

    // Allocation of process steps to machines  --> I want to allocate one production step to possible several machines (for one product only one should be selected in the solution)
    string machine [ps in process_steps] = ...;

    // Transition Times
    tuple transitiontimes {
      key int prod1;
      key int prod2;
      int time;

    };  
    {transitiontimes} Transitiontimes [machines]=...;

     

    dvar interval products [p in Products] in ReleaseDate [p]..(maxint div 2)-1;

    dvar interval itvs [p in Products][ps in process_steps] size Duration [p][ps];

    dvar sequence Machines [m in machines] in
    all (p in Products, ps in process_steps: machine[ps]==m) itvs[p][ps] types
    all (p in Products, ps in process_steps: machine[ps]==m) p;

     

    minimize max (p in Products) endOf (itvs[p]["Last Step"]);

     

    subject to {

    forall (m in machines)
      noOverlap (Machines[m], Transitiontimes[m],true);

    ...

    };

     

    How can I integrate the optional machine case into the sequence variable?

     

    Thanks a lot :)


    #DecisionOptimization
    #OPLusingCPOptimizer


  • 2.  Re: CP Optimizer RCPSP identical parallel machines

    Posted Mon May 28, 2018 02:53 AM

    Originally posted by: PhilippeLaborie


    Except for the transition times (that you have already modeled), the problem is a special case of flexible job-shop, so I suggest you have a look at the distributed flexible job-shop example (sched_jobshopflex) to see how to model machine allocation with optional interval variables and alternative constraints. If to focus on the model itself, it looks like this:

    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];
    
    minimize max(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]);
    }
    

     

     


    #DecisionOptimization
    #OPLusingCPOptimizer


  • 3.  Re: CP Optimizer RCPSP identical parallel machines

    Posted Mon May 28, 2018 03:42 PM

    Originally posted by: Tunemelo


    Thanks a lot!:)


    #DecisionOptimization
    #OPLusingCPOptimizer