Índice
RouteOptimization
(interface)AggregatedMetrics
(mensagem)BatchOptimizeToursMetadata
(mensagem)BatchOptimizeToursRequest
(mensagem)BatchOptimizeToursRequest.AsyncModelConfig
(mensagem)BatchOptimizeToursResponse
(mensagem)BreakRule
(mensagem)BreakRule.BreakRequest
(mensagem)BreakRule.FrequencyConstraint
(mensagem)DataFormat
(enum)DistanceLimit
(mensagem)GcsDestination
(mensagem)GcsSource
(mensagem)InjectedSolutionConstraint
(mensagem)InjectedSolutionConstraint.ConstraintRelaxation
(mensagem)InjectedSolutionConstraint.ConstraintRelaxation.Relaxation
(mensagem)InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.Level
(enum)InputConfig
(mensagem)Location
(mensagem)OptimizeToursRequest
(mensagem)OptimizeToursRequest.SearchMode
(enum)OptimizeToursRequest.SolvingMode
(enum)OptimizeToursResponse
(mensagem)OptimizeToursResponse.Metrics
(mensagem)OptimizeToursValidationError
(mensagem)OptimizeToursValidationError.FieldReference
(mensagem)OutputConfig
(mensagem)RouteModifiers
(mensagem)Shipment
(mensagem)Shipment.Load
(mensagem)Shipment.VisitRequest
(mensagem)ShipmentModel
(mensagem)ShipmentModel.DurationDistanceMatrix
(mensagem)ShipmentModel.DurationDistanceMatrix.Row
(mensagem)ShipmentModel.PrecedenceRule
(mensagem)ShipmentRoute
(mensagem)ShipmentRoute.Break
(mensagem)ShipmentRoute.EncodedPolyline
(mensagem)ShipmentRoute.Transition
(mensagem)ShipmentRoute.VehicleLoad
(mensagem)ShipmentRoute.Visit
(mensagem)ShipmentTypeIncompatibility
(mensagem)ShipmentTypeIncompatibility.IncompatibilityMode
(enum)ShipmentTypeRequirement
(mensagem)ShipmentTypeRequirement.RequirementMode
(enum)SkippedShipment
(mensagem)SkippedShipment.Reason
(mensagem)SkippedShipment.Reason.Code
(enum)TimeWindow
(mensagem)TransitionAttributes
(mensagem)Vehicle
(mensagem)Vehicle.DurationLimit
(mensagem)Vehicle.LoadLimit
(mensagem)Vehicle.LoadLimit.Interval
(mensagem)Vehicle.TravelMode
(enum)Vehicle.UnloadingPolicy
(enum)Waypoint
(mensagem)
RouteOptimization
Um serviço para otimizar tours de veículos.
Validade de determinados tipos de campos:
google.protobuf.Timestamp
- Os horários estão no horário Unix: segundos desde 1970-01-01T00:00:00+00:00.
- Os segundos precisam estar em [0, 253402300799], ou seja, em [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- O valor de nanos precisa ser redefinido ou definido como 0.
google.protobuf.Duration
- Os segundos precisam estar em [0, 253402300799], ou seja, em [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- O valor de nanos precisa ser redefinido ou definido como 0.
google.type.LatLng
- A latitude precisa estar entre -90,0 e 90,0.
- A longitude precisa estar entre -180,0 e 180,0.
- pelo menos um dos valores de latitude e longitude precisa ser diferente de zero.
BatchOptimizeTours |
---|
Otimiza os passeios de veículos para uma ou mais mensagens Esse método é uma operação de longa duração (LRO). As entradas para otimização (mensagens O usuário pode consultar Se o campo Se o campo
|
OptimizeTours |
---|
Envia uma Um modelo O objetivo é fornecer uma atribuição de
|
AggregatedMetrics
Métricas agregadas para ShipmentRoute
(ou OptimizeToursResponse
em todos os elementos Transition
e/ou Visit
).ShipmentRoute
Campos | |
---|---|
performed_ |
Número de envios realizados. Um par de retirada e entrega só é contabilizado uma vez. |
travel_ |
Duração total da viagem de uma rota ou solução. |
wait_ |
Duração total de espera para uma rota ou solução. |
delay_ |
Duração total do atraso de uma rota ou solução. |
break_ |
Duração total da pausa de uma rota ou solução. |
visit_ |
Duração total da visita de uma rota ou solução. |
total_ |
A duração total precisa ser igual à soma de todas as durações acima. Para rotas, também corresponde a:
|
travel_ |
Distância total de uma rota ou solução. |
max_ |
Carga máxima alcançada em toda a rota (ou solução), para cada uma das quantidades nessa rota (ou solução), calculada como o máximo em todas as |
BatchOptimizeToursMetadata
Esse tipo não tem campos.
Metadados da operação para chamadas BatchOptimizeToursRequest
.
BatchOptimizeToursRequest
Solicite a otimização em lote de tours como uma operação assíncrona. Cada arquivo de entrada precisa ter um OptimizeToursRequest
, e cada arquivo de saída precisa ter um OptimizeToursResponse
. A solicitação contém informações para ler/gravar e analisar os arquivos. Todos os arquivos de entrada e saída precisam estar no mesmo projeto.
Campos | |
---|---|
parent |
Obrigatório. Segmente o projeto e o local para fazer uma chamada. Formato: * Se nenhum local for especificado, uma região será escolhida automaticamente. |
model_ |
Obrigatório. Informações de entrada/saída de cada modelo de compra, como caminhos de arquivo e formatos de dados. |
AsyncModelConfig
Informações para resolver um modelo de otimização de forma assíncrona.
Campos | |
---|---|
display_ |
Opcional. O nome do modelo definido pelo usuário pode ser usado como alias pelos usuários para acompanhar os modelos. |
input_ |
Obrigatório. Informações sobre o modelo de entrada. |
output_ |
Obrigatório. As informações do local de saída desejado. |
BatchOptimizeToursResponse
Esse tipo não tem campos.
Resposta a um BatchOptimizeToursRequest
. Isso é retornado na operação de longa duração após a conclusão dela.
BreakRule
Regras para gerar intervalos de tempo para um veículo (por exemplo, intervalos para almoço). Uma pausa é um período contíguo em que o veículo permanece ocioso na posição atual e não pode realizar nenhuma visita. Uma pausa pode ocorrer:
- durante o deslocamento entre duas visitas (que inclui o tempo imediatamente antes ou depois de uma visita, mas não no meio dela). Nesse caso, o tempo de trânsito correspondente entre as visitas é estendido,
- ou antes do início do veículo (o veículo não pode começar no meio de uma pausa). Nesse caso, o início do veículo não é afetado.
- ou após o término do veículo (idem, com o horário de término do veículo).
Campos | |
---|---|
break_ |
Sequência de intervalos. Confira a mensagem |
frequency_ |
Várias |
BreakRequest
A sequência de intervalos (ou seja, o número e a ordem) que se aplicam a cada veículo precisa ser conhecida com antecedência. Os BreakRequest
s repetidos definem essa sequência, na ordem em que precisam ocorrer. Os intervalos de tempo (earliest_start_time
/ latest_start_time
) podem se sobrepor, mas precisam ser compatíveis com o pedido (isso é verificado).
Campos | |
---|---|
earliest_ |
Obrigatório. Limite inferior (inclusive) no início da pausa. |
latest_ |
Obrigatório. Limite superior (inclusivo) no início da pausa. |
min_ |
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, impondo uma frequência mínima de intervalo, como "É preciso ter um intervalo de pelo menos 1 hora a cada 12 horas". Supondo que isso possa ser interpretado como "Em qualquer janela de tempo deslizante de 12 horas, deve haver pelo menos uma pausa de pelo menos uma hora", esse exemplo seria traduzido para o seguinte FrequencyConstraint
:
{
min_break_duration { seconds: 3600 } # 1 hour.
max_inter_break_duration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
O tempo e a duração dos intervalos na solução vão respeitar todas essas restrições, além das janelas de tempo e durações mínimas já especificadas no BreakRequest
.
Na prática, um FrequencyConstraint
pode ser aplicado a intervalos não consecutivos. Por exemplo, a programação a seguir respeita o exemplo de "1h a cada 12h":
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
Campos | |
---|---|
min_ |
Obrigatório. Duração mínima do intervalo para essa restrição. Não negativo. Consulte a descrição de |
max_ |
Obrigatório. Intervalo máximo permitido de qualquer intervalo de tempo no trajeto que não inclua pelo menos parcialmente uma pausa de |
DataFormat
Formatos de dados para arquivos de entrada e saída.
Enums | |
---|---|
DATA_FORMAT_UNSPECIFIED |
Valor inválido, o formato não pode ser UNSPECIFIED. |
JSON |
Notation de objeto JavaScript. |
PROTO_TEXT |
Formato de texto de Buffers de protocolo. Consulte https://protobuf.dev/reference/protobuf/textformat-spec/ |
DistanceLimit
Um limite que define a distância máxima que pode ser percorrida. Ele pode ser hardware ou software.
Se um limite flexível for definido, soft_max_meters
e cost_per_kilometer_above_soft_max
também precisarão ser definidos e não podem ser negativos.
Campos | |
---|---|
max_ |
Um limite rígido que restringe a distância a no máximo max_metros. O limite não pode ser negativo. |
soft_ |
Um limite flexível não aplica um limite máximo de distância, mas, quando violado, resulta em um custo que se soma a outros custos definidos no modelo, com a mesma unidade. Se definido, soft_max_meters precisa ser menor que max_meters e não negativo. |
cost_ |
Custo por quilômetro incorrido, aumentando até
Esse custo não é aceito em |
cost_ |
Custo por quilômetro incorrido se a distância for superior ao limite de
O custo não pode ser negativo. |
GcsDestination
O local do Google Cloud Storage em que os arquivos de saída serão gravados.
Campos | |
---|---|
uri |
Obrigatório. URI do Google Cloud Storage. |
GcsSource
O local do Google Cloud Storage em que o arquivo de entrada será lido.
Campos | |
---|---|
uri |
Obrigatório. URI de um objeto do Google Cloud Storage com o formato |
InjectedSolutionConstraint
Solução injetada na solicitação, incluindo informações sobre quais visitas precisam ser restringidas e como elas precisam ser restringidas.
Campos | |
---|---|
routes[] |
Rotas da solução a ser injetada. Algumas rotas podem ser omitidas da solução original. As rotas e os envios pulados precisam atender às suposições de validade básicas listadas para |
skipped_ |
Envios ignorados da solução a ser injetada. Alguns podem ser omitidos da solução original. Consulte o campo |
constraint_ |
Para zero ou mais grupos de veículos, especifica quando e quanto relaxar as restrições. Se esse campo estiver vazio, todas as rotas de veículos não vazias serão totalmente restritas. |
ConstraintRelaxation
Para um grupo de veículos, especifica em quais limites as restrições de visitas serão relaxadas e em qual nível. Os envios listados no campo skipped_shipment
são restritos a serem pulados, ou seja, não podem ser realizados.
Campos | |
---|---|
relaxations[] |
Todas as flexibilizações de restrição de visitas que serão aplicadas a visitas em trajetos com veículos em |
vehicle_ |
Especifica os índices de veículos a que a restrição de visita Um índice de veículo é mapeado da mesma forma que |
Relaxamento
Se relaxations
estiver vazio, o horário de início e a sequência de todas as visitas em routes
serão totalmente restritos, e nenhuma nova visita poderá ser inserida ou adicionada a esses trajetos. Além disso, o horário de início e término de um veículo em routes
é totalmente restrito, a menos que o veículo esteja vazio (ou seja, não tenha visitas e tenha used_if_route_is_empty
definido como falso no modelo).
relaxations(i).level
especifica o nível de relaxamento de restrição aplicado a uma visita #j que atende a:
route.visits(j).start_time >= relaxations(i).threshold_time
Ej + 1 >= relaxations(i).threshold_visit_count
Da mesma forma, a inicialização do veículo é relaxada para relaxations(i).level
se ele atender aos seguintes requisitos:
vehicle_start_time >= relaxations(i).threshold_time
Erelaxations(i).threshold_visit_count == 0
e a extremidade do veículo é relaxada pararelaxations(i).level
se ela atender aos seguintes requisitos:vehicle_end_time >= relaxations(i).threshold_time
Eroute.visits_size() + 1 >= relaxations(i).threshold_visit_count
Para aplicar um nível de relaxamento se uma visita atende aos requisitos de threshold_visit_count
OU threshold_time
, adicione duas relaxations
com o mesmo level
: uma com apenas threshold_visit_count
definida e a outra com apenas threshold_time
definida. Se uma visita atender às condições de vários relaxations
, o nível mais flexível será aplicado. Como resultado, do início do veículo até as visitas de rota em ordem até o final do veículo, o nível de relaxamento se torna mais relaxado, ou seja, o nível de relaxamento não diminui à medida que a rota avança.
O tempo e a sequência de visitas de rota que não atendem às condições de limite de qualquer relaxations
são totalmente restritos, e nenhuma visita pode ser inserida nessas sequências. Além disso, se o início ou o fim de um veículo não atender às condições de qualquer relaxamento, o tempo será fixo, a menos que o veículo esteja vazio.
Campos | |
---|---|
level |
O nível de relaxamento de restrição que se aplica quando as condições em ou após |
threshold_ |
O tempo em que ou após o qual a |
threshold_ |
O número de visitas a partir do qual a flexibilização Se for |
Nível
Expressa os diferentes níveis de relaxamento de restrição, que são aplicados a uma visita e às que seguem quando ela atende às condições de limite.
A enumeração abaixo está em ordem de relaxamento crescente.
Enums | |
---|---|
LEVEL_UNSPECIFIED |
Nível de relaxamento padrão implícito: nenhuma restrição é relaxada, ou seja, todas as visitas são totalmente restritas. Esse valor não pode ser usado explicitamente em |
RELAX_VISIT_TIMES_AFTER_THRESHOLD |
Os horários de início e término da visita e do veículo serão relaxados, mas cada visita continua vinculada ao mesmo veículo, e a sequência de visitas precisa ser observada: nenhuma visita pode ser inserida entre elas ou antes delas. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Igual a RELAX_VISIT_TIMES_AFTER_THRESHOLD , mas a sequência de visitas também é relaxada: as visitas só podem ser realizadas por esse veículo, mas podem não ser realizadas. |
RELAX_ALL_AFTER_THRESHOLD |
Igual a RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD , mas o veículo também é relaxado: as visitas são totalmente sem custo financeiro no horário limite ou depois dele e podem não ser realizadas. |
InputConfig
Especifique uma entrada para [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
Campos | |
---|---|
data_ |
Obrigatório. O formato dos dados de entrada. |
Campo de união source . Obrigatório. source pode ser apenas de um dos tipos a seguir: |
|
gcs_ |
Um local do Google Cloud Storage. Ele precisa ser um único objeto (arquivo). |
Local
Encapsula um local (um ponto geográfico e um título opcional).
Campos | |
---|---|
lat_ |
As coordenadas geográficas do ponto de passagem. |
heading |
A direção da bússola associada à direção do fluxo de tráfego. Esse valor é usado para especificar o lado da estrada a ser usado para retirada e entrega. Os valores de direção podem variar de 0 a 360, em que 0 especifica uma direção de norte, 90 especifica uma direção de leste etc. |
OptimizeToursRequest
Solicitação para ser enviada a um solucionador de otimização de tour, que define o modelo de envio a ser resolvido, bem como os parâmetros de otimização.
Campos | |
---|---|
parent |
Obrigatório. Segmente o projeto ou local para fazer uma chamada. Formato: * Se nenhum local for especificado, uma região será escolhida automaticamente. |
timeout |
Se esse tempo limite for definido, o servidor vai retornar uma resposta antes que o período de tempo limite expire ou o prazo do servidor para solicitações síncronas seja atingido, o que ocorrer primeiro. Para solicitações assíncronas, o servidor vai gerar uma solução (se possível) antes do tempo limite expirar. |
model |
Modelo de envio a ser resolvido. |
solving_ |
Por padrão, o modo de resolução é |
search_ |
Modo de pesquisa usado para resolver a solicitação. |
injected_ |
Orienta o algoritmo de otimização a encontrar uma primeira solução semelhante a uma anterior. O modelo é limitado quando a primeira solução é criada. Todos os envios não realizados em uma rota são omitidos implicitamente na primeira solução, mas podem ser realizados em soluções sucessivas. A solução precisa atender a algumas suposições básicas de validade:
Se a solução injetada não for viável, um erro de validação não será necessariamente retornado, e um erro indicando a inviabilidade poderá ser retornado. |
injected_ |
Limitar o algoritmo de otimização para encontrar uma solução final semelhante a uma anterior. Por exemplo, isso pode ser usado para congelar partes de rotas que já foram concluídas ou que serão concluídas, mas não podem ser modificadas. Se a solução injetada não for viável, um erro de validação não será necessariamente retornado, e um erro indicando a inviabilidade poderá ser retornado. |
refresh_ |
Se não estiver vazio, as rotas serão atualizadas sem modificar a sequência de visitas ou os tempos de viagem: apenas outros detalhes serão atualizados. Isso não resolve o modelo. Desde novembro de 2020, isso preenche apenas as polilinhas de rotas não vazias e exige que Os campos Esse campo não pode ser usado com
|
interpret_ |
Se verdadeiro:
Essa interpretação se aplica aos campos Se verdadeiro, os rótulos das categorias a seguir precisam aparecer no máximo uma vez na categoria:
Se um A remoção de visitas a rotas ou rotas inteiras de uma solução injetada pode afetar as restrições implícitas, o que pode levar a mudanças na solução, erros de validação ou inviabilidade. OBSERVAÇÃO: o autor da chamada precisa garantir que cada |
consider_ |
Considere a estimativa de tráfego ao calcular os campos |
populate_ |
Se for verdadeiro, as polilinhas serão preenchidas em |
populate_ |
Se verdadeiro, as polilinhas e os tokens de rota serão preenchidos na resposta |
allow_ |
Se esse valor for definido, a solicitação poderá ter um prazo de até 60 minutos (consulte https://grpc.io/blog/deadlines). Caso contrário, o prazo máximo é de apenas 30 minutos. As solicitações de longa duração têm um risco de interrupção significativamente maior (mas ainda pequeno). |
use_ |
Se definido como "true", as distâncias de viagem serão calculadas usando distâncias geodésicas em vez das distâncias do Google Maps, e os tempos de viagem serão calculados usando distâncias geodésicas com uma velocidade definida por |
label |
Rótulo que pode ser usado para identificar essa solicitação, informado em |
geodesic_ |
Quando |
max_ |
Corta o número de erros de validação retornados. Esses erros geralmente são anexados a um payload de erro INVALID_ARGUMENT como um detalhe de erro BadRequest (https://cloud.google.com/apis/design/errors#error_details), a menos que o campo |
SearchMode
Modo que define o comportamento da pesquisa, trocando a latência pela qualidade da solução. Em todos os modos, o prazo de solicitação global é aplicado.
Enums | |
---|---|
SEARCH_MODE_UNSPECIFIED |
Modo de pesquisa não especificado, equivalente a RETURN_FAST . |
RETURN_FAST |
Pare a pesquisa depois de encontrar a primeira solução válida. |
CONSUME_ALL_AVAILABLE_TIME |
Use todo o tempo disponível para buscar soluções melhores. |
SolvingMode
Define como o solucionador precisa processar a solicitação. Em todos os modos, exceto VALIDATE_ONLY
, se a solicitação for inválida, você receberá um erro INVALID_REQUEST
. Consulte max_validation_errors
para limitar o número de erros retornados.
Enums | |
---|---|
DEFAULT_SOLVE |
Resolva o modelo. Os avisos podem ser emitidos em [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors]. |
VALIDATE_ONLY |
Valida o modelo sem resolvê-lo: preenche o maior número possível de OptimizeToursResponse.validation_errors . |
DETECT_SOME_INFEASIBLE_SHIPMENTS |
Só preenche IMPORTANTE: nem todos os envios inviáveis são retornados aqui, apenas aqueles que são detectados como inviáveis durante o pré-processamento. |
OptimizeToursResponse
Resposta após a solução de um problema de otimização de percursos, contendo as rotas seguidas por cada veículo, as remessas que foram puladas e o custo geral da solução.
Campos | |
---|---|
routes[] |
Rotas calculadas para cada veículo. A rota i corresponde ao veículo i no modelo. |
request_ |
Cópia do |
skipped_ |
A lista de todos os envios pulados. |
validation_ |
Lista de todos os erros de validação que conseguimos detectar de forma independente. Consulte a explicação "VÁRIOS ERROS" para a mensagem |
metrics |
Métricas de duração, distância e uso para esta solução. |
Métricas
Métricas gerais, agregadas em todas as rotas.
Campos | |
---|---|
aggregated_ |
Agregada nas rotas. Cada métrica é a soma (ou o valor máximo, para cargas) de todos os campos |
skipped_ |
Número de envios obrigatórios pulados. |
used_ |
Número de veículos usados. Observação: se uma rota de veículo estiver vazia e |
earliest_ |
O horário de início mais cedo de um veículo usado, calculado como o mínimo de todos os veículos usados de |
latest_ |
A hora de término mais recente de um veículo usado, calculada como o máximo de todos os veículos usados de |
costs |
Custo da solução, detalhado por campos de solicitação relacionados a custos. As chaves são caminhos proto, relativos à entrada OptimizeToursRequest, por exemplo, "model.shipments.pickups.cost", e os valores são o custo total gerado pelo campo de custo correspondente, agregado em toda a solução. Em outras palavras, costs["model.shipments.pickups.cost"] é a soma de todos os custos de retirada da solução. Todos os custos definidos no modelo são informados em detalhes aqui, exceto os custos relacionados a TransitionAttributes, que são informados de forma agregada a partir de 01/2022. |
total_ |
Custo total da solução. A soma de todos os valores no mapa de custos. |
OptimizeToursValidationError
Descreve um erro ou aviso encontrado ao validar um OptimizeToursRequest
.
Campos | |
---|---|
code |
Um erro de validação é definido pelo par ( Os campos a seguir fornecem mais contexto sobre o erro. VÁRIOS ERROS: quando há vários erros, o processo de validação tenta gerar vários deles. Assim como um compilador, esse é um processo imperfeito. Alguns erros de validação são "fatais", ou seja, eles interrompem todo o processo de validação. Esse é o caso de erros ESTABILIDADE: |
display_ |
O nome de exibição do erro. |
fields[] |
Um contexto de erro pode envolver 0, 1 (na maioria das vezes) ou mais campos. Por exemplo, a primeira coleta do veículo 4 e da remessa 2 pode ser feita da seguinte maneira:
No entanto, a cardinalidade de |
error_ |
String legível que descreve o erro. Há um mapeamento de um para um entre ESTABILIDADE: não é estável: a mensagem de erro associada a um determinado |
offending_ |
Pode conter os valores dos campos. Essa opção nem sempre está disponível. Não confie nele e use apenas para depuração manual de modelos. |
FieldReference
Especifica um contexto para o erro de validação. Um FieldReference
sempre se refere a um determinado campo neste arquivo e segue a mesma estrutura hierárquica. Por exemplo, podemos especificar o elemento 2 de start_time_windows
do veículo 5 usando:
name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }
No entanto, omitimos entidades de nível superior, como OptimizeToursRequest
ou ShipmentModel
, para não lotar a mensagem.
Campos | |
---|---|
name |
Nome do campo, por exemplo, "veículos". |
sub_ |
Subcampo anidado recursivamente, se necessário. |
Campo de união
|
|
index |
Índice do campo se ele for repetido. |
key |
Chave se o campo for um mapa. |
OutputConfig
Especifique um destino para os resultados de [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
Campos | |
---|---|
data_ |
Obrigatório. O formato dos dados de saída. |
Campo de união destination . Obrigatório. destination pode ser apenas de um dos tipos a seguir: |
|
gcs_ |
O local do Google Cloud Storage em que a saída será gravada. |
RouteModifiers
Encapsula um conjunto de condições opcionais a serem atendidas ao calcular rotas de veículos. Isso é semelhante a RouteModifiers
na API Preferred Routes da Plataforma Google Maps. Consulte: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.
Campos | |
---|---|
avoid_ |
Especifica se é necessário evitar vias com pedágio sempre que possível. A preferência será dada às rotas que não contêm vias com pedágio. Aplica-se apenas a modos de transporte motorizados. |
avoid_ |
Especifica se é necessário evitar rodovias, quando for razoável. A preferência será dada a rotas que não contêm rodovias. Aplica-se apenas a meios de transporte motorizados. |
avoid_ |
Especifica se é necessário evitar balsas. A preferência será dada às rotas que não incluem viagens de balsa. Aplica-se apenas a modos de transporte motorizados. |
avoid_ |
Opcional. Especifica se é necessário evitar a navegação em ambientes internos quando for razoável. A preferência será dada às rotas que não contêm navegação interna. Aplica-se apenas ao modo de viagem |
Envio
O envio de um único item, de uma das coletas para uma das entregas. Para que a remessa seja considerada concluída, um veículo único precisa visitar um dos locais de retirada (e diminuir a capacidade de reserva), depois visitar um dos locais de entrega mais tarde (e, portanto, aumentar novamente a capacidade de reserva).
Campos | |
---|---|
display_ |
O nome de exibição do envio definido pelo usuário. Ele pode ter até 63 caracteres e pode usar caracteres UTF-8. |
pickups[] |
Conjunto de alternativas de retirada associadas ao envio. Se não for especificado, o veículo só precisa visitar um local correspondente às entregas. |
deliveries[] |
Conjunto de alternativas de entrega associadas ao envio. Se não for especificado, o veículo só precisa visitar um local correspondente às coletas. |
load_ |
Carregar as demandas do envio (por exemplo, peso, volume, número de paletes etc.). As chaves no mapa precisam ser identificadores que descrevem o tipo da carga correspondente, de preferência incluindo também as unidades. Por exemplo: "weight_kg", "volume_gallons", "pallet_count" etc. Se uma determinada chave não aparecer no mapa, a carga correspondente será considerada nula. |
allowed_ |
Conjunto de veículos que podem realizar o envio. Se estiver vazio, todos os veículos poderão realizar a ação. Os veículos são informados pelo índice na lista |
costs_ |
Especifica o custo incorrido quando o envio é entregue por cada veículo. Se especificado, ele precisa ter:
Esses custos precisam estar na mesma unidade que |
costs_ |
Índices dos veículos a que |
pickup_ |
Especifica o tempo de desvio absoluto máximo em comparação com o caminho mais curto da coleta até a entrega. Se especificado, precisa ser não negativo, e o envio precisa conter pelo menos uma coleta e uma entrega. Por exemplo, vamos supor que t seja o tempo mais curto para ir da alternativa de retirada selecionada diretamente para a alternativa de entrega selecionada. Em seguida, a configuração
Se os limites relativos e absolutos forem especificados no mesmo envio, o mais restritivo será usado para cada par de retirada/entrega possível. Desde outubro de 2017, os desvios são aceitos apenas quando a duração da viagem não depende de veículos. |
pickup_ |
Especifica a duração máxima do início da coleta até o início da entrega de um envio. Se especificado, precisa ser não negativo, e o envio precisa conter pelo menos uma coleta e uma entrega. Isso não depende das alternativas selecionadas para retirada e entrega nem da velocidade do veículo. Isso pode ser especificado junto com as restrições de desvio máximo: a solução vai respeitar as duas especificações. |
shipment_ |
String não vazia que especifica um "type" para essa remessa. Esse recurso pode ser usado para definir incompatibilidades ou requisitos entre Difere de |
label |
Especifica um rótulo para essa remessa. Esse rótulo é informado na resposta no |
ignore |
Se verdadeiro, pule essa remessa, mas não aplique uma Ignorar um envio resulta em um erro de validação quando há É permitido ignorar um envio realizado em |
penalty_ |
Se o envio não for concluído, essa penalidade será adicionada ao custo geral das rotas. Um envio é considerado concluído se uma das alternativas de retirada e entrega for visitada. O custo pode ser expresso na mesma unidade usada para todos os outros campos relacionados a custos no modelo e precisa ser positivo. IMPORTANTE: se essa penalidade não for especificada, ela será considerada infinita, ou seja, o envio precisa ser concluído. |
pickup_ |
Especifica o tempo de desvio relativo máximo em comparação com o caminho mais curto da coleta à entrega. Se especificado, precisa ser não negativo, e o envio precisa conter pelo menos uma coleta e uma entrega. Por exemplo, vamos supor que t seja o tempo mais curto para ir da alternativa de retirada selecionada diretamente para a alternativa de entrega selecionada. Em seguida, a configuração
Se os limites relativos e absolutos forem especificados no mesmo envio, o mais restritivo será usado para cada par de retirada/entrega possível. Desde outubro de 2017, os desvios são aceitos apenas quando a duração da viagem não depende de veículos. |
Carregar
Ao realizar uma visita, um valor predefinido pode ser adicionado à carga do veículo se for uma coleta ou subtraído se for uma entrega. Essa mensagem define esse valor. Consulte load_demands
.
Campos | |
---|---|
amount |
A quantidade de carga do veículo que realiza a visita correspondente vai variar. Como é um número inteiro, os usuários devem escolher uma unidade adequada para evitar a perda de precisão. Precisa ser ≥ 0. |
VisitRequest
Solicitação de uma visita que pode ser feita por um veículo: ele tem uma geolocalização (ou duas, consulte abaixo), horários de abertura e fechamento representados por janelas de tempo e um tempo de duração do serviço (tempo gasto pelo veículo depois que ele chega para retirar ou entregar mercadorias).
Campos | |
---|---|
arrival_ |
A geolocalização em que o veículo chega ao realizar essa |
arrival_ |
O ponto de passagem em que o veículo chega ao realizar essa |
departure_ |
O geolocalização de onde o veículo sai após concluir essa |
departure_ |
O ponto de passagem em que o veículo sai depois de concluir essa |
tags[] |
Especifica as tags anexadas à solicitação de visita. Strings vazias ou duplicadas não são permitidas. |
time_ |
Janelas de tempo que restringem o horário de chegada em uma visita. Um veículo pode partir fora da janela de horário de chegada, ou seja, o horário de chegada + a duração não precisam estar dentro de uma janela de tempo. Isso pode resultar em tempo de espera se o veículo chegar antes de A ausência de As janelas de tempo precisam ser distintas, ou seja, nenhuma janela de tempo pode se sobrepor ou ser adjacente a outra, e elas precisam estar em ordem crescente.
|
duration |
Duração da visita, ou seja, o tempo gasto pelo veículo entre a chegada e a partida (para ser adicionado ao tempo de espera possível. Consulte |
cost |
Custo para atender a solicitação de visita em uma rota de veículo. Isso pode ser usado para pagar custos diferentes para cada retirada ou entrega alternativa de um envio. Esse custo precisa estar na mesma unidade que |
load_ |
Carregar as demandas dessa solicitação de visita. É igual ao campo |
visit_ |
Especifica os tipos de visita. Isso pode ser usado para alocar mais tempo necessário para que um veículo conclua essa visita (consulte Um tipo só pode aparecer uma vez. |
label |
Especifica um rótulo para este |
ShipmentModel
Um modelo de envio contém um conjunto de envios que precisam ser realizados por um conjunto de veículos, minimizando o custo geral, que é a soma de:
- o custo do roteamento dos veículos (soma do custo por tempo total, custo por tempo de viagem e custo fixo em todos os veículos).
- as penalidades por não entrega.
- o custo da duração global dos envios
Campos | |
---|---|
shipments[] |
Conjunto de remessas que precisam ser realizadas no modelo. |
vehicles[] |
Conjunto de veículos que podem ser usados para realizar visitas. |
global_ |
Horário de início e término global do modelo: nenhum horário fora desse intervalo pode ser considerado válido. O período do modelo precisa ser inferior a um ano, ou seja, o Ao usar campos |
global_ |
Se não for definido, o padrão será 00:00:00 UTC, 1o de janeiro de 1971 (ou seja, segundos: 31536000, nanos: 0). |
global_ |
A "duração global" do plano geral é a diferença entre o horário de início e o horário de término de todos os veículos. Os usuários podem atribuir um custo por hora a essa quantidade para tentar otimizar a conclusão mais rápida do trabalho, por exemplo. Esse custo precisa estar na mesma unidade que |
duration_ |
Especifica as matrizes de duração e distância usadas no modelo. Se esse campo estiver vazio, o Google Maps ou as distâncias geodésicas serão usados, dependendo do valor do campo Exemplos de uso:
|
duration_ |
Tags que definem as origens das matrizes de duração e distância. As tags correspondem a |
duration_ |
Tags que definem os destinos das matrizes de duração e distância; As tags correspondem a |
transition_ |
Atributos de transição adicionados ao modelo. |
shipment_ |
Conjuntos de shipment_types incompatíveis (consulte |
shipment_ |
Conjuntos de requisitos de |
precedence_ |
Conjunto de regras de precedência que precisam ser aplicadas no modelo. |
max_ |
Limita o número máximo de veículos ativos. Um veículo está ativo se a rota dele realiza pelo menos um envio. Isso pode ser usado para limitar o número de rotas no caso de haver menos motoristas do que veículos e a frota de veículos ser heterogênea. A otimização vai selecionar o melhor subconjunto de veículos a ser usado. Precisa ser estritamente positivo. |
DurationDistanceMatrix
Especifica uma matriz de duração e distância dos locais de início e término da visita e do veículo.
Campos | |
---|---|
rows[] |
Especifica as linhas da matriz de duração e distância. Ele precisa ter tantos elementos quanto |
vehicle_ |
Tag que define a quais veículos essa matriz de duração e distância se aplica. Se estiver vazio, isso se aplica a todos os veículos, e só pode haver uma matriz. Cada início de veículo precisa corresponder a exatamente uma matriz, ou seja, exatamente um dos campos Todas as matrizes precisam ter um |
Linha
Especifica uma linha da matriz de duração e distância.
Campos | |
---|---|
durations[] |
Valores de duração para uma linha específica. Ele precisa ter tantos elementos quanto |
meters[] |
Valores de distância para uma linha específica. Se nenhum custo ou restrição se referir a distâncias no modelo, esse campo pode ficar em branco. Caso contrário, ele precisa ter tantos elementos quanto |
PrecedenceRule
Uma regra de precedência entre dois eventos (cada evento é a retirada ou a entrega de um envio): o "segundo" evento precisa começar pelo menos offset_duration
depois do "primeiro".
Várias precedências podem se referir aos mesmos eventos (ou relacionados), por exemplo, "A retirada de B acontece após a entrega de A" e "A retirada de C acontece após a retirada de B".
Além disso, as precedências só são aplicadas quando os dois envios são realizados e são ignoradas de outra forma.
Campos | |
---|---|
first_ |
Indica se o evento "primeiro" é uma entrega. |
second_ |
Indica se o "segundo" evento é uma entrega. |
offset_ |
O deslocamento entre o "primeiro" e o "segundo" evento. Ele pode ser negativo. |
first_ |
Índice de envio do evento "primeiro". É necessário especificar este campo. |
second_ |
Índice de envio do "segundo" evento. É necessário especificar este campo. |
ShipmentRoute
A rota de um veículo pode ser decomposta, ao longo do eixo do tempo, desta forma (assumimos que há n visitas):
| | | | | T[2], | | |
| Transition | Visit #0 | | | V[2], | | |
| #0 | aka | T[1] | V[1] | ... | V[n-1] | T[n] |
| aka T[0] | V[0] | | | V[n-2],| | |
| | | | | T[n-1] | | |
^ ^ ^ ^ ^ ^ ^ ^
vehicle V[0].start V[0].end V[1]. V[1]. V[n]. V[n]. vehicle
start (arrival) (departure) start end start end end
Observe que há uma diferença entre:
- "Eventos pontuais", como o início e o fim do veículo e o início e o fim de cada visita (ou seja, a chegada e a partida). Eles acontecem em um determinado segundo.
- "intervalos de tempo", como as visitas em si e a transição entre elas. Embora os intervalos de tempo às vezes tenham duração zero, ou seja, começam e terminam no mesmo segundo, eles geralmente têm uma duração positiva.
Invariantes:
- Se houver n visitas, haverá n+1 transições.
- Uma visita é sempre cercada por uma transição anterior (mesmo índice) e uma transição posterior (índice + 1).
- A partida do veículo é sempre seguida pela transição #0.
- O fim do veículo é sempre precedido pela transição #n.
Veja o que acontece durante uma Transition
e uma Visit
:
---+-------------------------------------+-----------------------------+-->
| TRANSITION[i] | VISIT[i] |
| | |
| * TRAVEL: the vehicle moves from | PERFORM the visit: |
| VISIT[i-1].departure_location to | |
| VISIT[i].arrival_location, which | * Spend some time: |
| takes a given travel duration | the "visit duration". |
| and distance | |
| | * Load or unload |
| * BREAKS: the driver may have | some quantities from the |
| breaks (e.g. lunch break). | vehicle: the "demand". |
| | |
| * WAIT: the driver/vehicle does | |
| nothing. This can happen for | |
| many reasons, for example when | |
| the vehicle reaches the next | |
| event's destination before the | |
| start of its time window | |
| | |
| * DELAY: *right before* the next | |
| arrival. E.g. the vehicle and/or | |
| driver spends time unloading. | |
| | |
---+-------------------------------------+-----------------------------+-->
^ ^ ^
V[i-1].end V[i].start V[i].end
Por fim, confira como TRAVEL, BREAKS, DELAY e WAIT podem ser organizados durante uma transição.
- Elas não se sobrepõem.
- O DELAY é único e precisa ser um período contíguo de tempo antes da próxima visita (ou término do veículo). Portanto, basta saber a duração do atraso para saber o início e o fim.
- Os intervalos são períodos de tempo contíguos e não sobrepostos. A resposta especifica o horário de início e a duração de cada intervalo.
- TRAVEL e WAIT são "preemptáveis": eles podem ser interrompidos várias vezes durante essa transição. Os clientes podem presumir que a viagem vai acontecer "assim que possível" e que o tempo restante será preenchido com "espera".
Um exemplo (complexo):
TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
|| | | | | | | ||
|| T | B | T | | B | | D ||
|| r | r | r | W | r | W | e ||
|| a | e | a | a | e | a | l ||
|| v | a | v | i | a | i | a ||
|| e | k | e | t | k | t | y ||
|| l | | l | | | | ||
|| | | | | | | ||
--++-----------------------------------------------------------------++-->
Campos | |
---|---|
vehicle_ |
Veículo que executa a rota, identificado pelo índice na origem |
vehicle_ |
Rótulo do veículo que executa essa rota, igual a |
vehicle_ |
Hora em que o veículo inicia o trajeto. |
vehicle_ |
Hora em que o veículo termina o trajeto. |
visits[] |
Sequência ordenada de visitas que representa uma rota. visits[i] é a i-ésima visita na rota. Se esse campo estiver vazio, o veículo será considerado como não utilizado. |
transitions[] |
Lista ordenada de transições para a rota. |
has_ |
Quando
A chegada em next_visit provavelmente vai acontecer mais tarde do que a janela de tempo atual devido ao aumento da estimativa de tempo de viagem |
route_ |
A representação codificada da polilinha do trajeto. Esse campo só será preenchido se |
breaks[] |
Pausas programadas para o veículo que faz essa rota. A sequência |
metrics |
Métricas de duração, distância e carga para essa rota. Os campos de |
route_ |
Custo da rota, detalhado por campos de solicitação relacionados a custos. As chaves são caminhos proto, em relação à entrada OptimizeToursRequests, por exemplo, "model.shipments.pickups.cost", e os valores são o custo total gerado pelo campo de custo correspondente, agregado em todo o trajeto. Em outras palavras, costs["model.shipments.pickups.cost"] é a soma de todos os custos de retirada no trajeto. Todos os custos definidos no modelo são informados em detalhes aqui, exceto os custos relacionados a TransitionAttributes, que são informados de forma agregada a partir de 01/2022. |
route_ |
Custo total da rota. A soma de todos os custos no mapa de custos. |
Intervalo
Dados que representam a execução de uma pausa.
Campos | |
---|---|
start_ |
Horário de início de um intervalo. |
duration |
Duração de uma pausa. |
EncodedPolyline
A representação codificada de uma polilinha. Saiba mais sobre a codificação de polilinhas aqui: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.
Campos | |
---|---|
points |
String que representa os pontos codificados da polilinha. |
Transição
Transição entre dois eventos na rota. Consulte a descrição de ShipmentRoute
.
Se o veículo não tiver start_location
e/ou end_location
, as métricas de viagem correspondentes serão 0.
Campos | |
---|---|
travel_ |
Duração da viagem durante essa transição. |
travel_ |
Distância percorrida durante a transição. |
traffic_ |
Quando o tráfego é solicitado por |
delay_ |
Soma das durações de atraso aplicadas a essa transição. Se houver, o atraso começa exatamente |
break_ |
Soma da duração das pausas ocorridas durante essa transição, se houver. Os detalhes sobre a hora de início e a duração de cada intervalo são armazenados em |
wait_ |
Tempo gasto esperando durante essa transição. A duração da espera corresponde ao tempo de inatividade e não inclui o tempo de intervalo. Além disso, esse tempo de espera pode ser dividido em vários intervalos não contíguos. |
total_ |
Duração total da transição, fornecida para conveniência. É igual a:
|
start_ |
Horário de início desta transição. |
route_ |
A representação codificada da polilinha do trajeto seguido durante a transição. Esse campo só será preenchido se |
route_ |
Apenas saída. Um token opaco que pode ser transmitido ao SDK Navigation para reconstruir a rota durante a navegação e, em caso de redirecionamento, respeitar a intenção original quando a rota foi criada. Tratar esse token como um blob opaco. Não compare o valor entre as solicitações, porque ele pode mudar mesmo que o serviço retorne a mesma rota. Esse campo só será preenchido se |
vehicle_ |
Cargas de veículos durante essa transição, para cada tipo que aparece na As cargas durante a primeira transição são as cargas iniciais da rota do veículo. Depois, após cada visita, o |
VehicleLoad
Informa a carga real do veículo em algum ponto do trajeto para um determinado tipo (consulte Transition.vehicle_loads
).
Campos | |
---|---|
amount |
A quantidade de carga no veículo para o tipo especificado. A unidade de carga geralmente é indicada pelo tipo. Consulte |
Acesse
Uma visita realizada durante uma rota. Essa visita corresponde à retirada ou entrega de um Shipment
.
Campos | |
---|---|
shipment_ |
Índice do campo |
is_ |
Se verdadeiro, a visita corresponde à retirada de um |
visit_ |
Índice de |
start_ |
Horário em que a visita começa. O veículo pode chegar antes disso ao local da visita. Os horários são consistentes com o |
load_ |
Demanda total de carga de visitas como a soma do envio e da solicitação de visita |
detour |
Tempo de desvio extra devido aos envios visitados no trajeto antes da visita e ao possível tempo de espera induzido pelas janelas de tempo. Se a visita for uma entrega, o desvio será calculado a partir da visita de retirada correspondente e será igual a:
Caso contrário, ele é calculado com base no
|
shipment_ |
Cópia do |
visit_ |
Cópia do |
ShipmentTypeIncompatibility
Especifica incompatibilidades entre os envios, dependendo do shipment_type. A exibição de remessas incompatíveis no mesmo trajeto é restrita com base no modo de incompatibilidade.
Campos | |
---|---|
types[] |
Lista de tipos incompatíveis. Dois envios com |
incompatibility_ |
Modo aplicado à incompatibilidade. |
IncompatibilityMode
Modos que definem como a aparência de remessas incompatíveis é restrita na mesma rota.
Enums | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Modo de incompatibilidade não especificado. Esse valor nunca pode ser usado. |
NOT_PERFORMED_BY_SAME_VEHICLE |
Nesse modo, dois envios com tipos incompatíveis nunca podem compartilhar o mesmo veículo. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
Para dois envios com tipos incompatíveis com o modo de incompatibilidade
|
ShipmentTypeRequirement
Especifica os requisitos entre os envios com base no shipment_type. Os detalhes do requisito são definidos pelo modo de requisito.
Campos | |
---|---|
required_ |
Lista de tipos de envio alternativos exigidos pelo |
dependent_ |
Todos os envios com um tipo no campo OBSERVAÇÃO: não são permitidas cadeias de requisitos em que um |
requirement_ |
Modo aplicado ao requisito. |
RequirementMode
Modos que definem a aparência de remessas dependentes em um trajeto.
Enums | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Modo de requisito não especificado. Esse valor nunca pode ser usado. |
PERFORMED_BY_SAME_VEHICLE |
Nesse modo, todos os envios "dependentes" precisam compartilhar o mesmo veículo de pelo menos um dos envios "obrigatórios". |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
Com o modo Portanto, uma retirada de envio "dependente" precisa ter:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Igual antes, exceto que os envios "dependentes" precisam ter um envio "obrigatório" no veículo no momento da entrega. |
SkippedShipment
Especifica os detalhes dos envios não realizados em uma solução. Para casos triviais e/ou se conseguirmos identificar a causa da omissão, vamos informar o motivo aqui.
Campos | |
---|---|
index |
O índice corresponde ao índice do envio na |
label |
Cópia do |
reasons[] |
Uma lista de motivos que explicam por que o envio foi ignorado. Consulte o comentário acima de |
Motivo
Se pudermos explicar por que o envio foi pulado, os motivos serão listados aqui. Se o motivo não for o mesmo para todos os veículos, reason
terá mais de um elemento. Um envio pulado não pode ter motivos duplicados, ou seja, quando todos os campos são iguais, exceto example_vehicle_index
. Exemplo:
reasons {
code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
example_vehicle_index: 1
example_exceeded_capacity_type: "Apples"
}
reasons {
code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
example_vehicle_index: 3
example_exceeded_capacity_type: "Pears"
}
reasons {
code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
example_vehicle_index: 1
}
A remessa pulada é incompatível com todos os veículos. Os motivos podem ser diferentes para todos os veículos, mas a capacidade de "Maçãs" de pelo menos um veículo seria excedida (incluindo o veículo 1), a capacidade de "Peras" de pelo menos um veículo seria excedida (incluindo o veículo 3) e o limite de distância de pelo menos um veículo seria excedido (incluindo o veículo 1).
Campos | |
---|---|
code |
Consulte os comentários do código. |
example_ |
Se o código do motivo for |
example_ |
Se o motivo estiver relacionado a uma incompatibilidade entre o envio e o veículo, esse campo vai mostrar o índice de um veículo relevante. |
Código
Código que identifica o tipo de motivo. A ordem aqui não tem sentido. Em particular, não há indicação de que um determinado motivo vai aparecer antes de outro na solução, se ambos se aplicarem.
Enums | |
---|---|
CODE_UNSPECIFIED |
Isso nunca deve ser usado. |
NO_VEHICLE |
Não há nenhum veículo no modelo, o que torna todos os envios inviáveis. |
DEMAND_EXCEEDS_VEHICLE_CAPACITY |
A demanda do envio excede a capacidade de um veículo para alguns tipos de capacidade, um deles é example_exceeded_capacity_type . |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT |
A distância mínima necessária para realizar esse envio, ou seja, de Para essa computação, usamos as distâncias geodésicas. |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT |
O tempo mínimo necessário para realizar esse envio, incluindo o tempo de viagem, de espera e de serviço, excede o Observação: o tempo de viagem é calculado no melhor cenário, ou seja, como distância geodésica x 36 m/s (aproximadamente 130 km/hora). |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT |
Igual ao exemplo acima, mas comparamos apenas o tempo mínimo de viagem e o travel_duration_limit do veículo. |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS |
O veículo não pode realizar esse envio no melhor cenário (consulte CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT para o cálculo de tempo) se ele começar no horário de início mais cedo: o tempo total faria o veículo terminar depois do horário de término mais recente. |
VEHICLE_NOT_ALLOWED |
O campo allowed_vehicle_indices da remessa não está vazio e o veículo não pertence a ela. |
TimeWindow
As janelas de tempo restringem o horário de um evento, como o horário de chegada em uma visita ou o início e o término de um veículo.
Os limites rígidos da janela de tempo, start_time
e end_time
, aplicam o horário mais cedo e mais tarde do evento, de modo que start_time <= event_time <=
end_time
. O limite inferior da janela de tempo flexível, soft_start_time
, expressa uma preferência para que o evento ocorra em ou após soft_start_time
, incorrendo em um custo proporcional ao tempo antes de soft_start_time. O limite superior da janela de tempo flexível, soft_end_time
, expressa uma preferência para que o evento ocorra em ou antes de soft_end_time
, incorrendo em um custo proporcional ao tempo após soft_end_time
. start_time
, end_time
, soft_start_time
e soft_end_time
precisam estar dentro dos limites de tempo globais (consulte ShipmentModel.global_start_time
e ShipmentModel.global_end_time
) e respeitar:
0 <= `start_time` <= `end_time` and
0 <= `start_time` <= `soft_start_time` and
0 <= `soft_end_time` <= `end_time`.
Campos | |
---|---|
start_ |
O horário de início da janela de tempo rígido. Se não for especificado, será definido como |
end_ |
Horário de término da janela de tempo rígido. Se não for especificado, será definido como |
soft_ |
O horário de início flexível do período. |
soft_ |
O horário de término flexível da janela. |
cost_ |
Um custo por hora adicionado a outros custos no modelo se o evento ocorrer antes de soft_start_time, calculado como:
Esse custo precisa ser positivo, e o campo só pode ser definido se soft_start_time tiver sido definido. |
cost_ |
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 |
TransitionAttributes
Especifica os atributos das transições entre duas visitas consecutivas em um trajeto. Várias TransitionAttributes
podem ser aplicadas à mesma transição. Nesse caso, todos os custos extras são somados e a restrição ou o limite mais rigoroso é aplicado, seguindo a semântica "E" natural.
Campos | |
---|---|
src_ |
Tags que definem o conjunto de transições (src->dst) a que esses atributos se aplicam. Uma visita de origem ou início do veículo corresponde se o |
excluded_ |
Consulte |
dst_ |
Uma visita ao destino ou o fim do veículo corresponde se |
excluded_ |
Consulte |
cost |
Especifica um custo para realizar essa transição. Esse valor está na mesma unidade que todos os outros custos no modelo e não pode ser negativo. Ele é aplicado sobre todos os outros custos existentes. |
cost_ |
Especifica um custo por quilômetro aplicado à distância percorrida ao realizar essa transição. Ele é a soma de todos os |
distance_ |
Especifica um limite na distância percorrida ao realizar essa transição. A partir de junho de 2021, apenas os limites flexíveis são aceitos. |
delay |
Especifica um atraso incorrido ao realizar essa transição. Esse atraso sempre ocorre após a conclusão da visita de origem e antes do início da visita de destino. |
Veículo
Modela um veículo em um problema de envio. A solução de um problema de envio vai criar uma rota que começa em start_location
e termina em end_location
para esse veículo. Um trajeto é uma sequência de visitas (consulte ShipmentRoute
).
Campos | |
---|---|
display_ |
O nome de exibição do veículo definido pelo usuário. Ele pode ter até 63 caracteres e pode usar caracteres UTF-8. |
travel_ |
O modo de viagem, que afeta as vias que podem ser usadas pelo veículo e a velocidade dele. Consulte também |
route_ |
Um conjunto de condições a serem atendidas que afetam a forma como as rotas são calculadas para o veículo. |
start_ |
Local geográfico em que o veículo começa antes de pegar os envios. Se não for especificado, o veículo vai começar na primeira coleta. Se o modelo de envio tiver matrizes de duração e distância, |
start_ |
Ponto de passagem que representa um local geográfico em que o veículo começa antes de pegar os envios. Se nem |
end_ |
Localização geográfica onde o veículo termina depois de concluir a última |
end_ |
Ponto de passagem que representa um local geográfico onde o veículo termina depois de concluir o último |
start_ |
Especifica as tags anexadas ao início do trajeto do veículo. Strings vazias ou duplicadas não são permitidas. |
end_ |
Especifica as tags anexadas ao fim do trajeto do veículo. Strings vazias ou duplicadas não são permitidas. |
start_ |
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 pertencentes ao mesmo campo repetido precisam ser distintas, ou seja, nenhuma janela de tempo pode se sobrepor ou ser adjacente a outra, e elas precisam estar em ordem cronológica.
|
end_ |
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 pertencentes ao mesmo campo repetido precisam ser distintas, ou seja, nenhuma janela de tempo pode se sobrepor ou ser adjacente a outra, e elas precisam estar em ordem cronológica.
|
unloading_ |
Política de descarregamento aplicada ao veículo. |
load_ |
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 |
cost_ |
Custos do veículo: todos os custos são somados e precisam estar na mesma unidade que Custo por hora da rota do veículo. Esse custo é aplicado ao tempo total gasto no trajeto e inclui o tempo de viagem, de espera e de visita. O uso de |
cost_ |
Custo por hora de percurso do trajeto do veículo. Esse custo é aplicado apenas ao tempo de viagem do trajeto (ou seja, o que é informado em |
cost_ |
Custo por quilômetro da rota do veículo. Esse custo é aplicado à distância informada no |
fixed_ |
Custo fixo aplicado se o veículo for usado para processar um envio. |
used_ |
Este campo só se aplica a veículos quando a rota não atende a nenhum envio. Ele indica se o veículo deve ser considerado usado ou não nesse caso. Se verdadeiro, o veículo vai da origem ao destino, mesmo que não atenda a nenhum envio, e os custos de tempo e distância resultantes da viagem de origem a destino são levados em consideração. Caso contrário, o veículo não vai se deslocar do local de início ao de destino, e nenhum |
route_ |
Limite aplicado à duração total da rota do veículo. Em um determinado |
travel_ |
Limite aplicado à duração da viagem da rota do veículo. Em um determinado |
route_ |
Limite aplicado à distância total da rota do veículo. Em um determinado |
extra_ |
Especifica um mapa de strings de visit_types para durações. A duração é o tempo além do Se uma solicitação de visita tiver vários tipos, uma duração será adicionada para cada tipo no mapa. |
break_ |
Descreve a programação de pausas a ser aplicada a esse veículo. Se estiver vazio, nenhuma pausa será programada para esse veículo. |
label |
Especifica um rótulo para este veículo. Esse rótulo é informado na resposta como o |
ignore |
Se for verdadeiro, Se um envio for realizado por um veículo ignorado em Se um envio for realizado por um veículo ignorado em |
travel_ |
Especifica um fator multiplicador que pode ser usado para aumentar ou diminuir os tempos de viagem desse veículo. Por exemplo, definir esse valor como 2,0 significa que o veículo é mais lento e tem tempos de viagem duas vezes maiores do que os veículos padrão. Esse valor não afeta a duração das visitas. Isso afeta o custo se ATENÇÃO: os tempos de viagem serão arredondados para o segundo mais próximo depois que esse múltiplo for aplicado, mas antes de realizar qualquer operação numérica. Portanto, um múltiplo pequeno pode resultar em perda de precisão. Consulte também |
DurationLimit
Um limite que define a duração máxima do trajeto de um veículo. Ele pode ser hardware ou software.
Quando um campo de limite flexível é definido, o limite máximo flexível e o custo associado precisam ser definidos juntos.
Campos | |
---|---|
max_ |
Um limite rígido que restringe a duração a, no máximo, max_duration. |
soft_ |
Um limite flexível que não aplica um limite máximo de duração, mas que, quando violado, faz com que a rota incorra em um custo. Esse custo é somado a outros custos definidos no modelo, com a mesma unidade. Se definido, |
quadratic_ |
Um limite flexível não aplica um limite máximo de duração, mas, quando violado, faz com que a rota incorra em um custo, quadrático na duração. Esse custo é somado a outros custos definidos no modelo, com a mesma unidade. Se definido,
|
cost_ |
Custo por hora incorrido se o limite de
O custo não pode ser negativo. |
cost_ |
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 da seguinte forma:
O custo não pode ser negativo. |
LoadLimit
Define um limite de carga aplicável a um veículo, por exemplo, "este caminhão só pode transportar até 3.500 kg". Consulte load_limits
.
Campos | |
---|---|
soft_ |
Um limite flexível da carga. Consulte |
cost_ |
Se a carga exceder |
start_ |
O intervalo de carga aceitável do veículo no início do trajeto. |
end_ |
O intervalo de carga aceitável do veículo no fim da rota. |
max_ |
A quantidade máxima aceitável de carga. |
Intervalo
Intervalo de valores de carga aceitáveis.
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 especificado, a carga máxima não será restringida por essa mensagem. Se ambos forem especificados, |
TravelMode
Meios de transporte que podem ser usados por veículos.
Eles precisam ser um subconjunto dos modos de transporte da API Preferred Routes da Plataforma Google Maps. Consulte: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
Enums | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
Meio de transporte não especificado, equivalente a DRIVING . |
DRIVING |
Meio de transporte correspondente às rotas de carro (carro, ...). |
WALKING |
Meio de transporte correspondente às rotas a pé. |
UnloadingPolicy
Política sobre como um veículo pode ser descarregado. Aplica-se apenas a remessas com retirada e entrega.
Outros envios podem ocorrer em qualquer lugar da rota, independente de unloading_policy
.
Enums | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
Política de descarregamento não especificada. As entregas precisam ocorrer após as respectivas coletas. |
LAST_IN_FIRST_OUT |
As entregas precisam ocorrer na ordem inversa das retiradas |
FIRST_IN_FIRST_OUT |
As entregas precisam ocorrer na mesma ordem das retiradas |
Ponto de referência
Encapsula um ponto de passagem. Os pontos de passagem marcam os locais de chegada e partida de Solicitações de visita e os locais de início e término dos veículos.
Campos | |
---|---|
side_ |
Opcional. Indica que o local desse waypoint tem preferência para que o veículo pare em um lado específico da via. Quando você define esse valor, a rota passa pelo local para que o veículo possa parar no lado da estrada em que o local está localizado a partir do centro da via. Essa opção não funciona para o modo de deslocamento "A pé". |
Campo de união location_type . Diferentes maneiras de representar um local. location_type pode ser apenas de um dos tipos a seguir: |
|
location |
Um ponto especificado usando coordenadas geográficas, incluindo um título opcional. |
place_ |
O ID do lugar do ponto de interesse associado ao ponto de passagem. |