ShipmentModel

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

  • o custo de rotear os veículos (soma do custo por tempo total, custo por tempo de viagem e custo fixo de todos os veículos).
  • as penalidades de remessas não realizadas.
  • o custo da duração global dos fretes
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 devem ser executadas no modelo.

vehicles[]

object (Vehicle)

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

globalStartTime

string (Timestamp format)

Horários globais de início e término 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, globalEndTime e globalStartTime precisam ter no máximo 31536.000 segundos um do outro.

Ao usar campos cost_per_*hour, defina essa janela com um intervalo menor para melhorar o desempenho. Por exemplo, se você modelar um único dia, precisará definir os limites de tempo globais para esse dia. Se não for definido, será usado como padrão 00:00:00 UTC, 1o 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, será usado como padrão 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 efetivo mais próximo e o horário de término efetivo mais recente de todos os veículos. Os usuários podem atribuir um custo por hora a essa quantidade para tentar otimizar para a conclusão da tarefa mais cedo, por exemplo. Esse custo deve estar na mesma unidade que Shipment.penalty_cost.

durationDistanceMatrices[]

object (DurationDistanceMatrix)

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

Exemplos de uso:

  • Existem dois locais: locA e locB.
  • 1 veículo começando em locA e terminando em locA.
  • 1 solicitação de visita para 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
    }
  }
}
  • Existem três locais: locA, locB e locC.
  • 1 veículo começando em locA e terminando em locB, usando a matriz "fast".
  • 1 veículo começando em locB e terminando em locB, usando a matriz "lento".
  • 1 veículo começando em locB e terminando em locB, usando a matriz "fast".
  • 1 solicitação de visita para 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) até outras visitas na matriz i.

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

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 (resp. à distância) da viagem entre as visitas com a tag durationDistanceMatrixSrcTags(j) e as visitas com a tag durationDistanceMatrixDstTags(k) na matriz i.

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

transitionAttributes[]

object (TransitionAttributes)

Atributos de transição adicionados ao modelo.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

Conjuntos de bundle_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

Restringe o número máximo de veículos ativos. Um veículo estará ativo se sua rota realizar pelo menos uma remessa. Isso pode ser usado para limitar o número de rotas no caso em que há menos motoristas do que veículos e a frota de veículos é heterogênea. A otimização vai selecionar o melhor subconjunto de veículos para uso. Precisa ser estritamente positivo.

Envio

Envio de um único item, de uma das retiradas até uma das entregas. Para que o frete seja considerado realizado, um veículo único precisa visitar um dos locais de coleta (e diminuir a capacidade extra de acordo com isso) e, depois, visitar um dos locais de entrega (aumentar a capacidade extra de acordo com isso).

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 definido pelo usuário para o envio. Ele pode ter até 63 caracteres e usar caracteres UTF-8.

pickups[]

object (VisitRequest)

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

deliveries[]

object (VisitRequest)

Conjunto de alternativas de entrega associadas à remessa. Se não for especificado, o veículo só vai precisar visitar um local correspondente às retiradas.

loadDemands

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

Carregue as demandas do envio (por exemplo, peso, volume, número de paletes etc.). As chaves no mapa devem ser identificadores que descrevem o tipo da carga correspondente, idealmente 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.

Um objeto com uma lista de pares "key": value. Exemplo: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

allowedVehicleIndices[]

integer

O conjunto de veículos que pode realizar este envio. Se estiver vazio, isso poderá ser feito por todos os veículos. Os veículos são informados pelo índice na lista vehicles do ShipmentModel.

costsPerVehicle[]

number

Especifica o custo incorrido quando esta remessa for 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 número de elementos e de veículos do modelo. O i-ésimo elemento corresponde ao veículo #i do modelo.

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

costsPerVehicleIndices[]

integer

Índices dos veículos aos quais costsPerVehicle se aplica. Se não estiver vazio, ele 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 máximo de desvio absoluto em comparação com o caminho mais curto entre o embarque e a entrega. Se especificado, o valor não pode ser negativo e a remessa precisa conter pelo menos uma retirada e uma entrega.

