Decision Optimization

Decision Optimization

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

 View Only
  • 1.  Heterogenous VRPTW

    Posted Mon June 22, 2020 05:06 PM
    Hi everyone,

    I'm trying to solve a Heterogenous VRP with Time windows, however the code developed can´t find any solution and i don't uderstand why. Could you help me please ! I'm already trying for too long to solve this problem. Here is my code, any doubt telmm me pls.

    Thanks!

    using CP;

    //Veiculos

    int v=...;
    range veiculos = 1..v;
    int M=1000;
    int DM=30000;
    //Clientes

    int NumeroClientes=...;
    range clientes=1..NumeroClientes;
    range clientesEarmazem=0..(NumeroClientes+1);//inclui o ponto de início no armazém e pontop de chegada ao armazém

    //Capacidade
    int Capacidade [veiculos]=...;

    //Procura
    int Procura [clientes]=...;

    //Janelas Temporais
    int LBTW[clientesEarmazem]=...;
    int UBTW[clientesEarmazem]=...;


    float S[clientesEarmazem];//Tempo de Serviço
    float dist [clientesEarmazem][clientesEarmazem]=...;
    float tempo [clientesEarmazem][clientesEarmazem]=...;

    float custo[veiculos]=...;

    execute TempoServico {
    for (var i in clientesEarmazem){
    if (i==0|| i==NumeroClientes+1) {
    S[i]==0;
    } else{
    S[i]=2.5+1.5*(Procura[i]/6);
    }
    }
    }

    //Variáveis de decisão

    dvar boolean x[veiculos][clientesEarmazem][clientesEarmazem];//Valor é 1 se o arco for percorrido
    dvar int W[veiculos][clientesEarmazem]; //variável de tempo
    dexpr float maxTempoPerdidoEntreClientes = max( i, j in clientesEarmazem)(LBTW[i]+ tempo [i][j] - UBTW[i]);


    //Função Objectivo

    minimize sum (k in veiculos, i,j in clientesEarmazem) (dist[i][j]*x[k][i][j]*custo[k]);

    subject to {
    //nenhum nó se visita a si próprio qualquer que seja o veiculo
    ct01: forall (i in clientesEarmazem, k in veiculos)
    x[k][i][i]==0;

    //Cada Cliente é visitado exatamente 1x
    ct02: forall (i in clientes)
    sum (k in veiculos, j in clientesEarmazem) x[k][i][j] == 1;

    //Quantidade transportada tem de ser menor que a capacidade do veículo
    ct03: forall ( k in veiculos)
    sum (i in clientes, j in clientesEarmazem) (Procura[i] * x[k][i][j]) <= Capacidade[k];

    //A um nó não pode ser atribuído mais que 1 veículo
    ct04: forall(k in veiculos)
    sum (j in clientes) x[k][0][j]==1;

    // Um veiculo so pode regressar de 1 nó
    ct05: forall (k in veiculos)
    sum (i in clientesEarmazem) x[k][i][NumeroClientes+1] <=1;

    //Um veículo que se dirige a um cliente terá de partir desse mesmo cliente
    ct06: forall (p in clientes, k in veiculos)
    sum (i in clientesEarmazem) x[k][i][p]- sum (j in clientesEarmazem) x[k][p][j]==0;
    //Janelas Temporais
    forall(i in clientesEarmazem, k in veiculos)
    LBTW[i] <= W[k][i] <= UBTW[i];

    //Cumprimento das janelas temporais
    ct08: forall (i,j in clientesEarmazem, k in veiculos)
    W[k][i] + S[i] + tempo [i][j] - W[k][j] <= (1-x[k][i][j])*M;
    //W[k][i] + S[i] + tempo [i][j] - (1-x[k][i][j])*maxTempoPerdidoEntreClientes <= W[k][j];

    //limitação do número de veículos à frota disponível
    ct10: forall(k in veiculos, j in clientesEarmazem)
    sum (k in veiculos, j in clientesEarmazem) x[k][0][j]<= v;

    //limitação da duração da rota
    ct11: forall (k in veiculos)
    W[k][NumeroClientes+1]-W[k][0]<=DM;
    /*ct11: forall (k in veiculos)
    sum(i in clientesEarmazem, j in clientesEarmazem)(tempo[i][j]+S[j])*x[k][i][j]<=DM; */


    };

    ------------------------------
    Manuel Eusébio
    ------------------------------

    #DecisionOptimization


  • 2.  RE: Heterogenous VRPTW

    Posted Tue June 23, 2020 12:58 AM
    Duplicate of https://community.ibm.com/community/user/datascience/communities/community-home/digestviewer/viewthread?MessageKey=d11d41e9-cd42-4ae7-a6c1-9fe5e2fb9b03&CommunityKey=ab7de0fd-6f43-47a9-8261-33578a231bb7&tab=digestviewer#bmd11d41e9-cd42-4ae7-a6c1-9fe5e2fb9b03

    ------------------------------
    Daniel Junglas
    ------------------------------