ShipmentModel

Um modelo de envio contém um conjunto de envios que precisam ser realizados por um conjunto de veículos, minimizando o custo geral, que é a soma de:

  • o custo do roteamento dos veículos (soma do custo por tempo total, custo por tempo de viagem e custo fixo em todos os veículos).
  • as penalidades por não entrega.
  • o custo da duração global dos envios
Representação JSON
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
Campos
shipments[]

object (Shipment)

Conjunto de remessas que precisam ser realizadas no modelo.

vehicles[]

object (Vehicle)

Conjunto de veículos que podem ser usados para realizar visitas.

globalStartTime

string (Timestamp format)

Horário de início e término global do modelo: nenhum horário fora desse intervalo pode ser considerado válido.

O período do modelo precisa ser inferior a um ano, ou seja, o globalEndTime e o globalStartTime precisam estar a 31536000 segundos um do outro.

Ao usar campos cost_per_*hour, defina essa janela como um intervalo menor para aumentar a performance. Por exemplo, se você modelar um único dia, defina os limites de tempo globais para esse dia. Se não for definido, o valor padrão será 00:00:00 UTC, 1º de janeiro de 1970 (ou seja, segundos: 0, nanos: 0).

Um carimbo de data/hora no formato RFC3339 UTC "Zulu", com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

globalEndTime

string (Timestamp format)

Se não for definido, o padrão será 00:00:00 UTC, 1o de janeiro de 1971 (ou seja, segundos: 31536000, nanos: 0).

Um carimbo de data/hora no formato RFC3339 UTC "Zulu", com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

globalDurationCostPerHour

number

A "duração global" do plano geral é a diferença entre o horário de início e o horário de término de todos os veículos. Os usuários podem atribuir um custo por hora a essa quantidade para tentar otimizar a conclusão mais rápida do trabalho, por exemplo. Esse custo precisa estar na mesma unidade que Shipment.penalty_cost.

durationDistanceMatrices[]

object (DurationDistanceMatrix)

Especifica as matrizes de duração e distância usadas no modelo. Se esse campo estiver vazio, o Google Maps ou as distâncias geodésicas serão usados, dependendo do valor do campo useGeodesicDistances. Se não estiver vazio, useGeodesicDistances não poderá ser verdadeiro, e nem durationDistanceMatrixSrcTags nem durationDistanceMatrixDstTags poderão estar vazios.

Exemplos de uso:

  • Há dois locais: locA e locB.
  • Um veículo que começa o trajeto em locA e termina em locA.
  • 1 solicitação de retirada em locB.
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • Há três locais: locA, locB e locC.
  • Um veículo que inicia a rota em locA e termina em locB, usando a matriz "rápida".
  • Um veículo que começa a rota em locB e termina em locB, usando a matriz "lento".
  • 1 veículo que começa a rota em locB e termina em locB, usando a matriz "rápido".
  • 1 solicitação de visita de retirada em locC.
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

Tags que definem as origens das matrizes de duração e distância. durationDistanceMatrices(i).rows(j) define durações e distâncias de visitas com a tag durationDistanceMatrixSrcTags(j) para outras visitas na matriz i.

As tags correspondem a VisitRequest.tags ou Vehicle.start_tags. Um VisitRequest ou Vehicle precisa corresponder exatamente a uma tag neste campo. As tags de origem, destino e matriz de um Vehicle podem ser as mesmas. Da mesma forma, as tags de origem e destino de um VisitRequest podem ser iguais. Todas as tags precisam ser diferentes e não podem ser strings vazias. Se esse campo não estiver vazio, durationDistanceMatrices também não poderá estar.

durationDistanceMatrixDstTags[]

string

Tags que definem os destinos das matrizes de duração e distância; durationDistanceMatrices(i).rows(j).durations(k) (resp. durationDistanceMatrices(i).rows(j).meters(k)) define a duração (ou a distância) da viagem de visitas com a tag durationDistanceMatrixSrcTags(j) para visitas com a tag durationDistanceMatrixDstTags(k) na matriz i.

As tags correspondem a VisitRequest.tags ou Vehicle.start_tags. Um VisitRequest ou Vehicle precisa corresponder exatamente a uma tag neste campo. As tags de origem, destino e matriz de um Vehicle podem ser as mesmas. Da mesma forma, as tags de origem e destino de um VisitRequest podem ser iguais. Todas as tags precisam ser diferentes e não podem ser strings vazias. Se esse campo não estiver vazio, durationDistanceMatrices também não poderá estar.

transitionAttributes[]

object (TransitionAttributes)

Atributos de transição adicionados ao modelo.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

Conjuntos de shipment_types incompatíveis (consulte ShipmentTypeIncompatibility).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

Conjuntos de requisitos de shipmentType (consulte ShipmentTypeRequirement).

precedenceRules[]

object (PrecedenceRule)

Conjunto de regras de precedência que precisam ser aplicadas no modelo.

maxActiveVehicles

integer

Limita o número máximo de veículos ativos. Um veículo está ativo se a rota dele realiza pelo menos um envio. Isso pode ser usado para limitar o número de rotas no caso de haver menos motoristas do que veículos e a frota de veículos ser heterogênea. A otimização vai selecionar o melhor subconjunto de veículos a ser usado. Precisa ser estritamente positivo.

Envio

O envio de um único item, de uma das coletas para uma das entregas. Para que a remessa seja considerada concluída, um veículo único precisa visitar um dos locais de retirada (e diminuir a capacidade de reserva), depois visitar um dos locais de entrega mais tarde (e, portanto, aumentar novamente a capacidade de reserva).