Por exemplo, permita que t seja o menor tempo necessário para ir da opção de retirada selecionada diretamente até a opção de entrega selecionada. Em seguida, definir pickupToDeliveryAbsoluteDetourLimit aplica:

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

Se os limites relativos e absolutos forem especificados na mesma remessa, o limite mais restrito será usado para cada par de retirada/entrega possível. Desde 2017/10, os desvios só são permitidos 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 entre o início da retirada e o início da entrega de uma remessa. Se especificado, o valor não pode ser negativo e a remessa precisa conter pelo menos uma retirada e uma entrega. Isso não depende das alternativas selecionadas para retirada e entrega nem da velocidade do veículo. Isso pode ser especificado ao lado de restrições de desvio máximo: a solução 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 "tipo" para esse envio. Esse recurso pode ser usado para definir incompatibilidades ou requisitos entre shipment_types (consulte shipmentTypeIncompatibilities e shipmentTypeRequirements em ShipmentModel).

É diferente de visitTypes, que é especificado para uma única visita: todas as retiradas/entregas referentes à mesma remessa compartilham o mesmo shipmentType.

label

string

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

ignore

boolean

Se verdadeiro, ignore esse envio, mas não aplique um penaltyCost.

Ignorar uma remessa vai resultar em um erro de validação quando houver shipmentTypeRequirements no modelo.

É permitido ignorar uma remessa realizada em injectedFirstSolutionRoutes ou injectedSolutionConstraint. o solucionador remove as visitas de retirada/entrega relacionadas da rota em questão. Os precedenceRules que fazem referência a fretes ignorados também serão ignorados.

penaltyCost

number

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

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

pickupToDeliveryRelativeDetourLimit

number

Especifica o tempo máximo de desvio relativo em comparação com o caminho mais curto entre o embarque e a entrega. Se especificado, o valor não pode ser negativo e a remessa precisa conter pelo menos uma retirada e uma entrega.

Por exemplo, permita que t seja o menor tempo necessário para ir da opção de retirada selecionada diretamente até a opção de entrega selecionada. Em seguida, definir pickupToDeliveryRelativeDetourLimit aplica:

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

Se os limites relativos e absolutos forem especificados na mesma remessa, o limite mais restrito será usado para cada par de retirada/entrega possível. Desde 2017/10, os desvios só são permitidos quando a duração da viagem não depende de veículos.

VisitRequest

Solicitação de visita que pode ser feita por um veículo: ela tem uma localização geográfica (ou duas, conforme mostrado abaixo), horários de abertura e fechamento representados por janelas de horário e um tempo de duração do serviço (tempo gasto pelo veículo depois de chegar à coleta ou entrega de produtos).

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 localização geográfica de onde o veículo chega ao realizar este VisitRequest. Se o modelo de remessa tiver matrizes de distância de duração, arrivalLocation não precisará ser especificado.

arrivalWaypoint

object (Waypoint)

O waypoint onde o veículo chega ao realizar esta VisitRequest. Se o modelo de remessa tiver matrizes de distância de duração, arrivalWaypoint não precisará ser especificado.

departureLocation

object (LatLng)

A localização geográfica de onde o veículo sai depois de concluir este VisitRequest. Pode ser omitido se for igual a arrivalLocation. Se o modelo de remessa tiver matrizes de distância de duração, departureLocation não precisará ser especificado.

departureWaypoint

object (Waypoint)

O waypoint de partida do veículo depois de concluir esta VisitRequest. Pode ser omitido se for igual a arrivalWaypoint. Se o modelo de remessa tiver matrizes de distância de duração, departureWaypoint não precisará 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 sair da janela de horário de chegada, ou seja, o horário de chegada + duração não precisam estar dentro de uma janela de horário. Isso poderá 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 fazer essa visita a qualquer momento.

As janelas de tempo precisam ser separadas, ou seja, não podem se sobrepor ou ficar adjacentes a outra e precisam estar em ordem crescente.

