Decision Optimization

Decision Optimization

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

 View Only
  • 1.  mTSP with time window

    Posted Sat June 29, 2019 11:11 AM

    Originally posted by: 18125514


    Can solve the problem that the number of nodes is within 20.

    The number of nodes is out of 20 and cannot be solved.

    No problem with the model.

    I feel that it is mainly used in =>.

    Use in the model in load weight constraints and time window constraints =>.

    I feel that there may be some problems in this logic.

    MOD as below:

    /*********************************************
     * OPL 12.9.0.0 Model
     * Author: 86131
     * Creation Date: 2019年5月24日 at 下午10:17:34
     *********************************************/

    int     n       = ...;
    int     K       = ...;
    {int}   A  = asSet(1..n);//配送网点与客户点
    {int}   N  = asSet(2..n);
    {int}   Trucks  = asSet(1..K);//一组同质的车辆(人员) 
    float   T  =...;//单次收派的最大工作时间
    float   Z  =...;//一个极大正数
    float        Q[Trucks] = ...;//载重量上限
    float        d[N] = ...;//收件重量
    float        v[N] = ...;//派件重量

    float CC[1..n*n*K] = ...;
    float c[i in 1..n, j in 1..n,k in 1..K] = CC[k+K*(j-1)+n*K*(i-1)];//行走成本(时间)
    float        t[N][Trucks] =...;//客户 i的服务时间
    float        a[N] = ...;//客户 i要求的最早到达时间
    float        b[N] = ...;//客户 i要求的最晚到达时间*/
    dvar boolean x[A][A][Trucks];//车辆 k 是否访问过客户 i 和客户 j 所构成的弧
    dvar float+ q[A][Trucks];//车辆 k 离开客户i时所装载重量
    dvar float+ w[A][Trucks];//收派员 k 达到客户 i的时间,原文文中是k,这里符号冲突了

    dexpr float time[k in Trucks] =sum(i,j in A:j!=i)(c[i][j][k]*x[i][j][k])+sum(i in A,j in N:j!=i)(t[j][k]*x[i][j][k]);
    /************************************************/
    // Objective
    minimize sum (i,j in A:i!=j,k in Trucks) c[i][j][k]*x[i][j][k];
    subject to {
        forall(i in N)
          ct1:sum(j in A:j!=i,k in Trucks)(x[i][j][k])==1;
        forall(j in N)
          ct2:sum(i in A:i!=j,k in Trucks)(x[i][j][k])==1;
        forall(k in Trucks)
          ct3:sum(j in N)(x[1][j][k])==1;      
        forall(k in Trucks)
          ct4:sum(i in N)(x[i][1][k])==1; 
        forall(j in N)
          ct5:sum(k in Trucks)(x[1][j][k])<=1;  
        forall(i in N)
          ct6:sum(k in Trucks)(x[i][1][k])<=1;
        forall(k in Trucks,h in N)
          ct7:sum(i in A:i!=h)(x[i][h][k])-sum(j in A:j!=h)(x[h][j][k])==0;//改了A
        forall(k in Trucks)
          ct8:time[k]<=T;
        forall(k in Trucks) 
          ct9:q[1][k]==sum(j in N)(v[j]*sum(i in A:i!=j)(x[i][j][k])); 
           forall(i in A,j in N:j!=i,k in Trucks)
          ct10:x[i][j][k]==1=>(q[j][k]-q[i][k])==-(d[j]+v[j]);//不用考虑回原点 
        //forall(i in A,j in N:j!=i,k in Trucks)
          //ct10:(q[j][k]-q[i][k])>=-(d[j]+v[j])-Z*(1-x[i][j][k]);//不用考虑回原点  
        forall(i in A,j in A:j!=i,k in Trucks)
          ct11:x[i][j][k]==1=>q[i][k]<=Q[k];//之前有问题,q意思是离开客户i的载重量   
        forall(i in N,j in A:j!=i,k in Trucks)
          ct12:x[i][j][k]==1=>maxl(0,-d[i])<=q[i][k];      
        forall(j in N,k in Trucks)
             ct13:x[1][j][k]==1=>w[j][k] >= w[1][k]+c[1][j][k];//这里 w[1][k]表示离开原点1的时间     
        forall(i in N,j in N:j!=i,k in Trucks)
            ct14:x[i][j][k]==1=>w[j][k] >= w[i][k]+t[i][k]+c[i][j][k];   
         //forall(j in N,k in Trucks)
             //ct13:w[j][k] >= w[1][k]+c[1][j][k]-(1-x[1][j][k])*Z;//这里 w[1][k]表示离开原点1的时间 
         //forall(i in N,j in N:j!=i,k in Trucks)
             //ct14:w[j][k] >= w[i][k]+t[i][k]+c[i][j][k]-(1-x[i][j][k])*Z;//这里 w[1][k]表示离开原点1的时间  
        forall(i in A,j in N:j!=i,k in Trucks)
             ct15:x[i][j][k]==1=>a[j]<=w[j][k]; 
         forall(i in A,j in N:j!=i,k in Trucks)
             ct16:x[i][j][k]==1=>w[j][k]<=b[j];
             ct18:sum(i in A,k in Trucks)x[i][i][k]==0;    
      }

    Personal feeling problems mainly appear in the load weight constraint ct10-ct12 and time window constraint ct13-ct16.

    I don't know if => is correct, if not, how to represent the above constraints.

    In addition, with similar constraints such as adding an infinite number Z, the model does not apply.

    Thanks for solving my problem.

     


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 2.  Re: mTSP with time window

    Posted Fri September 06, 2019 02:47 AM

    Hi,

    when you say "cannot be solved", do you mean you get an error or you get no solution or it takes very long time ?

    Maybe you could attach your model and data

    regards


    #DecisionOptimization
    #OPLusingCPLEXOptimizer