Representação JSON
{
  "displayName": string,
  "pickups": [
    {
      object (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
Campos
displayName

string

O nome de exibição do envio definido pelo usuário. Ele pode ter até 63 caracteres e pode usar caracteres UTF-8.

pickups[]

object (VisitRequest)

Conjunto de alternativas de retirada associadas ao envio. Se não for especificado, o veículo só precisa visitar um local correspondente às entregas.

deliveries[]

object (VisitRequest)

Conjunto de alternativas de entrega associadas ao envio. Se não for especificado, o veículo só precisa visitar um local correspondente às coletas.

loadDemands

map (key: string, value: object (Load))

Carregar as demandas do envio (por exemplo, peso, volume, número de paletes etc.). As chaves no mapa precisam ser identificadores que descrevem o tipo da carga correspondente, de preferência incluindo também as unidades. Por exemplo: "weight_kg", "volume_gallons", "pallet_count" etc. Se uma determinada chave não aparecer no mapa, a carga correspondente será considerada nula.

allowedVehicleIndices[]

integer

Conjunto de veículos que podem realizar o envio. Se estiver vazio, todos os veículos poderão realizar a ação. Os veículos são informados pelo índice na lista vehicles do ShipmentModel.

costsPerVehicle[]

number

Especifica o custo incorrido quando o envio é entregue por cada veículo. Se especificado, ele precisa ter:

  • o mesmo número de elementos que costsPerVehicleIndices. costsPerVehicle[i] corresponde ao veículo costsPerVehicleIndices[i] do modelo.
  • o mesmo número de elementos que há veículos no modelo. O elemento i corresponde ao veículo #i do modelo.

Esses custos precisam estar na mesma unidade que penaltyCost e não podem ser negativos. Deixe esse campo em branco se não houver custos.

costsPerVehicleIndices[]

integer

Índices dos veículos a que costsPerVehicle se aplica. Se não estiver vazio, precisará ter o mesmo número de elementos que costsPerVehicle. Um índice de veículo não pode ser especificado mais de uma vez. Se um veículo for excluído de costsPerVehicleIndices, o custo dele será zero.

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

Especifica o tempo de desvio absoluto máximo em comparação com o caminho mais curto da coleta até a entrega. Se especificado, precisa ser não negativo, e o envio precisa conter pelo menos uma coleta e uma entrega.

Por exemplo, vamos supor que t seja o tempo mais curto para ir da alternativa de retirada selecionada diretamente para a alternativa de entrega selecionada. Em seguida, a configuração pickupToDeliveryAbsoluteDetourLimit impõe:

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

Se os limites relativos e absolutos forem especificados no mesmo envio, o mais restritivo será usado para cada par de retirada/entrega possível. Desde outubro de 2017, os desvios são aceitos apenas quando a duração da viagem não depende de veículos.

Duração em segundos com até nove dígitos fracionários, terminando em "s". Exemplo: "3.5s".

pickupToDeliveryTimeLimit

string (Duration format)

Especifica a duração máxima do início da coleta até o início da entrega de um envio. Se especificado, precisa ser não negativo, e o envio precisa conter pelo menos uma coleta e uma entrega. Isso não depende das alternativas selecionadas para retirada e entrega nem da velocidade do veículo. Isso pode ser especificado junto com as restrições de desvio máximo: a solução vai respeitar as duas especificações.

Duração em segundos com até nove dígitos fracionários, terminando em "s". Exemplo: "3.5s".

shipmentType

string

String não vazia que especifica um "type" para essa remessa. Esse recurso pode ser usado para definir incompatibilidades ou requisitos entre shipment_types (consulte shipmentTypeIncompatibilities e shipmentTypeRequirements em ShipmentModel).

Difere de visitTypes, que é especificado para uma única visita: todas as retiradas/entregas pertencentes ao mesmo envio compartilham o mesmo shipmentType.

label

string

Especifica um rótulo para essa remessa. Esse rótulo é informado na resposta no shipmentLabel do ShipmentRoute.Visit correspondente.

ignore

boolean

Se verdadeiro, pule essa remessa, mas não aplique uma penaltyCost.

Ignorar um envio resulta em um erro de validação quando há shipmentTypeRequirements no modelo.

É permitido ignorar um envio realizado em injectedFirstSolutionRoutes ou injectedSolutionConstraint. O solucionador remove as visitas de retirada/entrega relacionadas da rota em execução. precedenceRules que fazem referência a remessas ignoradas também serão ignoradas.

penaltyCost

number

Se o envio não for concluído, essa penalidade será adicionada ao custo geral das rotas. Um envio é considerado concluído se uma das alternativas de retirada e entrega for visitada. O custo pode ser expresso na mesma unidade usada para todos os outros campos relacionados a custos no modelo e precisa ser positivo.

IMPORTANTE: se essa penalidade não for especificada, ela será considerada infinita, ou seja, o envio precisa ser concluído.

pickupToDeliveryRelativeDetourLimit

number

Especifica o tempo de desvio relativo máximo em comparação com o caminho mais curto da coleta à entrega. Se especificado, precisa ser não negativo, e o envio precisa conter pelo menos uma coleta e uma entrega.

Por exemplo, vamos supor que t seja o tempo mais curto para ir da alternativa de retirada selecionada diretamente para a alternativa de entrega selecionada. Em seguida, a configuração pickupToDeliveryRelativeDetourLimit impõe:

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

Se os limites relativos e absolutos forem especificados no mesmo envio, o mais restritivo será usado para cada par de retirada/entrega possível. Desde outubro de 2017, os desvios são aceitos apenas quando a duração da viagem não depende de veículos.

VisitRequest

Solicitação de uma visita que pode ser feita por um veículo: ele tem uma geolocalização (ou duas, consulte abaixo), horários de abertura e fechamento representados por janelas de tempo e um tempo de duração do serviço (tempo gasto pelo veículo depois que ele chega para retirar ou entregar mercadorias).

Representação JSON
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string
}
Campos
arrivalLocation

object (LatLng)

A geolocalização em que o veículo chega ao realizar essa VisitRequest. Se o modelo de envio tiver matrizes de duração e distância, arrivalLocation não poderá ser especificado.

arrivalWaypoint

object (Waypoint)

O ponto de passagem em que o veículo chega ao realizar essa VisitRequest. Se o modelo de envio tiver matrizes de duração e distância, arrivalWaypoint não poderá ser especificado.

departureLocation

object (LatLng)

O geolocalização de onde o veículo sai após concluir essa VisitRequest. Pode ser omitido se for igual a arrivalLocation. Se o modelo de envio tiver matrizes de duração e distância, departureLocation não poderá ser especificado.

departureWaypoint

object (Waypoint)

O ponto de passagem em que o veículo sai depois de concluir essa VisitRequest. Pode ser omitido se for igual a arrivalWaypoint. Se o modelo de envio tiver matrizes de duração e distância, departureWaypoint não poderá ser especificado.

tags[]

string

Especifica as tags anexadas à solicitação de visita. Strings vazias ou duplicadas não são permitidas.

timeWindows[]

object (TimeWindow)

Janelas de tempo que restringem o horário de chegada em uma visita. Um veículo pode partir fora da janela de horário de chegada, ou seja, o horário de chegada + a duração não precisam estar dentro de uma janela de tempo. Isso pode resultar em tempo de espera se o veículo chegar antes de TimeWindow.start_time.

A ausência de TimeWindow significa que o veículo pode realizar essa visita a qualquer momento.

As janelas de tempo precisam ser distintas, ou seja, nenhuma janela de tempo pode se sobrepor ou ser adjacente a outra, e elas precisam estar em ordem crescente.

costPerHourAfterSoftEndTime e softEndTime só podem ser definidos se houver uma única janela de tempo.

duration

string (Duration format)

Duração da visita, ou seja, o tempo gasto pelo veículo entre a chegada e a partida (para ser adicionado ao tempo de espera possível. Consulte timeWindows).

Duração em segundos com até nove dígitos fracionários, terminando em "s". Exemplo: "3.5s".

cost

number

Custo para atender a solicitação de visita em uma rota de veículo. Isso pode ser usado para pagar custos diferentes para cada retirada ou entrega alternativa de um envio. Esse custo precisa estar na mesma unidade que Shipment.penalty_cost e não pode ser negativo.

loadDemands

map (key: string, value: object (Load))

Carregar as demandas dessa solicitação de visita. É igual ao campo Shipment.load_demands, mas se aplica apenas a esse VisitRequest em vez de todo o Shipment. As demandas listadas aqui são adicionadas às demandas listadas em Shipment.load_demands.

visitTypes[]

string

Especifica os tipos de visita. Isso pode ser usado para alocar mais tempo necessário para que um veículo conclua essa visita (consulte Vehicle.extra_visit_duration_for_visit_type).

Um tipo só pode aparecer uma vez.

label

string

Especifica um rótulo para este VisitRequest. Esse rótulo é informado na resposta como visitLabel no ShipmentRoute.Visit correspondente.

LatLng

Um objeto que representa um par de latitude/longitude. Ele é expresso como um par de valores duplos para representar graus de latitude e longitude. A menos que especificado de outra forma, esse objeto precisa seguir o padrão WGS84. Os valores precisam estar dentro de intervalos normalizados.

Representação JSON
{
  "latitude": number,
  "longitude": number
}
Campos
latitude

number

A latitude em graus. Precisa estar no intervalo [-90,0, +90,0].

longitude

number

A longitude em graus. Precisa estar no intervalo [-180,0, +180,0].

Ponto de referência

Encapsula um ponto de passagem. Os pontos de passagem marcam os locais de chegada e partida de Solicitações de visita e os locais de início e término dos veículos.

Representação JSON
{
  "sideOfRoad": boolean,

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
Campos
sideOfRoad

boolean

Opcional. Indica que o local desse waypoint tem preferência para que o veículo pare em um lado específico da via. Quando você define esse valor, a rota passa pelo local para que o veículo possa parar no lado da estrada em que o local está localizado a partir do centro da via. Essa opção não funciona para o modo de deslocamento "A pé".

Campo de união location_type. Diferentes maneiras de representar um local. location_type pode ser apenas de um dos tipos a seguir:
location

object (Location)

Um ponto especificado usando coordenadas geográficas, incluindo um título opcional.

placeId

string

O ID do lugar do ponto de interesse associado ao ponto de passagem.

Local

Encapsula um local (um ponto geográfico e um título opcional).

Representação JSON
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
Campos
latLng

object (LatLng)

As coordenadas geográficas do ponto de passagem.

heading

integer

A direção da bússola associada à direção do fluxo de tráfego. Esse valor é usado para especificar o lado da estrada a ser usado para retirada e entrega. Os valores de direção podem variar de 0 a 360, em que 0 especifica uma direção de norte, 90 especifica uma direção de leste etc.

TimeWindow

As janelas de tempo restringem o horário de um evento, como o horário de chegada em uma visita ou o início e o término de um veículo.

Os limites rígidos da janela de tempo, startTime e endTime, aplicam o horário mais cedo e mais tarde do evento, de modo que startTime <= event_time <= endTime. O limite inferior da janela de tempo flexível, softStartTime, expressa uma preferência para que o evento ocorra em ou após softStartTime, incorrendo em um custo proporcional ao tempo antes de softStartTime. O limite superior da janela de tempo flexível, softEndTime, expressa uma preferência para que o evento ocorra em ou antes de softEndTime, incorrendo em um custo proporcional ao tempo após softEndTime. startTime, endTime, softStartTime e softEndTime precisam estar dentro dos limites de tempo globais (consulte ShipmentModel.global_start_time e ShipmentModel.global_end_time) e respeitar:

  0 <= `startTime` <= `endTime` and
  0 <= `startTime` <= `softStartTime` and
  0 <= `softEndTime` <= `endTime`.
Representação JSON
{
  "startTime": string,
  "endTime": string,
  "softStartTime": string,
  "softEndTime": string,
  "costPerHourBeforeSoftStartTime": number,
  "costPerHourAfterSoftEndTime": number
}
Campos
startTime

string (Timestamp format)

O horário de início da janela de tempo rígido. Se não for especificado, será definido como ShipmentModel.global_start_time.

Um carimbo de data/hora no formato RFC3339 UTC "Zulu", com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

endTime

string (Timestamp format)

Horário de término da janela de tempo rígido. Se não for especificado, será definido como ShipmentModel.global_end_time.

Um carimbo de data/hora no formato RFC3339 UTC "Zulu", com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

softStartTime

string (Timestamp format)

O horário de início flexível do período.

Um carimbo de data/hora no formato RFC3339 UTC "Zulu", com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

softEndTime

string (Timestamp format)

O horário de término flexível da janela.

Um carimbo de data/hora no formato RFC3339 UTC "Zulu", com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

costPerHourBeforeSoftStartTime

number

Um custo por hora adicionado a outros custos no modelo se o evento ocorrer antes de softStartTime, calculado como:

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

Esse custo precisa ser positivo, e o campo só pode ser definido se softStartTime tiver sido definido.

costPerHourAfterSoftEndTime

number

Um custo por hora adicionado a outros custos no modelo se o evento ocorrer após softEndTime, calculado como:

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

Esse custo precisa ser positivo, e o campo só pode ser definido se softEndTime tiver sido definido.

Veículo

Modela um veículo em um problema de envio. A solução de um problema de envio vai criar uma rota que começa em startLocation e termina em endLocation para esse veículo. Um trajeto é uma sequência de visitas (consulte ShipmentRoute).

Representação JSON
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "routeModifiers": {
    object (RouteModifiers)
  },
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
Campos
displayName

string

O nome de exibição do veículo definido pelo usuário. Ele pode ter até 63 caracteres e pode usar caracteres UTF-8.

travelMode

enum (TravelMode)

O modo de viagem, que afeta as vias que podem ser usadas pelo veículo e a velocidade dele. Consulte também travelDurationMultiple.

routeModifiers

object (RouteModifiers)

Um conjunto de condições a serem atendidas que afetam a forma como as rotas são calculadas para o veículo.

startLocation

object (LatLng)

Local geográfico em que o veículo começa antes de pegar os envios. Se não for especificado, o veículo vai começar na primeira coleta. Se o modelo de envio tiver matrizes de duração e distância, startLocation não poderá ser especificado.

startWaypoint

object (Waypoint)

Ponto de passagem que representa um local geográfico em que o veículo começa antes de pegar os envios. Se nem startWaypoint nem startLocation forem especificados, o veículo vai começar na primeira coleta. Se o modelo de envio tiver matrizes de duração e distância, startWaypoint não poderá ser especificado.

endLocation

object (LatLng)

Localização geográfica onde o veículo termina depois de concluir a última VisitRequest. Se não for especificado, o ShipmentRoute do veículo será encerrado imediatamente após a conclusão da última VisitRequest. Se o modelo de envio tiver matrizes de duração e distância, endLocation não poderá ser especificado.

endWaypoint

object (Waypoint)

Ponto de passagem que representa um local geográfico onde o veículo termina depois de concluir o último VisitRequest. Se nem endWaypoint nem endLocation forem especificados, o ShipmentRoute do veículo será encerrado imediatamente quando ele concluir o último VisitRequest. Se o modelo de envio tiver matrizes de duração e distância, endWaypoint não poderá ser especificado.

startTags[]

string

Especifica as tags anexadas ao início do trajeto do veículo.

Strings vazias ou duplicadas não são permitidas.

endTags[]

string

Especifica as tags anexadas ao fim do trajeto do veículo.

Strings vazias ou duplicadas não são permitidas.

startTimeWindows[]

object (TimeWindow)

Janelas de tempo em que o veículo pode sair do local de partida. Eles precisam estar dentro dos limites de tempo globais (consulte os campos ShipmentModel.global_*). Se não for especificado, não haverá limitação além desses limites globais.

As janelas de tempo pertencentes ao mesmo campo repetido precisam ser distintas, ou seja, nenhuma janela de tempo pode se sobrepor ou ser adjacente a outra, e elas precisam estar em ordem cronológica.

costPerHourAfterSoftEndTime e softEndTime só podem ser definidos se houver uma única janela de tempo.

endTimeWindows[]

object (TimeWindow)

Janelas de tempo em que o veículo pode chegar ao local final. Eles precisam estar dentro dos limites de tempo globais (consulte os campos ShipmentModel.global_*). Se não for especificado, não haverá limitação além desses limites globais.

As janelas de tempo pertencentes ao mesmo campo repetido precisam ser distintas, ou seja, nenhuma janela de tempo pode se sobrepor ou ser adjacente a outra, e elas precisam estar em ordem cronológica.

costPerHourAfterSoftEndTime e softEndTime só podem ser definidos se houver uma única janela de tempo.

unloadingPolicy

enum (UnloadingPolicy)

Política de descarregamento aplicada ao veículo.

loadLimits

map (key: string, value: object (LoadLimit))

Capacidades do veículo (peso, volume, número de paletes, por exemplo). As chaves no mapa são os identificadores do tipo de carga, consistentes com as chaves do campo Shipment.load_demands. Se uma determinada chave estiver ausente nesse mapa, a capacidade correspondente será considerada ilimitada.

costPerHour

number

Custos do veículo: todos os custos são somados e precisam estar na mesma unidade que Shipment.penalty_cost.

Custo por hora da rota do veículo. Esse custo é aplicado ao tempo total gasto no trajeto e inclui o tempo de viagem, de espera e de visita. O uso de costPerHour em vez de apenas costPerTraveledHour pode resultar em mais latência.

costPerTraveledHour

number

Custo por hora de percurso do trajeto do veículo. Esse custo é aplicado apenas ao tempo de viagem do trajeto (ou seja, o que é informado em ShipmentRoute.transitions) e exclui o tempo de espera e de visita.

costPerKilometer

number

Custo por quilômetro da rota do veículo. Esse custo é aplicado à distância informada no ShipmentRoute.transitions e não se aplica a nenhuma distância percorrida implicitamente do arrivalLocation para o departureLocation de um único VisitRequest.

fixedCost

number

Custo fixo aplicado se o veículo for usado para processar um envio.

usedIfRouteIsEmpty

boolean

Este campo só se aplica a veículos quando a rota não atende a nenhum envio. Ele indica se o veículo deve ser considerado usado ou não nesse caso.

Se verdadeiro, o veículo vai da origem ao destino, mesmo que não atenda a nenhum envio, e os custos de tempo e distância resultantes da viagem de origem a destino são levados em consideração.

Caso contrário, o veículo não vai se deslocar do local de início ao de destino, e nenhum breakRule ou atraso (de TransitionAttributes) será programado para ele. Nesse caso, o ShipmentRoute do veículo não contém nenhuma informação, exceto o índice e o rótulo do veículo.

routeDurationLimit

object (DurationLimit)

Limite aplicado à duração total da rota do veículo. Em um determinado OptimizeToursResponse, a duração da rota de um veículo é a diferença entre o vehicleEndTime e o vehicleStartTime.

travelDurationLimit

object (DurationLimit)

Limite aplicado à duração da viagem da rota do veículo. Em um determinado OptimizeToursResponse, a duração do trajeto é a soma de todos os transitions.travel_duration.

routeDistanceLimit

object (DistanceLimit)

Limite aplicado à distância total da rota do veículo. Em um determinado OptimizeToursResponse, a distância da rota é a soma de todos os transitions.travel_distance_meters.

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

Especifica um mapa de strings de visitTypes para durações. A duração é o tempo além do VisitRequest.duration que será gasto nas visitas com o visitTypes especificado. Essa duração de visita extra aumenta o custo se costPerHour for especificado. As chaves (por exemplo, visitTypes) não podem ser strings vazias.

Se uma solicitação de visita tiver vários tipos, uma duração será adicionada para cada tipo no mapa.

breakRule

object (BreakRule)

Descreve a programação de pausas a ser aplicada a esse veículo. Se estiver vazio, nenhuma pausa será programada para esse veículo.

label

string

Especifica um rótulo para este veículo. Esse rótulo é informado na resposta como o vehicleLabel do ShipmentRoute correspondente.

ignore

boolean

Se for verdadeiro, usedIfRouteIsEmpty precisa ser falso, e esse veículo vai permanecer sem uso.

Se um envio for realizado por um veículo ignorado em injectedFirstSolutionRoutes, ele será ignorado na primeira solução, mas poderá ser realizado na resposta.

Se um envio for realizado por um veículo ignorado em injectedSolutionConstraint e qualquer coleta/entrega relacionada for obrigada a permanecer no veículo (ou seja, não for relaxada para o nível RELAX_ALL_AFTER_THRESHOLD), ela será ignorada na resposta. Se um envio tiver um campo allowedVehicleIndices não vazio e todos os veículos permitidos forem ignorados, ele será ignorado na resposta.

travelDurationMultiple

number

Especifica um fator multiplicador que pode ser usado para aumentar ou diminuir os tempos de viagem desse veículo. Por exemplo, definir esse valor como 2,0 significa que o veículo é mais lento e tem tempos de viagem duas vezes maiores do que os veículos padrão. Esse valor não afeta a duração das visitas. Isso afeta o custo se costPerHour ou costPerTraveledHour forem especificados. Precisa estar no intervalo [0,001, 1.000,0]. Se não for definido, o veículo será padrão e esse múltiplo será considerado 1, 0.

ATENÇÃO: os tempos de viagem serão arredondados para o segundo mais próximo depois que esse múltiplo for aplicado, mas antes de realizar qualquer operação numérica. Portanto, um múltiplo pequeno pode resultar em perda de precisão.

Consulte também extraVisitDurationForVisitType abaixo.

TravelMode

Meios de transporte que podem ser usados por veículos.

Eles precisam ser um subconjunto dos modos de transporte da API Preferred Routes da Plataforma Google Maps. Consulte: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.

Enums
TRAVEL_MODE_UNSPECIFIED Meio de transporte não especificado, equivalente a DRIVING.
DRIVING Meio de transporte correspondente às rotas de carro (carro, ...).
WALKING Meio de transporte correspondente às rotas a pé.

RouteModifiers

Encapsula um conjunto de condições opcionais a serem atendidas ao calcular rotas de veículos. Isso é semelhante a RouteModifiers na API Preferred Routes da Plataforma Google Maps. Consulte: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.

Representação JSON
{
  "avoidTolls": boolean,
  "avoidHighways": boolean,
  "avoidFerries": boolean,
  "avoidIndoor": boolean
}
Campos
avoidTolls

boolean

Especifica se é necessário evitar vias com pedágio sempre que possível. A preferência será dada às rotas que não contêm vias com pedágio. Aplica-se apenas a modos de transporte motorizados.

avoidHighways

boolean

Especifica se é necessário evitar rodovias, quando for razoável. A preferência será dada a rotas que não contêm rodovias. Aplica-se apenas a modos de transporte motorizados.

avoidFerries

boolean

Especifica se é necessário evitar balsas. A preferência será dada às rotas que não incluem viagens de balsa. Aplica-se apenas a modos de transporte motorizados.

avoidIndoor

boolean

Opcional. Especifica se é necessário evitar a navegação em ambientes internos quando for razoável. A preferência será dada às rotas que não contêm navegação interna. Aplica-se apenas ao modo de viagem WALKING.

UnloadingPolicy

Política sobre como um veículo pode ser descarregado. Aplica-se apenas a remessas com retirada e entrega.

Outros envios podem ocorrer em qualquer lugar da rota, independente de unloadingPolicy.

Enums
UNLOADING_POLICY_UNSPECIFIED Política de descarregamento não especificada. As entregas precisam ocorrer após as respectivas coletas.
LAST_IN_FIRST_OUT As entregas precisam ocorrer na ordem inversa das retiradas
FIRST_IN_FIRST_OUT As entregas precisam ocorrer na mesma ordem das retiradas

LoadLimit

Define um limite de carga aplicável a um veículo, por exemplo, "este caminhão só pode transportar até 3.500 kg". Consulte loadLimits.

Representação JSON
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string
}
Campos
softMaxLoad

string (int64 format)

Um limite flexível da carga. Consulte costPerUnitAboveSoftMax.

costPerUnitAboveSoftMax

number

Se a carga exceder softMaxLoad ao longo da rota do veículo, a seguinte penalidade de custo será aplicada (apenas uma vez por veículo): (carga - softMaxLoad) * costPerUnitAboveSoftMax. Todos os custos são somados e precisam estar na mesma unidade que Shipment.penalty_cost.

startLoadInterval

object (Interval)

O intervalo de carga aceitável do veículo no início do trajeto.

endLoadInterval

object (Interval)

O intervalo de carga aceitável do veículo no fim da rota.

maxLoad

string (int64 format)

A quantidade máxima aceitável de carga.

Intervalo

Intervalo de valores de carga aceitáveis.

Representação JSON
{
  "min": string,
  "max": string
}
Campos
min

string (int64 format)

Uma carga mínima aceitável. Precisa ser ≥ 0. Se ambos forem especificados, min precisa ser ≤ max.

max

string (int64 format)

Uma carga máxima aceitável. Precisa ser ≥ 0. Se não for especificado, a carga máxima não será restringida por essa mensagem. Se ambos forem especificados, min precisa ser ≤ max.

DurationLimit

Um limite que define a duração máxima do trajeto de um veículo. Ele pode ser hardware ou software.

Quando um campo de limite flexível é definido, o limite máximo flexível e o custo associado precisam ser definidos juntos.

Representação JSON
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
Campos
maxDuration

string (Duration format)

Um limite rígido que restringe a duração a, no máximo, maxDuration.

Duração em segundos com até nove dígitos fracionários, terminando em "s". Exemplo: "3.5s".

softMaxDuration

string (Duration format)

Um limite flexível que não aplica um limite máximo de duração, mas que, quando violado, faz com que a rota incorra em um custo. Esse custo é somado a outros custos definidos no modelo, com a mesma unidade.

Se definido, softMaxDuration precisa ser não negativo. Se maxDuration também for definido, softMaxDuration precisará ser menor que maxDuration.

Duração em segundos com até nove dígitos fracionários, terminando em "s". Exemplo: "3.5s".

quadraticSoftMaxDuration

string (Duration format)

Um limite flexível não aplica um limite máximo de duração, mas, quando violado, faz com que a rota incorra em um custo, quadrático na duração. Esse custo é somado a outros custos definidos no modelo, com a mesma unidade.

Se definido, quadraticSoftMaxDuration precisa ser não negativo. Se maxDuration também for definido, quadraticSoftMaxDuration precisará ser menor que maxDuration, e a diferença não poderá ser maior que um dia:

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

Duração em segundos com até nove dígitos fracionários, terminando em "s". Exemplo: "3.5s".

costPerHourAfterSoftMax

number

Custo por hora incorrido se o limite de softMaxDuration for violado. O custo adicional será 0 se a duração estiver abaixo do limite. Caso contrário, o custo vai depender da duração da seguinte forma:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

O custo não pode ser negativo.

costPerSquareHourAfterQuadraticSoftMax

number

Custo por hora quadrada incorrido se o limite de quadraticSoftMaxDuration for violado.

O custo adicional será 0 se a duração estiver abaixo do limite. Caso contrário, o custo vai depender da duração da seguinte forma:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

O custo não pode ser negativo.

DistanceLimit

Um limite que define a distância máxima que pode ser percorrida. Ele pode ser hardware ou software.

Se um limite flexível for definido, softMaxMeters e costPerKilometerAboveSoftMax também precisarão ser definidos e não podem ser negativos.

Representação JSON
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerBelowSoftMax": number,
  "costPerKilometerAboveSoftMax": number
}
Campos
maxMeters

string (int64 format)

Um limite rígido que restringe a distância a no máximo maxMeters. O limite não pode ser negativo.

softMaxMeters

string (int64 format)

Um limite flexível não aplica um limite máximo de distância, mas, quando violado, resulta em um custo que se soma a outros custos definidos no modelo, com a mesma unidade.

Se definido, softMaxMeters precisa ser menor que maxMeters e não negativo.

costPerKilometerBelowSoftMax

number

Custo por quilômetro incorrido, aumentando até softMaxMeters, com a fórmula:

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

Esse custo não é aceito em routeDistanceLimit.

costPerKilometerAboveSoftMax

number

Custo por quilômetro incorrido se a distância for superior ao limite de softMaxMeters. O custo adicional é 0 se a distância estiver abaixo do limite. Caso contrário, a fórmula usada para calcular o custo é a seguinte:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

O custo não pode ser negativo.

BreakRule

Regras para gerar intervalos de tempo para um veículo (por exemplo, intervalos para almoço). Uma pausa é um período contíguo em que o veículo permanece ocioso na posição atual e não pode realizar nenhuma visita. Uma pausa pode ocorrer:

  • durante o deslocamento entre duas visitas (que inclui o tempo imediatamente antes ou depois de uma visita, mas não no meio dela). Nesse caso, o tempo de trânsito correspondente entre as visitas é estendido,
  • ou antes do início do veículo (o veículo não pode começar no meio de uma pausa). Nesse caso, o início do veículo não é afetado.
  • ou após o término do veículo (idem, com o horário de término do veículo).
Representação JSON
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
Campos
breakRequests[]

object (BreakRequest)

Sequência de intervalos. Confira a mensagem BreakRequest.

frequencyConstraints[]

object (FrequencyConstraint)

Várias FrequencyConstraint podem ser aplicadas. Todos eles precisam ser atendidos pelos BreakRequests deste BreakRule. Consulte FrequencyConstraint.

BreakRequest

A sequência de intervalos (ou seja, o número e a ordem) que se aplicam a cada veículo precisa ser conhecida com antecedência. Os BreakRequests repetidos definem essa sequência, na ordem em que precisam ocorrer. Os intervalos de tempo (earliestStartTime / latestStartTime) podem se sobrepor, mas precisam ser compatíveis com o pedido (isso é verificado).

Representação JSON
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
Campos
earliestStartTime

string (Timestamp format)

Obrigatório. Limite inferior (inclusive) no início da pausa.

Um carimbo de data/hora no formato RFC3339 UTC "Zulu", com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

latestStartTime

string (Timestamp format)

Obrigatório. Limite superior (inclusivo) no início da pausa.

Um carimbo de data/hora no formato RFC3339 UTC "Zulu", com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

minDuration

string (Duration format)

Obrigatório. Duração mínima do intervalo. Precisa ser positivo.

Duração em segundos com até nove dígitos fracionários, terminando em "s". Exemplo: "3.5s".

FrequencyConstraint

É possível restringir ainda mais a frequência e a duração dos intervalos especificados acima, impondo uma frequência mínima de intervalo, como "É preciso ter um intervalo de pelo menos 1 hora a cada 12 horas". Supondo que isso possa ser interpretado como "Em qualquer janela de tempo deslizante de 12 horas, deve haver pelo menos uma pausa de pelo menos uma hora", esse exemplo seria traduzido para o seguinte FrequencyConstraint:

{
   minBreakDuration { seconds: 3600 }         # 1 hour.
   maxInterBreakDuration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

O tempo e a duração dos intervalos na solução vão respeitar todas essas restrições, além das janelas de tempo e durações mínimas já especificadas no BreakRequest.

Na prática, um FrequencyConstraint pode ser aplicado a intervalos não consecutivos. Por exemplo, a programação a seguir respeita o exemplo de "1h a cada 12h":

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
Representação JSON
{
  "minBreakDuration": string,
  "maxInterBreakDuration": string
}
Campos
minBreakDuration

string (Duration format)

Obrigatório. Duração mínima do intervalo para essa restrição. Não negativo. Consulte a descrição de FrequencyConstraint.

Duração em segundos com até nove dígitos fracionários, terminando em "s". Exemplo: "3.5s".

maxInterBreakDuration

string (Duration format)

Obrigatório. Intervalo máximo permitido de qualquer intervalo de tempo no trajeto que não inclua pelo menos parcialmente uma pausa de duration >= minBreakDuration. Precisa ser positivo.

Duração em segundos com até nove dígitos fracionários, terminando em "s". Exemplo: "3.5s".

DurationDistanceMatrix

Especifica uma matriz de duração e distância dos locais de início e término da visita e do veículo.

Representação JSON
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
Campos
rows[]

object (Row)

Especifica as linhas da matriz de duração e distância. Ele precisa ter tantos elementos quanto ShipmentModel.duration_distance_matrix_src_tags.

vehicleStartTag

string

Tag que define a quais veículos essa matriz de duração e distância se aplica. Se estiver vazio, isso se aplica a todos os veículos, e só pode haver uma matriz.

Cada início de veículo precisa corresponder a exatamente uma matriz, ou seja, exatamente um dos campos startTags precisa corresponder ao vehicleStartTag de uma matriz (e apenas dessa matriz).

Todas as matrizes precisam ter um vehicleStartTag diferente.

Linha

Especifica uma linha da matriz de duração e distância.

Representação JSON
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
Campos
durations[]

string (Duration format)

Valores de duração para uma linha específica. Ele precisa ter tantos elementos quanto ShipmentModel.duration_distance_matrix_dst_tags.

Duração em segundos com até nove dígitos fracionários, terminando em "s". Exemplo: "3.5s".

meters[]

number

Valores de distância para uma linha específica. Se nenhum custo ou restrição se referir a distâncias no modelo, esse campo pode ficar em branco. Caso contrário, ele precisa ter tantos elementos quanto durations.

TransitionAttributes

Especifica os atributos das transições entre duas visitas consecutivas em um trajeto. Várias TransitionAttributes podem ser aplicadas à mesma transição. Nesse caso, todos os custos extras são somados e a restrição ou o limite mais rigoroso é aplicado, seguindo a semântica "E" natural.

Representação JSON
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
Campos
srcTag

string

Tags que definem o conjunto de transições (src->dst) a que esses atributos se aplicam.

Uma visita de origem ou início do veículo corresponde se o VisitRequest.tags ou Vehicle.start_tags contiver srcTag ou não contiver excludedSrcTag (dependendo de qual dos dois campos não estiver vazio).

excludedSrcTag

string

Consulte srcTag. Exatamente um dos srcTag e excludedSrcTag precisa não estar vazio.

dstTag

string

Uma visita ao destino ou o fim do veículo corresponde se VisitRequest.tags ou Vehicle.end_tags contêm dstTag ou não contêm excludedDstTag (dependendo de qual dos dois campos não está vazio).

excludedDstTag

string

Consulte dstTag. Exatamente um dos dstTag e excludedDstTag precisa não estar vazio.

cost

number

Especifica um custo para realizar essa transição. Esse valor está na mesma unidade que todos os outros custos no modelo e não pode ser negativo. Ele é aplicado sobre todos os outros custos existentes.

costPerKilometer

number

Especifica um custo por quilômetro aplicado à distância percorrida ao realizar essa transição. Ele é a soma de todos os Vehicle.cost_per_kilometer especificados nos veículos.

distanceLimit

object (DistanceLimit)

Especifica um limite na distância percorrida ao realizar essa transição.

A partir de junho de 2021, apenas os limites flexíveis são aceitos.

delay

string (Duration format)

Especifica um atraso incorrido ao realizar essa transição.

Esse atraso sempre ocorre após a conclusão da visita de origem e antes do início da visita de destino.

Duração em segundos com até nove dígitos fracionários, terminando em "s". Exemplo: "3.5s".

ShipmentTypeIncompatibility

Especifica incompatibilidades entre remessas, dependendo do tipo de remessa. A exibição de remessas incompatíveis no mesmo trajeto é restrita com base no modo de incompatibilidade.

Representação JSON
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
Campos
types[]

string

Lista de tipos incompatíveis. Dois envios com shipment_types diferentes entre os listados são "incompatíveis".

incompatibilityMode

enum (IncompatibilityMode)

Modo aplicado à incompatibilidade.

IncompatibilityMode

Modos que definem como a aparência de remessas incompatíveis é restrita na mesma rota.

Enums
INCOMPATIBILITY_MODE_UNSPECIFIED Modo de incompatibilidade não especificado. Esse valor nunca pode ser usado.
NOT_PERFORMED_BY_SAME_VEHICLE Nesse modo, dois envios com tipos incompatíveis nunca podem compartilhar o mesmo veículo.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

Para dois envios com tipos incompatíveis com o modo de incompatibilidade NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY:

  • Se as duas entregas forem apenas de retirada (sem entregas) ou apenas de entrega (sem retiradas), elas não poderão compartilhar o mesmo veículo.
  • Se um dos envios tiver uma entrega e o outro uma retirada, os dois envios poderão compartilhar o mesmo veículo se o primeiro for entregue antes que o segundo seja retirado.

ShipmentTypeRequirement

Especifica os requisitos entre os envios com base no tipo de envio. Os detalhes do requisito são definidos pelo modo de requisito.

Representação JSON
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
Campos
requiredShipmentTypeAlternatives[]

string

Lista de tipos de envio alternativos exigidos pelo dependentShipmentTypes.

dependentShipmentTypes[]

string

Todos os envios com um tipo no campo dependentShipmentTypes exigem que pelo menos um envio do tipo requiredShipmentTypeAlternatives seja visitado no mesmo trajeto.

OBSERVAÇÃO: não são permitidas cadeias de requisitos em que um shipmentType depende de si mesmo.

requirementMode

enum (RequirementMode)

Modo aplicado ao requisito.

RequirementMode

Modos que definem a aparência de remessas dependentes em um trajeto.

Enums
REQUIREMENT_MODE_UNSPECIFIED Modo de requisito não especificado. Esse valor nunca pode ser usado.
PERFORMED_BY_SAME_VEHICLE Nesse modo, todos os envios "dependentes" precisam compartilhar o mesmo veículo de pelo menos um dos envios "obrigatórios".
IN_SAME_VEHICLE_AT_PICKUP_TIME

Com o modo IN_SAME_VEHICLE_AT_PICKUP_TIME, todos os envios "dependentes" precisam ter pelo menos um envio "obrigatório" no veículo no momento da coleta.

Portanto, uma retirada de envio "dependente" precisa ter:

  • Um envio "obrigatório" somente para entrega entregue na rota após
  • Um envio "obrigatório" foi coletado na rota antes dele, e se o envio "obrigatório" tiver uma entrega, ela precisará ser realizada após a coleta do envio "dependente".
IN_SAME_VEHICLE_AT_DELIVERY_TIME Igual antes, exceto que os envios "dependentes" precisam ter um envio "obrigatório" no veículo no momento da entrega.

PrecedenceRule

Uma regra de precedência entre dois eventos (cada evento é a retirada ou a entrega de um envio): o "segundo" evento precisa começar pelo menos offsetDuration depois do "primeiro".

Várias precedências podem se referir aos mesmos eventos (ou relacionados), por exemplo, "A retirada de B acontece após a entrega de A" e "A retirada de C acontece após a retirada de B".

Além disso, as precedências só são aplicadas quando os dois envios são realizados e são ignoradas de outra forma.

Representação JSON
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
Campos
firstIsDelivery

boolean

Indica se o evento "primeiro" é uma entrega.

secondIsDelivery

boolean

Indica se o "segundo" evento é uma entrega.

offsetDuration

string (Duration format)

O deslocamento entre o "primeiro" e o "segundo" evento. Ele pode ser negativo.

Duração em segundos com até nove dígitos fracionários, terminando em "s". Exemplo: "3.5s".

firstIndex

integer

Índice de envio do evento "primeiro". É necessário especificar este campo.

secondIndex

integer

Índice de envio do "segundo" evento. É necessário especificar este campo.