costPerHourAfterSoftEndTime e softEndTime só poderão 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 (a ser adicionado ao possível tempo de espera; 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 essa solicitação de visita em um trajeto de veículo. Ele pode ser usado para pagar custos diferentes para cada retirada ou entrega alternativa de um produto. Esse custo precisa estar na mesma unidade que Shipment.penalty_cost e não pode ser negativo.

loadDemands

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

Carregue as demandas desta solicitação de visita. Ele é parecido com o campo Shipment.load_demands, mas se aplica apenas a esse VisitRequest, e não a todo o Shipment. As demandas listadas aqui são adicionadas àquelas listadas em Shipment.load_demands.

Um objeto com uma lista de pares "key": value. Exemplo: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

visitTypes[]

string

Especifica os tipos de visita. Pode ser usado para alocar o tempo necessário para que um veículo conclua a visita (consulte Vehicle.extra_visit_duration_for_visit_type).

Cada 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. Salvo indicação em contrário, esse objeto precisa estar em conformidade com 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 waypoint. Os waypoints marcam os locais de chegada e partida de VisitRequests 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 deste waypoint deve ter uma preferência quanto à parada do veículo em um lado específico da via. Quando você define esse valor, o trajeto passa pelo local para que o veículo possa parar no lado da via para a qual o local está direcionado do centro da estrada. Esta opção não funciona para "WALKING" meio de transporte.

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

object (Location)

Um ponto especificado por meio de coordenadas geográficas, incluindo um cabeçalho opcional.

placeId

string

O ID de lugar do PDI associado ao waypoint.

Local

Encapsula um local (um ponto geográfico e um cabeçalho opcional).

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

object (LatLng)

As coordenadas geográficas do waypoint.

heading

integer

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

TimeWindow

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

Os limites de janela de tempo rígido, startTime e endTime, aplicam os horários mais antigos e mais recentes do evento, de modo que startTime <= event_time <= endTime. O limite inferior da janela de tempo flexível, softStartTime, expressa uma preferência pela ocorrência do evento em softStartTime ou depois, incorrendo em um custo proporcional ao tempo antes da softStartTime em que o evento ocorre. O limite superior da janela de tempo flexível, softEndTime, expressa uma preferência pela ocorrência do evento em softEndTime ou antes dele, incorrendo em um custo proporcional ao tempo após softEndTime ocorrer. startTime, endTime, softStartTime e softEndTime precisam estar dentro dos limites de tempo globais (consulte ShipmentModel.global_start_time e ShipmentModel.global_end_time) e devem respeitar:

  0 <= `startTime` <= `softStartTime` <= `endTime` and
  0 <= `startTime` <= `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 de hardware. Se não for especificado, ele 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)

O horário de término da janela de tempo de hardware. Se não for especificado, ele 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 da janela de tempo.

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 de tempo.

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 do softStartTime, calculado como:

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

Esse custo deve 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 remessa. Resolver um problema de frete criará um trajeto entre startLocation e endLocation para este veículo. Um trajeto é uma sequência de visitas (consulte ShipmentRoute).

Representação JSON
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "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

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

travelMode

enum (TravelMode)

O meio de transporte que afeta as vias utilizáveis pelo veículo e a velocidade dele. Consulte também travelDurationMultiple.

startLocation

object (LatLng)

Localização geográfica em que o veículo inicia antes de retirar qualquer remessa. Se não for especificado, o veículo será iniciado na primeira retirada. Se o modelo de envio tiver matrizes de duração e distância, startLocation não precisará ser especificado.

startWaypoint

object (Waypoint)

Waypoint que representa uma localização geográfica em que o veículo começa antes de retirar qualquer remessa. Se startWaypoint e startLocation não forem especificados, o veículo será iniciado no primeiro embarque. Se o modelo de envio tiver matrizes de duração e distância, startWaypoint não precisará 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 vai terminar imediatamente quando ele concluir o último VisitRequest. Se o modelo de envio tiver matrizes de duração e distância, endLocation não precisará ser especificado.

endWaypoint

object (Waypoint)

Waypoint que representa uma localização geográfica em que o veículo termina depois de concluir o último VisitRequest. Se endWaypoint e endLocation não forem especificados, o ShipmentRoute do veículo vai terminar imediatamente quando ele completar o último VisitRequest. Se o modelo de envio tiver matrizes de duração e distância, endWaypoint não precisará ser especificado.

startTags[]

string

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

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

endTags[]

string

Especifica tags anexadas ao final 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 partir do local de início. Elas 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 de tempo globais.

As janelas de tempo do mesmo campo repetido precisam estar separadas, ou seja, não podem se sobrepor nem estar adjacentes a outra, e precisam estar em ordem cronológica.

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

endTimeWindows[]

object (TimeWindow)

Janelas de tempo em que o veículo pode chegar ao local de destino. Elas 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 de tempo globais.

As janelas de tempo do mesmo campo repetido precisam estar separadas, ou seja, não podem se sobrepor nem estar adjacentes a outra, e precisam estar em ordem cronológica.

costPerHourAfterSoftEndTime e softEndTime só poderão 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 carregamento, consistentes com as chaves do campo Shipment.load_demands. Se uma determinada chave estiver ausente desse mapa, a capacidade correspondente será considerada ilimitada.

Um objeto com uma lista de pares "key": value. Exemplo: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

costPerHour

number

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

Custo por hora do trajeto do veículo. Esse custo é aplicado ao tempo total gasto pelo trajeto e inclui os tempos de viagem, de espera e de visita. Usar costPerHour em vez de apenas costPerTraveledHour pode resultar em latência extra.

costPerTraveledHour

number

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

costPerKilometer

number

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

fixedCost

number

Custo fixo aplicado se este veículo for usado para lidar com uma remessa.

usedIfRouteIsEmpty

boolean

Este campo só é válido para veículos quando o trajeto deles não inclui envios. Ele indica se o veículo deve ser considerado usado ou não nesse caso.

Se verdadeiro, o veículo vai do início ao local de destino, mesmo que não atenda nenhuma remessa, e os custos de tempo e distância resultantes desse início --> final da viagem são consideradas.

Caso contrário, ele não vai do ponto inicial até o local final, e não há breakRule nem atraso (de TransitionAttributes) programado para esse veículo. Nesse caso, o ShipmentRoute do veículo não contém informações, apenas o índice e a etiqueta.

routeDurationLimit

object (DurationLimit)

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

travelDurationLimit

object (DurationLimit)

Limite aplicado à duração da viagem no trajeto 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 do trajeto do veículo. Em uma determinada OptimizeToursResponse, a distância do trajeto é a soma de todas as transitions.travel_distance_meters dela.

extraVisitDurationForVisitType

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

Especifica um mapa de strings visitTypes para durações. A duração é um tempo além de VisitRequest.duration que será coletado em visitas com a visitTypes especificada. Essa duração adicional da visita adiciona custo se costPerHour for especificado. As chaves (ou seja, visitTypes) não podem ser strings vazias.

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

Um objeto com uma lista de pares "key": value. Exemplo: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

breakRule

object (BreakRule)

Descreve a programação de intervalos a ser aplicada neste veículo. Se estiver vazio, nenhuma pausa será programada para este 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 "true", usedIfRouteIsEmpty terá que ser "false", e o veículo vai continuar sem uso.

Se uma remessa for realizada por um veículo ignorado no injectedFirstSolutionRoutes, ela será ignorada na primeira solução, mas poderá ser usada na resposta.

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

travelDurationMultiple

number

Especifica um fator multiplicativo que pode ser usado para aumentar ou diminuir os tempos de viagem desse veículo. Por exemplo, definir como 2.0 significa que o veículo é mais lento e tem tempos de viagem que são o dobro dos de veículos padrão. Esse múltiplo não afeta a duração das visitas. Ela vai afetar o custo se costPerHour ou costPerTraveledHour forem especificados. Precisa estar no intervalo [0,001, 1000,0]. Se não for definido, o veículo será padrão, e esse múltiplo será considerado 1,0.

AVISO: os tempos de viagem serão arredondados para o segundo mais próximo após a aplicação desse múltiplo, mas antes de realizar qualquer operação numérica. Portanto, um pequeno múltiplo pode resultar em uma 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 Routes Preferred 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 Modo de viagem correspondente às rotas de carro (carro, ...).
WALKING Modo de viagem correspondente às rotas a pé.

UnloadingPolicy

Política sobre como um veículo pode ser descarregado. Aplicável apenas a fretes com retirada e entrega.

Outros envios são sem custo financeiro em qualquer lugar do trajeto, independentemente da unloadingPolicy.

Enums
UNLOADING_POLICY_UNSPECIFIED Política de descarregamento não especificada; as entregas precisam ocorrer somente após as retiradas correspondentes.
LAST_IN_FIRST_OUT As entregas precisam ser feitas em ordem inversa à das retiradas
FIRST_IN_FIRST_OUT As entregas precisam ser feitas no mesmo pedido das retiradas

LoadLimit

Define um limite de carga aplicado a um veículo, por exemplo, "este caminhão só pode carregar 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 de carga. Consulte costPerUnitAboveSoftMax.

costPerUnitAboveSoftMax

number

Se a carga exceder softMaxLoad ao longo do trajeto deste 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 final do trajeto.

maxLoad

string (int64 format)

A quantidade máxima aceitável de carga.

Intervalo

Intervalo de quantidades 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 precisará ser ≤ max.

max

string (int64 format)

Uma carga máxima aceitável. Precisa ser ≥ 0. Se não for especificada, a carga máxima será irrestrita por esta mensagem. Se ambos forem especificados, min precisará ser ≤ max.

DurationLimit

Um limite que define uma duração máxima do trajeto de um veículo. Pode ser dura ou mole.

Quando um campo de limite flexível é definido, o limite flexível máximo 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 impõe um limite de duração máximo, mas que, quando violado, faz com que a rota incorra em custos. Esse custo é somado a outros custos definidos no modelo com a mesma unidade.

Se definido, softMaxDuration não pode ser 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 que não impõe um limite de duração máximo, mas que, 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 não pode ser 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 dependerá da duração da seguinte forma:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

O custo não pode ser negativo.

costPerSquareHourAfterQuadraticSoftMax

number

Custo por hora quadrada incorrida 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 dependerá da duração da seguinte forma:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

O custo não pode ser negativo.

DistanceLimit

Um limite que define uma distância máxima que pode ser percorrida. Pode ser dura ou mole.

Se um limite flexível for definido, tanto softMaxMeters quanto costPerKilometerAboveSoftMax precisarão ser definidos e não negativos.

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

string (int64 format)

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

softMaxMeters

string (int64 format)

Quando um limite flexível não aplica um limite máximo de distância, mas é violado, o custo é somado a outros custos definidos no modelo com a mesma unidade.

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

costPerKilometerAboveSoftMax

number

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

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

O custo não pode ser negativo.

BreakRule

Regras para gerar intervalos para um veículo (por exemplo, intervalos para o 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. Pode haver uma pausa:

  • durante o percurso entre duas visitas (que inclui o tempo logo antes ou logo depois de uma visita, mas não no meio de uma visita). Nesse caso, o tempo em trânsito correspondente entre as visitas é estendido.
  • ou antes de ligar o veículo (não é possível ligar no meio de um intervalo). Nesse caso, isso não afeta o horário de início do veículo.
  • ou depois do fim do veículo (idto, 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. Consulte a mensagem BreakRequest.

frequencyConstraints[]

object (FrequencyConstraint)

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

BreakRequest

A sequência de pausas (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. As janelas de tempo (earliestStartTime / latestStartTime) podem se sobrepor, mas precisam ser compatíveis com a ordem (marcada).

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

string (Timestamp format)

Obrigatório. Limite inferior (inclusive) no início do intervalo.

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 (inclusive) no início do intervalo.

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, aplicando uma frequência mínima, como "É preciso fazer 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 12h, deve haver pelo menos um intervalo de pelo menos uma hora", esse exemplo seria convertido no 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 respeitarão todas essas restrições, além das janelas de tempo e durações mínimas já especificadas no BreakRequest.

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

  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 esta restrição. Não negativo. Veja 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 partida e de partida dos veículos para visitar e dos locais finais dos veículos.

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 a mesma quantidade de elementos que 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, será aplicado a todos os veículos e só poderá haver uma matriz.

Cada partida de veículo precisa corresponder exatamente a uma matriz, ou seja, exatamente um dos campos startTags precisa corresponder ao vehicleStartTag de uma matriz (e somente 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)

os valores de duração de uma linha específica. Ele precisa ter a mesma quantidade de elementos que 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 de uma linha específica. Se nenhum custo ou restrição se referir a distâncias no modelo, este campo pode ser deixado em branco. Caso contrário, precisa ter a mesma quantidade de elementos que durations.

TransitionAttributes

Especifica atributos de 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 limite mais rigoroso será aplicado, seguindo a semântica natural "AND".

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) às quais esses atributos se aplicam.

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

excludedSrcTag

string

Consulte srcTag. Exatamente um de srcTag e excludedSrcTag não pode estar em branco.

dstTag

string

Uma visita ao destino ou final do veículo corresponde se a VisitRequest.tags ou Vehicle.end_tags contiver dstTag ou não contiver excludedDstTag (dependendo de qual desses dois campos não estiver vazio).

excludedDstTag

string

Consulte dstTag. Exatamente um de dstTag e excludedDstTag não pode estar em branco.

cost

number

Especifica um custo para executar 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 durante essa transição. A soma de todos os valores Vehicle.cost_per_kilometer especificados nos veículos é maior.

distanceLimit

object (DistanceLimit)

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

A partir de 06/2021, apenas limites flexíveis serão compatíveis.

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 de iniciar a visita de destino.

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

ShipmentTypeIncompatibility

Especifica as incompatibilidades entre as remessas, dependendo do remessaType. 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. Duas remessas com shipment_types diferentes entre as listadas são "incompatíveis".

incompatibilityMode

enum (IncompatibilityMode)

Modo aplicado à incompatibilidade.

IncompatibilityMode

Modos que definem como a aparência de remessas incompatíveis são restritas no mesmo trajeto.

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

Para duas remessas com tipos incompatíveis com o modo de incompatibilidade NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY:

  • Se ambos forem apenas para retirada (sem entregas) ou apenas entregas (sem retirada), eles não poderão compartilhar o mesmo veículo.
  • Se uma das remessas tiver uma entrega e a outra uma retirada, as duas podem compartilhar o mesmo veículo se a primeira for entregue antes da retirada do último.

ShipmentTypeRequirement

Especifica os requisitos entre as remessas com base no remessaType. As especificidades do requisito são definidas pelo modo do requisito.

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

string

Lista de tipos de frete alternativos exigidos pelo dependentShipmentTypes.

dependentShipmentTypes[]

string

Todas as remessas com um tipo no campo dependentShipmentTypes exigem que pelo menos uma do tipo requiredShipmentTypeAlternatives seja visitada no mesmo trajeto.

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

requirementMode

enum (RequirementMode)

Modo aplicado ao requisito.

RequirementMode

Modos que definem a aparência das 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 Neste modo, todos os "dependentes" remessas devem compartilhar o mesmo veículo que pelo menos um dos remessas.
IN_SAME_VEHICLE_AT_PICKUP_TIME

Com o modo IN_SAME_VEHICLE_AT_PICKUP_TIME, todos os "dependentes" os pedidos precisam ter pelo menos um item remessa no veículo no momento da retirada.

Uma condição A retirada de pedidos precisa ter:

  • Um campo "obrigatório" somente para entrega entrega entregue na rota depois ou
  • Um campo "obrigatório" retirada do produto no caminho e se os requisitos tem uma entrega, esta entrega deve ser realizada após a entrega retirada da remessa.
IN_SAME_VEHICLE_AT_DELIVERY_TIME O mesmo de antes, exceto o tipo "dependente", remessas precisam ter um campo "obrigatório" remessa no veículo no momento da entrega.

PrecedenceRule

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

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

Além disso, as precedências só se aplicam quando os dois envios são realizados e são ignorados.

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

boolean

Indica se a "primeira" é uma entrega.

secondIsDelivery

boolean

Indica se o "segundo" é uma entrega.

offsetDuration

string (Duration format)

O deslocamento entre o "primeiro" e "segundo" evento. 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 "primeiro" evento. Este campo precisa ser especificado.

secondIndex

integer

Índice de envio do "segundo" evento. Este campo precisa ser especificado.