Decision Optimization

Decision Optimization

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

 View Only
Expand all | Collapse all

How to define sequence variable over two sets of interval variables

  • 1.  How to define sequence variable over two sets of interval variables

    Posted Thu November 24, 2016 10:34 AM

    Originally posted by: Sulivan


    Or equivalently, how can I get the union of two sets of interval variables.

    The following codes yield error:

    using CP;
     
    tuple AC{
      int id;
      int req;
    };

    {AC} ACs = {<1,20>,<2,30>,<3,40>,<4,20>,<5,20>};
    int cp = 50;

    dvar interval svc[ac in ACs] size ac.req;
    dvar interval rep[ac in ACs] size 5;

    dvar sequence seq in all(ac in ACs) svc[ac] union all(ac in ACs) rep[ac];

    minimize max(ac in ACs) endOf(svc[ac]);
    subject to{
    ct01: noOverlap(seq);
    }


    #DecisionOptimization
    #OPLusingCPOptimizer


  • 2.  Re: How to define sequence variable over two sets of interval variables

    Posted Fri November 25, 2016 05:24 AM

    Hi,

    I would write:

    using CP;
     
    tuple AC{
      int id;
      int req;
    };

    {AC} ACs = {<1,20>,<2,30>,<3,40>,<4,20>,<5,20>};
    int cp = 50;

    //dvar interval svc[ac in ACs] size ac.req;
    //dvar interval rep[ac in ACs] size 5;

     

    {string} S={"svc","rep"};

    dvar interval repsvc[ac in ACs,s in S] size (s=="svc")?ac.req:5;

    dvar sequence seq in all(ac in ACs,s in S) repsvc[ac,s];

    minimize max(ac in ACs) endOf(repsvc[ac,"svc"]);
    subject to{
    ct01: noOverlap(seq);
    }

    regards


    #DecisionOptimization
    #OPLusingCPOptimizer


  • 3.  Re: How to define sequence variable over two sets of interval variables

    Posted Thu May 17, 2018 04:14 AM

    Originally posted by: Wahiba123


    Hello Alex. I am sorry but I need some help in a similar problem. I have to schedule "n jobs" on "m machines". I have define two dvar intarvals:

    The first one is 

      dvar interval itvs[k in 0..m-1][j in 0..n-1] size P[k][j]
    

    The second one is 

    dvar interval mts[k in 0..m-1][l in 0..L-1] size M[k][l]
    

    I want to define a sequence that takes into consideration the two intervals(union). The second interval is placed on the sequence each time one machine reaches a given "limit" time.

    I have define the sequence as next: 

    dvar sequence mchs[k in 0..m-1] in append(all(j in 0..n-1) itvs[k][j],all(l in 0..L-1)mts[k][l]) types append(all(j in 0..n-1) j, all(l in 0..L-1) l);
    

    But the model replies no solution and I have some difficulties in formulating the noOverlap and the typeOfPrev constraints. I need some help.


    #DecisionOptimization
    #OPLusingCPOptimizer


  • 4.  Re: How to define sequence variable over two sets of interval variables

    Posted Thu May 17, 2018 05:29 AM

    hi,

    inded you could use append and turn

    using CP;
     
    tuple AC{
      int id;
      int req;
    };

    {AC} ACs = {<1,20>,<2,30>,<3,40>,<4,20>,<5,20>};
    int cp = 50;

    //dvar interval svc[ac in ACs] size ac.req;
    //dvar interval rep[ac in ACs] size 5;

     

    {string} S={"svc","rep"};

    dvar interval repsvc[ac in ACs,s in S] size (s=="svc")?ac.req:5;

    dvar sequence seq in all(ac in ACs,s in S) repsvc[ac,s];

    minimize max(ac in ACs) endOf(repsvc[ac,"svc"]);
    subject to{
    ct01: noOverlap(seq);
    }

     

    into

     

        using CP;
         
        tuple AC{
          int id;
          int req;
        };

        {AC} ACs = {<1,20>,<2,30>,<3,40>,<4,20>,<5,20>};
        int cp = 50;

        dvar interval svc[ac in ACs] size ac.req;
        dvar interval rep[ac in ACs] size 5;

         

        
        
        dvar sequence seq in append(all(ac in ACs) rep[ac],all(ac in ACs) svc[ac]);

        minimize max(ac in ACs) endOf(svc[ac]);
        subject to{
        ct01: noOverlap(seq);
        }

     

    regards


    #DecisionOptimization
    #OPLusingCPOptimizer