- Representação JSON
- Envio
- VisitRequest
- LatLng
- Waypoint
- Local
- TimeWindow
- Veículo
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- Interval
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- Objetivo
- Tipo
- DurationDistanceMatrix
- Linha
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
Um modelo de remessa contém um conjunto de remessas que precisam ser realizadas por um conjunto de veículos, minimizando o custo geral, que é a soma de:
- o custo de roteamento dos veículos (soma do custo por tempo total, custo por tempo de viagem e custo fixo de todos os veículos).
- as penalidades por remessa não realizada.
- o custo da duração global das remessas
| Representação JSON |
|---|
{ "shipments": [ { object ( |
| Campos | |
|---|---|
shipments[] |
Conjunto de remessas que precisam ser realizadas no modelo. |
vehicles[] |
Conjunto de veículos que podem ser usados para realizar visitas. |
objectives[] |
O conjunto de objetivos para esse modelo, que vamos transformar em custos. Se não estiver vazio, o modelo de entrada não pode ter custo financeiro. Para receber a solicitação modificada, use Experimental: consulte https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request para mais detalhes. |
globalStartTime |
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 menor que um ano, ou seja, o Ao usar campos Usa o padrão RFC 3339, em que a saída gerada é sempre convertida em Z e tem 0, 3, 6 ou 9 dígitos fracionários. Além de "Z", outros ajustes também são aceitos. Exemplos: |
globalEndTime |
Se não for definido, 00:00:00 UTC, 1º de janeiro de 1971 (ou seja, segundos: 31536000, nanos: 0) será usado como padrão. Usa o padrão RFC 3339, em que a saída gerada é sempre convertida em Z e tem 0, 3, 6 ou 9 dígitos fracionários. Além de "Z", outros ajustes também são aceitos. Exemplos: |
globalDurationCostPerHour |
A "duração global" do plano geral é a diferença entre o horário de início efetivo mais cedo e o horário de término efetivo mais tarde 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 job, por exemplo. Esse custo precisa estar na mesma unidade que |
durationDistanceMatrices[] |
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 usadas, dependendo do valor do campo Exemplos de uso:
|
durationDistanceMatrixSrcTags[] |
Tags que definem as origens das matrizes de duração e distância. As tags correspondem a |
durationDistanceMatrixDstTags[] |
Tags que definem os destinos das matrizes de duração e distância; As tags correspondem a |
transitionAttributes[] |
Atributos de transição adicionados ao modelo. |
shipmentTypeIncompatibilities[] |
Conjuntos de shipment_types incompatíveis (consulte |
shipmentTypeRequirements[] |
Conjuntos de requisitos de |
precedenceRules[] |
Conjunto de regras de precedência que precisam ser aplicadas no modelo. IMPORTANTE: o uso de regras de precedência limita o tamanho do problema que pode ser otimizado. As solicitações que usam regras de precedência com muitas remessas podem ser rejeitadas. |
maxActiveVehicles |
Restringe o número máximo de veículos ativos. Um veículo estará ativo se o trajeto dele realizar pelo menos um envio. Isso pode ser usado para limitar o número de trajetos quando 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 usar. Precisa ser estritamente positivo. |
Envio
O envio de um único item, de uma das retiradas até uma das entregas. Para que a remessa seja considerada realizada, um veículo exclusivo precisa visitar um dos locais de retirada (e diminuir as capacidades de reserva de acordo) e, em seguida, visitar um dos locais de entrega (e, portanto, aumentar novamente as capacidades de reserva de acordo).
| Representação JSON |
|---|
{ "displayName": string, "pickups": [ { object ( |
| Campos | |
|---|---|
displayName |
O nome de exibição definido pelo usuário da remessa. Ele pode ter até 63 caracteres e usar caracteres UTF-8. |
pickups[] |
Conjunto de alternativas de retirada associadas à remessa. Se não for especificado, o veículo só precisará visitar um local correspondente às entregas. |
deliveries[] |
Conjunto de alternativas de entrega associadas ao envio. Se não for especificado, o veículo só precisará visitar um local correspondente às coletas. |
loadDemands |
Demandas de carga da remessa (por exemplo, peso, volume, número de paletes etc.). As chaves no mapa precisam ser identificadores que descrevem o tipo de 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[] |
O conjunto de veículos que podem realizar essa entrega. Se estiver vazio, todos os veículos poderão realizar a tarefa. Os veículos são fornecidos pelo índice na lista |
costsPerVehicle[] |
Especifica o custo incorrido quando essa remessa é entregue por cada veículo. Se especificado, ele precisa ter:
Esses custos precisam estar na mesma unidade que |
costsPerVehicleIndices[] |
Índices dos veículos aos quais |
pickupToDeliveryAbsoluteDetourLimit |
Especifica o tempo máximo absoluto de desvio em comparação com o trajeto mais curto da retirada até a entrega. Se especificado, ele precisa ser não negativo, e a remessa precisa conter pelo menos uma retirada e uma entrega. Por exemplo, seja t o menor tempo necessário para ir da alternativa de retirada selecionada diretamente para a alternativa de entrega selecionada. Em seguida, a configuração de Se os limites relativos e absolutos forem especificados na mesma remessa, o limite mais restritivo será usado para cada par de retirada/entrega possível. Desde outubro de 2017, os desvios só são aceitos quando as durações de viagem não dependem de veículos. |
pickupToDeliveryTimeLimit |
Especifica a duração máxima do início da retirada até o início da entrega de uma remessa. Se especificado, ele precisa ser não 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 junto com as restrições de desvio máximo: a solução vai respeitar as duas especificações. |
shipmentType |
String não vazia que especifica um "tipo" para essa remessa. Esse recurso pode ser usado para definir incompatibilidades ou requisitos entre Diferente de |
label |
Especifica um rótulo para esta remessa. Esse rótulo é informado na resposta no |
ignore |
Se for verdadeiro, pule esta remessa, mas não aplique um Ignorar uma remessa resulta em um erro de validação quando há É permitido ignorar uma remessa realizada em |
penaltyCost |
Se a remessa não for concluída, essa penalidade será adicionada ao custo geral das rotas. Uma remessa é considerada concluída 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 ao custo 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 |
Especifica o tempo máximo de desvio relativo em comparação com o trajeto mais curto da retirada até a entrega. Se especificado, ele precisa ser não negativo, e a remessa precisa conter pelo menos uma retirada e uma entrega. Por exemplo, seja t o menor tempo necessário para ir da alternativa de retirada selecionada diretamente para a alternativa de entrega selecionada. Em seguida, a configuração de Se os limites relativos e absolutos forem especificados na mesma remessa, o limite mais restritivo será usado para cada par de retirada/entrega possível. Desde outubro de 2017, os desvios só são aceitos quando as durações de viagem não dependem de veículos. |
VisitRequest
Solicitação de uma visita que pode ser feita por um veículo: tem uma localização geográfica (ou duas, veja abaixo), horários de abertura e fechamento representados por janelas de tempo e uma duração de serviço (tempo gasto pelo veículo depois de chegar para retirar ou entregar mercadorias).
| Representação JSON |
|---|
{ "arrivalLocation": { object ( |
| Campos | |
|---|---|
arrivalLocation |
A localização geográfica em que o veículo chega ao realizar essa |
arrivalWaypoint |
O waypoint em que o veículo chega ao realizar essa |
departureLocation |
A localização geográfica de onde o veículo parte depois de concluir este |
departureWaypoint |
O waypoint de onde o veículo sai depois de concluir este |
tags[] |
Especifica as tags anexadas à solicitação de visita. Não é permitido usar strings vazias ou duplicadas. |
timeWindows[] |
Janelas de tempo que restringem o horário de chegada em uma visita. Um veículo pode sair 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 horário. Isso pode resultar em tempo de espera se o veículo chegar antes de A ausência de As janelas de tempo precisam ser separadas, ou seja, nenhuma janela de tempo pode se sobrepor ou ser adjacente a outra, e elas precisam estar em ordem crescente.
|
duration |
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 |
cost |
Custo para atender a essa 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 uma remessa. Esse custo precisa estar na mesma unidade que |
loadDemands |
Carregue as demandas dessa solicitação de visita. É igual ao campo |
visitTypes[] |
Especifica os tipos de visita. Isso pode ser usado para alocar o tempo extra necessário para um veículo concluir essa visita (consulte Um tipo só pode aparecer uma vez. |
label |
Especifica um rótulo para este |
avoidUTurns |
Especifica se as conversões devem ser evitadas em trajetos de carro nesse local. A prevenção de retornos é feita da melhor forma possível, e não há garantia de que eles serão totalmente evitados. Este é um recurso experimental, e o comportamento está sujeito a mudanças. Experimental: consulte https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request para mais detalhes. |
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 |
A latitude em graus. Precisa estar no intervalo [-90,0, +90,0]. |
longitude |
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 de Vehicles.
| Representação JSON |
|---|
{
"sideOfRoad": boolean,
"vehicleStopover": boolean,
// The following is a list of mutually exclusive fields. At most one of the
// fields will be set in a response:
"location": {
object ( |
| Campos | |
|---|---|
sideOfRoad |
Opcional. Indica que o local desse waypoint deve ter uma preferência para que o veículo pare 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 em que o local está, em relação ao centro da via. Essa opção não funciona para o modo de viagem "WALKING". |
vehicleStopover |
Indica que o waypoint é destinado à parada de veículos, com a intenção de embarque ou desembarque. Essa opção funciona apenas para o modo de viagem "DRIVING" e quando o "locationType" é "location". Experimental: o comportamento ou a existência desse campo pode mudar no futuro. |
| Diferentes maneiras de representar um local. Confira a seguir uma lista de campos mutuamente exclusivos. No máximo um dos campos será definido em uma resposta: | |
location |
Um ponto especificado usando coordenadas geográficas, incluindo uma direção opcional. |
placeId |
O ID de lugar do PDI associado ao waypoint. Ao usar um ID de lugar para especificar o local de chegada ou partida de um VisitRequest, use um ID de lugar que seja específico o suficiente para determinar um local LatLng para navegação até o lugar. Por exemplo, um ID de lugar que representa um edifício é adequado, mas um que representa uma estrada não é recomendado. |
| Fim dos campos mutuamente exclusivos. | |
Local
Encapsula um local (um ponto geográfico e um título opcional).
| Representação JSON |
|---|
{
"latLng": {
object ( |
| Campos | |
|---|---|
latLng |
As coordenadas geográficas do waypoint. |
heading |
A direção da bússola associada ao sentido do fluxo de tráfego. Esse valor é usado para especificar o lado da via que será usado para embarque e desembarque. Os valores de direção podem ser de 0 a 360, em que 0 especifica uma direção para o norte, 90 especifica uma direção para o leste etc. |
TimeWindow
As janelas de tempo limitam o horário de um evento, como o horário de chegada em uma visita ou o horário de início e término de um veículo.
Os limites rígidos de 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 softStartTime ou depois, incorrendo em um custo proporcional ao tempo antes de softStartTime em que o evento ocorre. O limite superior da janela de tempo flexível, softEndTime, expressa uma preferência para que o evento ocorra em softEndTime ou antes, incorrendo em um custo proporcional ao tempo após softEndTime em que o evento ocorre. 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 |
O horário de início da janela de tempo rígida. Se não for especificado, ele será definido como Usa o padrão RFC 3339, em que a saída gerada é sempre convertida em Z e tem 0, 3, 6 ou 9 dígitos fracionários. Além de "Z", outros ajustes também são aceitos. Exemplos: |
endTime |
O horário de término do período rígido. Se não for especificado, ele será definido como Usa o padrão RFC 3339, em que a saída gerada é sempre convertida em Z e tem 0, 3, 6 ou 9 dígitos fracionários. Além de "Z", outros ajustes também são aceitos. Exemplos: |
softStartTime |
O horário de início flexível do período. Usa o padrão RFC 3339, em que a saída gerada é sempre convertida em Z e tem 0, 3, 6 ou 9 dígitos fracionários. Além de "Z", outros ajustes também são aceitos. Exemplos: |
softEndTime |
O horário de término flexível da janela de tempo. Usa o padrão RFC 3339, em que a saída gerada é sempre convertida em Z e tem 0, 3, 6 ou 9 dígitos fracionários. Além de "Z", outros ajustes também são aceitos. Exemplos: |
costPerHourBeforeSoftStartTime |
Um custo por hora adicionado a outros custos no modelo se o evento ocorrer antes de softStartTime, calculado como: Esse custo precisa ser positivo, e o campo só pode ser definido se softStartTime tiver sido definido. |
costPerHourAfterSoftEndTime |
Um custo por hora adicionado a outros custos no modelo se o evento ocorrer após Esse custo precisa ser positivo, e o campo só pode ser definido se |
Veículo
Modelos de um veículo em um problema de envio. Resolver um problema de envio vai criar um trajeto 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 ( |
| Campos | |
|---|---|
displayName |
O nome de exibição do veículo definido pelo usuário. Ele pode ter até 63 caracteres e usar caracteres UTF-8. |
travelMode |
O modo de viagem, que afeta as vias que o veículo pode usar e a velocidade dele. Consulte também |
routeModifiers |
Um conjunto de condições que afetam a forma como os trajetos são calculados para o veículo em questão. |
startLocation |
Localização geográfica em que o veículo começa antes de coletar as remessas. Se não for especificado, o veículo vai começar na primeira retirada. Se o modelo de remessa tiver matrizes de duração e distância, |
startWaypoint |
Ponto de passagem que representa uma localização geográfica em que o veículo começa antes de retirar as remessas. Se nem |
endLocation |
Localização geográfica em que o veículo termina depois de concluir o último |
endWaypoint |
Waypoint que representa uma localização geográfica onde o veículo termina depois de concluir o último |
startTags[] |
Especifica as tags anexadas ao início do trajeto do veículo. Não é permitido usar strings vazias ou duplicadas. |
endTags[] |
Especifica as tags anexadas ao final do trajeto do veículo. Não é permitido usar strings vazias ou duplicadas. |
startTimeWindows[] |
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 As janelas de tempo que pertencem ao mesmo campo repetido precisam ser separadas, ou seja, nenhuma janela de tempo pode se sobrepor ou ser adjacente a outra, e elas precisam estar em ordem cronológica.
|
endTimeWindows[] |
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 As janelas de tempo que pertencem ao mesmo campo repetido precisam ser separadas, ou seja, nenhuma janela de tempo pode se sobrepor ou ser adjacente a outra, e elas precisam estar em ordem cronológica.
|
unloadingPolicy |
Política de descarga aplicada ao veículo. |
loadLimits |
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 |
costPerHour |
Custos do veículo: todos os custos são somados e precisam estar na mesma unidade que Custo por hora do trajeto do veículo. Esse custo é aplicado ao tempo total gasto na rota e inclui o tempo de viagem, de espera e de visita. Usar |
costPerTraveledHour |
Custo por hora percorrida do trajeto do veículo. Esse custo é aplicado apenas ao tempo de viagem do trajeto (ou seja, o informado em |
costPerKilometer |
Custo por quilômetro do trajeto do veículo. Esse custo é aplicado à distância informada no |
fixedCost |
Custo fixo aplicado se este veículo for usado para processar uma remessa. |
usedIfRouteIsEmpty |
Esse campo só se aplica a veículos quando o trajeto deles não atende a nenhuma remessa. Indica se o veículo deve ser considerado como usado ou não nesse caso. Se for verdadeiro, o veículo vai do local de início ao local de término, mesmo que não atenda a nenhuma remessa, e os custos de tempo e distância resultantes da viagem de início --> término são considerados. Caso contrário, ele não vai do local de início ao de término, e nenhum |
routeDurationLimit |
Limite aplicado à duração total do trajeto do veículo. Em uma determinada |
travelDurationLimit |
Limite aplicado à duração da viagem do trajeto do veículo. Em um determinado |
routeDistanceLimit |
Limite aplicado à distância total do trajeto do veículo. Em um determinado |
extraVisitDurationForVisitType |
Especifica um mapa de strings visitTypes para durações. A duração é o tempo além de Se uma solicitação de visita tiver vários tipos, uma duração será adicionada para cada tipo no mapa. |
breakRule |
Descreve a programação de pausas a ser aplicada a este veículo. Se estiver vazio, nenhum intervalo será programado para esse veículo. |
label |
Especifica um rótulo para este veículo. Esse rótulo é informado na resposta como o |
ignore |
Se for verdadeiro, Se uma remessa for realizada por um veículo ignorado em Se uma remessa for realizada por um veículo ignorado em |
travelDurationMultiple |
Especifica um fator multiplicativo 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 de veículos padrão. Esse múltiplo não afeta a duração das visitas. Ele afeta o custo se AVISO: 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 uma perda de precisão. Consulte também |
TravelMode
Meios de transporte que podem ser usados por veículos.
Eles precisam ser um subconjunto dos meios de transporte da API Routes da Plataforma Google Maps. Consulte: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
Observação: as rotas de WALKING estão na versão Beta e, às vezes, podem não ter calçadas ou caminhos claros para pedestres. Esse aviso precisa ser mostrado ao usuário em todos os trajetos a pé exibidos no app.
| Tipos enumerados | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
Meio de transporte não especificado, equivalente a DRIVING. |
DRIVING |
Modo de viagem correspondente a rotas de carro. |
WALKING |
Meio de transporte correspondente a rotas a pé. |
TWO_WHEELER |
Veículo motorizado de duas rodas. Por exemplo, motocicleta. Isso é diferente do modo de viagem BICICLETA, que abrange o modo de transporte humano. Esse modo de transporte está disponível apenas nos países listados em Países e regiões com suporte para veículos de duas rodas. |
RouteModifiers
Encapsula um conjunto de condições opcionais que precisam ser atendidas ao calcular rotas de veículos. Isso é semelhante a RouteModifiers na API Routes Preferred 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 |
Especifica se é preciso evitar vias com pedágio quando possível. Será dada preferência a rotas que não contenham vias com pedágio. Aplica-se apenas a meios de transporte motorizados. |
avoidHighways |
Especifica se é preciso evitar rodovias quando possível. A preferência será dada a rotas que não contenham rodovias. Aplica-se apenas a meios de transporte motorizados. |
avoidFerries |
Especifica se é preciso evitar balsas quando possível. Será dada preferência a rotas que não incluam viagens de balsa. Aplica-se apenas a meios de transporte motorizados. |
avoidIndoor |
Opcional. Especifica se é preciso evitar a navegação em ambientes fechados, quando possível. Será dada preferência a rotas que não contenham navegação interna. Aplica-se apenas ao meio de transporte |
UnloadingPolicy
Política sobre como um veículo pode ser descarregado. Aplica-se apenas a remessas que têm uma retirada e uma entrega.
Outras remessas podem ocorrer em qualquer lugar do trajeto, independentemente de unloadingPolicy.
| Tipos enumerados | |
|---|---|
UNLOADING_POLICY_UNSPECIFIED |
Política de descarregamento não especificada. As entregas precisam ocorrer após as coletas correspondentes. |
LAST_IN_FIRST_OUT |
As entregas precisam ocorrer na ordem inversa das coletas |
FIRST_IN_FIRST_OUT |
As entregas precisam ocorrer na mesma ordem das retiradas |
LoadLimit
Define um limite de carga que se aplica 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 ( |
| Campos | |
|---|---|
softMaxLoad |
Um limite flexível da carga. Consulte |
costPerUnitAboveSoftMax |
Se a carga exceder |
startLoadInterval |
O intervalo de carga aceitável do veículo no início do trajeto. |
endLoadInterval |
O intervalo de carga aceitável do veículo no final do trajeto. |
maxLoad |
A quantidade máxima aceitável de carga. |
costPerKilometer |
Custo de mover uma unidade de carga por um quilômetro para este veículo. Isso pode ser usado como um proxy para o consumo de combustível: se a carga for um peso (em Newtons), então carga*quilômetro terá a dimensão de uma energia. Experimental: consulte https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request para mais detalhes. |
costPerTraveledHour |
Custo de viajar com uma unidade de carga durante uma hora para este veículo. Experimental: consulte https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request para mais detalhes. |
Intervalo
Intervalo de quantidades de carga aceitáveis.
| Representação JSON |
|---|
{ "min": string, "max": string } |
| Campos | |
|---|---|
min |
Uma carga mínima aceitável. Precisa ser ≥ 0. Se ambos forem especificados, |
max |
Uma carga máxima aceitável. Precisa ser ≥ 0. Se não for especificada, a carga máxima não será restrita por essa mensagem. Se ambos forem especificados, |
LoadCost
Custo de mover uma unidade de carga durante um Transition. Para uma determinada carga, o custo é a soma de duas partes:
- min(load,
loadThreshold) *costPerUnitBelowThreshold - max(0, load -
loadThreshold) *costPerUnitAboveThreshold
Com esse custo, as soluções preferem entregar as demandas altas primeiro ou, de forma equivalente, retirar as demandas altas por último. Por exemplo, se um veículo tiver
load_limit {
key: "weight"
value {
costPerKilometer {
loadThreshold: 15
costPerUnitBelowThreshold: 2.0
costPerUnitAboveThreshold: 10.0
}
}
}
e o trajeto é início,retirada,retirada,entrega,entrega,fim com as transições:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
então o custo incorrido por esse LoadCost é (cost_below * load_below * quilômetros + cost_above * load_above * kms)
- transição 0: 0.0
- transição 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- transição 2: 2,0 * 15 * 1,0 + 10,0 * (20 - 15) * 1,0 = 80,0
- transição 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- transição 4: 0,0
Portanto, o LoadCost no trajeto é 120,0.
No entanto, se o trajeto for início,retirada,entrega,retirada,entrega,fim com transições:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
o custo incorrido por esse LoadCost é
- transição 0: 0.0
- transição 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- transição 2: 0,0
- transição 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- transição 4: 0,0
Aqui, o LoadCost sobre o trajeto é 40.0.
LoadCost torna as soluções com transições pesadas mais caras.
Experimental: consulte https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request para mais detalhes.
| Representação JSON |
|---|
{ "loadThreshold": string, "costPerUnitBelowThreshold": number, "costPerUnitAboveThreshold": number } |
| Campos | |
|---|---|
loadThreshold |
Quantidade de carga acima da qual o custo de mover uma unidade de carga muda de costPerUnitBelowThreshold para costPerUnitAboveThreshold. Precisa ser >= 0. |
costPerUnitBelowThreshold |
Custo de mover uma unidade de carga, para cada unidade entre 0 e o limite. Precisa ser um valor finito e maior ou igual a 0. |
costPerUnitAboveThreshold |
Custo de mover uma unidade de carga para cada unidade acima do limite. No caso especial de limite = 0, esse é um custo fixo por unidade. Precisa ser um valor finito e maior ou igual a 0. |
DurationLimit
Um limite que define a duração máxima do trajeto de um veículo. Ele pode ser rígido ou flexível.
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 |
Um limite rígido que restringe a duração a, no máximo, maxDuration. |
softMaxDuration |
Um limite flexível que não impõe um limite de duração máxima, mas que, quando violado, faz com que a rota tenha um custo. Esse custo é adicionado a outros custos definidos no modelo, com a mesma unidade. Se definido, |
quadraticSoftMaxDuration |
Um limite flexível que não impõe um limite de duração máxima, mas que, quando violado, faz com que a rota incorra em um custo quadrático na duração. Esse custo é adicionado a outros custos definidos no modelo, com a mesma unidade. Se
|
costPerHourAfterSoftMax |
Custo por hora incorrido se o limite de O custo não pode ser negativo. |
costPerSquareHourAfterQuadraticSoftMax |
Custo por hora quadrada incorrido se o limite de O custo adicional será 0 se a duração estiver abaixo do limite. Caso contrário, o custo vai depender da duração, conforme indicado abaixo: O custo não pode ser negativo. |
DistanceLimit
Um limite que define uma distância máxima que pode ser percorrida. Ele pode ser rígido ou flexível.
Se um limite flexível for definido, softMaxMeters e costPerKilometerAboveSoftMax precisarão ser definidos e não negativos.
| Representação JSON |
|---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
| Campos | |
|---|---|
maxMeters |
Um limite rígido que restringe a distância a, no máximo, maxMeters. O limite não pode ser negativo. |
softMaxMeters |
Um limite flexível que não impõe um limite máximo de distância, mas que, 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 pode ser negativo. |
costPerKilometerBelowSoftMax |
Custo por quilômetro incorrido, aumentando até Esse custo não é aceito em |
costPerKilometerAboveSoftMax |
Custo por quilômetro incorrido se a distância estiver acima do limite de 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ínuo em que o veículo permanece ocioso na posição atual e não pode realizar nenhuma visita. Uma interrupção pode ocorrer:
- durante o trajeto entre duas visitas (incluindo o tempo imediatamente antes ou depois de uma visita, mas não no meio dela), o que estende o tempo em trânsito correspondente entre as visitas;
- ou antes do início do veículo (o veículo não pode iniciar no meio de um intervalo). Nesse caso, o horário de início do veículo não é afetado.
- ou após o fim do veículo (idem, com o horário de término do veículo).
| Representação JSON |
|---|
{ "breakRequests": [ { object ( |
| Campos | |
|---|---|
breakRequests[] |
Sequência de intervalos. Confira a mensagem |
frequencyConstraints[] |
Vários |
BreakRequest
A sequência de intervalos (ou seja, o número e a ordem deles) 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 o pedido (isso é verificado).
| Representação JSON |
|---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
| Campos | |
|---|---|
earliestStartTime |
Obrigatório. Limite inferior (inclusivo) no início do intervalo. Usa o padrão RFC 3339, em que a saída gerada é sempre convertida em Z e tem 0, 3, 6 ou 9 dígitos fracionários. Além de "Z", outros ajustes também são aceitos. Exemplos: |
latestStartTime |
Obrigatório. Limite superior (inclusivo) no início do intervalo. Usa o padrão RFC 3339, em que a saída gerada é sempre convertida em Z e tem 0, 3, 6 ou 9 dígitos fracionários. Além de "Z", outros ajustes também são aceitos. Exemplos: |
minDuration |
Obrigatório. Duração mínima do intervalo. Precisa ser positivo. |
FrequencyConstraint
É possível restringir ainda mais a frequência e a duração dos intervalos especificados acima, aplicando uma frequência mínima de intervalo, como "É preciso haver um intervalo de pelo menos 1 hora a cada 12 horas". Supondo que isso possa ser interpretado como "Em qualquer período de 12 horas, é preciso haver pelo menos um intervalo 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 das durações mínimas já especificadas no BreakRequest.
Um FrequencyConstraint pode, na prática, ser aplicado a intervalos não consecutivos. Por exemplo, a programação a seguir segue o exemplo "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 |
Obrigatório. Duração mínima do intervalo para essa restrição. Não negativo. Veja a descrição de |
maxInterBreakDuration |
Obrigatório. Duração máxima permitida de qualquer intervalo de tempo no trajeto que não inclua, pelo menos parcialmente, uma pausa de |
Objetivo
Os objetivos substituem completamente o modelo de custo e, portanto, são incompatíveis com os custos preexistentes. Cada objetivo é associado a vários custos predefinidos, por exemplo, para veículos, envios ou atributos de transição.
Experimental: consulte https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request para mais detalhes.
| Representação JSON |
|---|
{
"type": enum ( |
| Campos | |
|---|---|
type |
O tipo do objetivo. |
weight |
Quanto esse objetivo deve contar em relação aos outros. Pode ser qualquer número não negativo. Os pesos não precisam somar 1. Os pesos padrão são 1,0. |
Tipo
O tipo de objetivo que será mapeado para um conjunto de custos.
| Tipos enumerados | |
|---|---|
DEFAULT |
Um conjunto padrão de custos será usado para garantir uma solução razoável. Observação: esse objetivo pode ser usado sozinho, mas também será sempre adicionado com peso 1,0, como referência, aos objetivos especificados pelo usuário, se ainda não estiver presente. |
MIN_DISTANCE |
"MIN". Minimizar a distância total percorrida. |
MIN_WORKING_TIME |
Minimizar o tempo total de trabalho, somado em todos os veículos. |
MIN_TRAVEL_TIME |
Igual ao anterior, mas com foco apenas no tempo de viagem. |
MIN_NUM_VEHICLES |
Minimizar o número de veículos usados. |
DurationDistanceMatrix
Especifica uma matriz de duração e distância dos locais de início da visita e do veículo até os locais de término da visita e do veículo.
| Representação JSON |
|---|
{
"rows": [
{
object ( |
| Campos | |
|---|---|
rows[] |
Especifica as linhas da matriz de duração e distância. Ele precisa ter o mesmo número de elementos que |
vehicleStartTag |
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 única matriz. Cada início de veículo precisa corresponder a exatamente uma matriz, ou seja, exatamente um dos campos Todas as matrizes precisam ter um |
Linha
Especifica uma linha da matriz de duração e distância.
| Representação JSON |
|---|
{ "durations": [ string ], "meters": [ number ] } |
| Campos | |
|---|---|
durations[] |
Valores de duração de uma determinada linha. Ele precisa ter o mesmo número de elementos que |
meters[] |
Valores de distância para uma determinada linha. Se nenhum custo ou restrição se referir a distâncias no modelo, esse campo poderá ser deixado em branco. Caso contrário, ele precisará ter tantos elementos quanto |
TransitionAttributes
Especifica atributos de transições entre duas visitas consecutivas em um trajeto. Vários TransitionAttributes podem ser aplicados à 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 natural "AND").
| Representação JSON |
|---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
| Campos | |
|---|---|
srcTag |
Tags que definem o conjunto de transições (src->dst) a que esses atributos se aplicam. Uma visita de origem ou início de veículo corresponde se o |
excludedSrcTag |
Consulte |
dstTag |
Uma visita de destino ou um fim de veículo corresponderá se, e somente se, o |
excludedDstTag |
Consulte |
cost |
Especifica um custo para realizar essa transição. Ele está na mesma unidade que todos os outros custos no modelo e não pode ser negativo. Ela é aplicada sobre todos os outros custos. |
costPerKilometer |
Especifica um custo por quilômetro aplicado à distância percorrida durante a transição. Ele é adicionado a qualquer |
distanceLimit |
Especifica um limite para a distância percorrida ao realizar essa transição. A partir de junho de 2021, apenas limites flexíveis são aceitos. |
delay |
Especifica um atraso ao realizar essa transição. Esse atraso sempre ocorre depois de terminar a visita de origem e antes de iniciar a visita de destino. |
ShipmentTypeIncompatibility
Especifica incompatibilidades entre remessas dependendo do shipmentType. A exibição de remessas incompatíveis na mesma rota é restrita com base no modo de incompatibilidade.
| Representação JSON |
|---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
| Campos | |
|---|---|
types[] |
Lista de tipos incompatíveis. Duas remessas com |
incompatibilityMode |
Modo aplicado à incompatibilidade. |
IncompatibilityMode
Modos que definem como a aparência de remessas incompatíveis é restrita na mesma rota.
| Tipos enumerados | |
|---|---|
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 |
Nesse modo, duas remessas com tipos incompatíveis nunca podem estar no mesmo veículo ao mesmo tempo:
|
ShipmentTypeRequirement
Especifica os requisitos entre as remessas com base no shipmentType. As especificações do requisito são definidas pelo modo de requisito.
| Representação JSON |
|---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
| Campos | |
|---|---|
requiredShipmentTypeAlternatives[] |
Lista de tipos de envio alternativos exigidos pelo |
dependentShipmentTypes[] |
Todas as remessas com um tipo no campo OBSERVAÇÃO: não são permitidas cadeias de requisitos em que um |
requirementMode |
Modo aplicado ao requisito. |
RequirementMode
Modos que definem a aparência de remessas dependentes em um trajeto.
| Tipos enumerados | |
|---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Modo de requisito não especificado. Esse valor nunca pode ser usado. |
PERFORMED_BY_SAME_VEHICLE |
Nesse modo, todas as remessas "dependentes" precisam compartilhar o mesmo veículo que pelo menos uma das remessas "obrigatórias". |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
Com o modo Portanto, uma retirada de remessa "dependente" precisa ter:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Igual ao anterior, exceto que as remessas "dependentes" precisam ter uma remessa "obrigatória" 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 início 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ó se aplicam quando as duas remessas são realizadas e, caso contrário, são ignoradas.
| Representação JSON |
|---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
| Campos | |
|---|---|
firstIsDelivery |
Indica se o "primeiro" evento é uma entrega. |
secondIsDelivery |
Indica se o "segundo" evento é uma entrega. |
offsetDuration |
O deslocamento entre o "primeiro" e o "segundo" evento. Pode ser negativo. |
firstIndex |
Índice de envio do "primeiro" evento. Este campo precisa ser especificado. |
secondIndex |
Índice de remessa do "segundo" evento. Este campo precisa ser especificado. |