Í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)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 passeios de veículos.
Validade de certos tipos de campos:
google.protobuf.Timestamp
- O horário está no formato Unix: segundos desde 1970-01-01T00:00:00+00:00.
- segundos deve estar em [0, 253402300799], ou seja, em [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- nanos precisa ser indefinido ou definido como 0.
google.protobuf.Duration
- segundos deve estar em [0, 253402300799], ou seja, em [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- nanos precisa ser indefinido ou definido como 0.
google.type.LatLng
- deve estar entre [-90.0, 90.0].
- a longitude precisa estar entre [-180.0, 180.0].
- pelo menos uma das coordenadas de latitude e longitude deve ser diferente de zero.
BatchOptimizeTours |
---|
Otimiza tours de veículo para uma ou mais mensagens Esse método é uma operação de longa duração (LRO, na sigla em inglês). As entradas para otimização (mensagens
|
OptimizeTours |
---|
Envia um Um modelo O objetivo é fornecer uma atribuição de
|
AggregatedMetrics
Métricas agregadas para ShipmentRoute
(resp. para OptimizeToursResponse
em todos os elementos Transition
e/ou Visit
(resp. em todos os ShipmentRoute
).
Campos | |
---|---|
performed_shipment_count |
Número de remessas realizadas. Observe que cada par de retirada e entrega é contabilizado apenas uma vez. |
travel_duration |
Duração total da viagem de um trajeto ou solução. |
wait_duration |
Duração total de espera para um trajeto ou solução. |
delay_duration |
Duração total do atraso de um trajeto ou solução. |
break_duration |
Duração total do intervalo de um trajeto ou solução. |
visit_duration |
Duração total da visita de um trajeto ou solução. |
total_duration |
A duração total precisa ser igual à soma de todas as durações acima. Para trajetos, ele também corresponde a:
|
travel_distance_meters |
Distância total de viagem de um trajeto ou solução. |
max_loads |
Carga máxima alcançada ao longo do trajeto (solução de resposta), para cada uma das quantidades no trajeto (solução correspondente), calculada como a máxima em todas as |
BatchOptimizeToursMetadata
Esse tipo não tem campos.
Metadados de operação para chamadas BatchOptimizeToursRequest
.
BatchOptimizeToursRequest
Solicitação para otimizar tours em lote como uma operação assíncrona. Cada arquivo de entrada precisa conter um OptimizeToursRequest
, e cada arquivo de saída vai conter 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_configs[] |
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 maneira assíncrona.
Campos | |
---|---|
display_name |
Opcional. Nome de modelo definido pelo usuário, pode ser usado como alias pelos usuários para acompanhar os modelos. |
input_config |
Obrigatório. Informações sobre o modelo de entrada. |
output_config |
Obrigatório. A informação do local de saída desejada. |
BatchOptimizeToursResponse
Esse tipo não tem campos.
Resposta a BatchOptimizeToursRequest
. Ele é retornado na operação de longa duração após a conclusão da operação.
BreakRule
Regras para criar intervalos de tempo para um veículo (por exemplo, intervalos de almoço). Uma pausa é um período contíguo em que o veículo fica ocioso na posição atual e não pode realizar nenhuma visita. Pode ocorrer uma pausa:
- durante a viagem entre duas visitas (que inclui o tempo antes ou logo depois de uma visita, mas não no meio de uma visita), nesse caso, o tempo em trânsito correspondente entre as visitas é estendido
- ou antes de ligar o veículo (não pode ser ligado no meio de uma pausa), o que não afeta o horário de início do veículo.
- ou depois do fim do veículo (idto, com o horário de término do veículo).
Campos | |
---|---|
break_requests[] |
Sequência de intervalos. Veja a mensagem |
frequency_constraints[] |
Várias |
BreakRequest
A sequência de quebras (ou seja, o número e a ordem) de cada veículo deve ser conhecida com antecedência. Os BreakRequest
s repetidos definem essa sequência, na ordem em que precisam ocorrer. As janelas de tempo (earliest_start_time
/ latest_start_time
) podem se sobrepor, mas precisam ser compatíveis com a ordem (essa opção está marcada).
Campos | |
---|---|
earliest_start_time |
Obrigatório. Limite inferior (inclusivo) no início da quebra. |
latest_start_time |
Obrigatório. Limite superior (inclusivo) no início da quebra. |
min_duration |
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 pausa. Por exemplo, "É preciso haver um intervalo de pelo menos uma hora a cada 12 horas". Supondo que isso possa ser interpretado como "Em qualquer janela de tempo deslizante de 12h, deve haver pelo menos um intervalo de pelo menos uma hora", esse exemplo seria traduzido como 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 respeitarão todas essas restrições, além dos períodos e das 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 "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_break_duration |
Obrigatório. Duração mínima do intervalo para essa restrição. Não negativo. Confira a descrição de |
max_inter_break_duration |
Obrigatório. Período 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 |
JavaScript Object Notation. |
PROTO_TEXT |
Formato de texto do 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. Pode ser difícil ou suave.
Se um limite flexível for definido, soft_max_meters
e cost_per_kilometer_above_soft_max
precisarão ser definidos e não negativos.
Campos | |
---|---|
max_meters |
Um limite rígido que restringe a distância a ser no máximo max_meters. O limite não pode ser negativo. |
soft_max_meters |
Um limite flexível não aplica um limite máximo de distância, mas, quando violado, resulta em um custo que soma os outros custos definidos no modelo, com a mesma unidade. Se definido, soft_max_meters precisa ser menor que max_meters e não deve ser negativo. |
cost_per_kilometer_above_soft_max |
Custo por quilômetro incorrido se a distância estiver acima do 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 devem ser limitadas e como elas devem ser limitadas.
Campos | |
---|---|
routes[] |
Rotas da solução a ser injetada. Algumas rotas podem ser omitidas da solução original. As rotas e remessas ignoradas precisam atender às suposições de validade básicas listadas para |
skipped_shipments[] |
As remessas da solução a serem injetadas foram ignoradas. Alguns podem ser omitidos da solução original. Veja o campo |
constraint_relaxations[] |
Para zero ou mais grupos de veículos, especifica quando e quanto relaxar restrições. Se este campo estiver vazio, todos os trajetos com veículos não vazios serão totalmente restritos. |
ConstraintRelaxation
Para um grupo de veículos, especifica em quais limites as restrições de visitas serão reduzidas e em qual nível. As remessas listadas no campo skipped_shipment
são restritas a serem ignoradas, ou seja, não podem ser realizadas.
Campos | |
---|---|
relaxations[] |
Todos os relaxamentos de restrição de visita que se aplicam às visitas em trajetos com veículos em |
vehicle_indices[] |
Especifica os índices de veículos aos quais a restrição de visita Um índice de veículos é 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 limitados, e não será possível inserir ou adicionar novas visitas a esses trajetos. Além disso, os horários de início e término de um veículo em routes
são totalmente limitados, 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 satisfaz:
route.visits(j).start_time >= relaxations(i).threshold_time
Ej + 1 >= relaxations(i).threshold_visit_count
Da mesma forma, a partida do veículo é relaxada para relaxations(i).level
se atender a:
vehicle_start_time >= relaxations(i).threshold_time
Erelaxations(i).threshold_visit_count == 0
e a extremidade do veículo será relaxada pararelaxations(i).level
se atender a: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 atender a threshold_visit_count
OU a threshold_time
, adicione dois relaxations
com o mesmo level
: um com apenas threshold_visit_count
definido e outro com apenas threshold_time
definidos. Se uma visita satisfizer as condições de vários relaxations
, o nível mais descontraído será aplicado. Como resultado, do início do veículo até as visitas ao trajeto até o final, o nível de relaxamento fica mais relaxado, ou seja, o nível de relaxamento não diminui à medida que o trajeto avança.
O tempo e a sequência das visitas ao trajeto que não atendem às condições de limite de qualquer relaxations
são totalmente limitados, e nenhuma visita pode ser inserida nessas sequências. Além disso, se o início ou fim de um veículo não atender às condições de relaxamento, o tempo vai 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 |
threshold_time |
O momento em que o |
threshold_visit_count |
É o número de visitas a partir das quais o Se for |
Nível
Expressa os diferentes níveis de relaxamento de restrição, que são aplicados para uma visita e os seguintes quando ele satisfaz as condições de limite.
A enumeração abaixo está em ordem crescente de relaxamento.
Enums | |
---|---|
LEVEL_UNSPECIFIED |
Nível de relaxamento padrão implícito: nenhuma restrição é relaxada, ou seja, todas as visitas são totalmente limitadas. 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 os horários de início/término do veículo serão afrouxados, mas cada visita permanece vinculada ao mesmo veículo, e a sequência da visita deve ser observada: nenhuma visita pode ser inserida entre eles ou antes deles. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Igual a RELAX_VISIT_TIMES_AFTER_THRESHOLD , mas a sequência de visitas também é flexível: as visitas permanecem simplesmente vinculadas ao veículo. |
RELAX_ALL_AFTER_THRESHOLD |
Igual ao RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD , mas o veículo também é calmo: as visitas são totalmente sem custo financeiro dentro do limite ou após essa data e podem apresentar problemas. |
InputConfig
Especifique uma entrada para [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteoptimizationService.BatchOptimizeTours].
Campos | |
---|---|
data_format |
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_source |
Um local do Google Cloud Storage. Precisa ser um único objeto (arquivo). |
Local
Encapsula um local (um ponto geográfico e um cabeçalho opcional).
Campos | |
---|---|
lat_lng |
Coordenadas geográficas do waypoint. |
heading |
A bússola associada à direção do fluxo de tráfego. Este valor é usado para especificar o lado da estrada a ser usado para embarque e desembarque. Os valores de direção podem ser de 0 a 360, onde 0 especifica uma direção para o norte, 90 especifica uma orientação para o leste etc. |
OptimizeToursRequest
Solicitação a ser dada a um solucionador de otimização de passeio que define o modelo de envio a ser resolvido, bem como parâmetros de otimização.
Campos | |
---|---|
parent |
Obrigatório. Projeto ou local de destino 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 retornará uma resposta antes que o período de tempo limite tenha decorrido ou que o prazo do servidor para solicitações síncronas seja atingido, o que ocorrer primeiro. Para solicitações assíncronas, o servidor gerará uma solução (se possível) antes que o tempo limite tenha decorrido. |
model |
Modelo de envio a ser resolvido. |
solving_mode |
Por padrão, o modo de solução é |
search_mode |
Modo de pesquisa usado para resolver a solicitação. |
injected_first_solution_routes[] |
Orientar o algoritmo de otimização para encontrar uma primeira solução semelhante a uma solução anterior. O modelo é restrito quando a primeira solução é criada. As remessas não realizadas em uma rota são implicitamente ignoradas na primeira solução, mas podem ser realizadas 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 inviabilidade pode ser retornado. |
injected_solution_constraint |
Restrinja o algoritmo de otimização para encontrar uma solução final semelhante a uma solução anterior. Por exemplo, isso pode ser usado para congelar partes de trajetos que já foram concluídos ou que estão a serem concluídos, mas não podem ser modificados. Se a solução injetada não for viável, um erro de validação não será necessariamente retornado, e um erro indicando inviabilidade pode ser retornado. |
refresh_details_routes[] |
Se não estiver vazio, os trajetos indicados serão atualizados 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 2020/11, esse campo só preenche as polilinhas de trajetos não vazios e exige que Os campos Este campo não pode ser usado com
|
interpret_injected_solutions_using_labels |
Se verdadeiro:
Essa interpretação se aplica aos campos Se verdadeiro, os marcadores nas seguintes categorias devem aparecer no máximo uma vez em sua categoria:
Se um A remoção de visitas ou trajetos inteiros de uma solução injetada pode afetar as restrições implícitas, o que pode levar à mudança da solução, a erros de validação ou à inviabilidade. OBSERVAÇÃO: o autor da chamada precisa garantir que cada |
consider_road_traffic |
Considere a estimativa de tráfego ao calcular os campos |
populate_polylines |
Se verdadeiro, as polilinhas serão preenchidas em |
populate_transition_polylines |
Se verdadeiro, as polilinhas serão preenchidas na resposta |
allow_large_deadline_despite_interruption_risk |
Se isso 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 será de apenas 30 minutos. As solicitações de longa duração têm um risco significativamente maior (mas ainda pequeno) de interrupção. |
use_geodesic_distances |
Se verdadeiro, as distâncias de deslocamento serão calculadas usando distâncias geodésicas em vez de distâncias do Google Maps, e os tempos de viagem serão calculados usando distâncias geodésicas com uma velocidade definida por |
label |
Identificador que pode ser usado para identificar essa solicitação, informado no |
geodesic_meters_per_second |
Quando |
max_validation_errors |
Trunca 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 do erro BadRequest (https://cloud.google.com/apis/design/errors#error_details), a menos que solving_mode=VALIDATE_ONLY: consulte o campo |
SearchMode
Modo que define o comportamento da pesquisa, compensando a latência versus a 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 |
Interrompa a pesquisa depois de encontrar a primeira solução boa. |
CONSUME_ALL_AVAILABLE_TIME |
Dedique todo o tempo disponível para procurar soluções melhores. |
SolvingMode
Define como o solucionador deve 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. |
VALIDATE_ONLY |
Valida o modelo apenas sem resolvê-lo: preenche o máximo de OptimizeToursResponse.validation_errors possível. |
DETECT_SOME_INFEASIBLE_SHIPMENTS |
Preenche apenas IMPORTANTE: nem todas as remessas inviáveis são retornadas aqui, mas somente as detectadas como inviáveis durante o pré-processamento. |
OptimizeToursResponse
Resposta após resolver um problema de otimização de passeios que contém as rotas seguidas por cada veículo, as remessas que foram ignoradas e o custo geral da solução.
Campos | |
---|---|
routes[] |
Trajetos calculados para cada veículo. O trajeto i-th corresponde ao i-th veículo no modelo. |
request_label |
Cópia de |
skipped_shipments[] |
A lista de todas as remessas ignoradas. |
validation_errors[] |
Lista de todos os erros de validação que foram detectados de forma independente. Consulte a explicação de "MULTIPLE 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_route_metrics |
Agregado nas rotas. Cada métrica é a soma (ou máxima, para carregamentos) de todos os campos |
skipped_mandatory_shipment_count |
Número de envios obrigatórios ignorados. |
used_vehicle_count |
Número de veículos usados. Observação: se um trajeto de veículo estiver vazio e |
earliest_vehicle_start_time |
O primeiro horário de início de um veículo usado, calculado como o mínimo sobre todos os veículos usados de |
latest_vehicle_end_time |
O último horário de término de um veículo usado, calculado como o máximo sobre todos os veículos usados de |
costs |
Custo da solução detalhado por campos de solicitação relacionados ao custo. As chaves são caminhos proto em relação à 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, os custos["model.shipments.pickups.cost"] são a soma de todos os custos de retirada na solução. Todos os custos definidos no modelo são informados em detalhes aqui, com exceção dos custos relacionados a TransitionAttributes que só são informados de forma agregada a partir de 2022/01. |
total_cost |
Custo total da solução. A soma de todos os valores no mapa de custos. |
OptimizeToursValidationError
Descreve um erro encontrado ao validar um OptimizeToursRequest
.
Campos | |
---|---|
code |
Um erro de validação é definido pelos pares ( Outros campos (abaixo) oferecem 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 serão "fatais", o que significa que eles interrompem todo o processo de validação. Esse é o caso dos erros ESTABILIDADE: REFERENCE: uma lista de todos os pares (código, nome):
|
display_name |
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 referência à primeira retirada do veículo 4 e da remessa 2 pode ser feita da seguinte maneira:
No entanto, a cardinalidade de |
error_message |
String legível que descreve o erro. Há um mapeamento de 1:1 entre STABILITY: instável. A mensagem de erro associada a uma determinada |
offending_values |
Pode conter os valores dos campos. Essa opção nem sempre está disponível. Você não deve confiar nele e usá-lo apenas para depuração manual do modelo. |
FieldReference
Especifica um contexto para o erro de validação. Um FieldReference
sempre se refere a um determinado campo nesse arquivo e segue a mesma estrutura hierárquica. Por exemplo, podemos especificar o elemento 2 do 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 evitar sobrecarregar a mensagem.
Campos | |
---|---|
name |
Nome do campo, por exemplo, "vehicles". |
sub_field |
Subcampo aninhado recursivamente, se necessário. |
Campo de união
|
|
index |
Índice do campo, se repetido. |
key |
Key se o campo for um mapa. |
OutputConfig
Especifique um destino para os resultados de [BatchOptimizeTours][google.maps.routeoptimization.v1.Route OptimizationService.BatchOptimizeTours].
Campos | |
---|---|
data_format |
Obrigatório. O formato de dados de saída. |
Campo de união destination . Obrigatório. destination pode ser apenas de um dos tipos a seguir: |
|
gcs_destination |
O local do Google Cloud Storage em que a saída será gravada. |
Envio
O envio de um único item, de uma das coletas até uma das entregas. Para que a remessa seja considerada como realizada, um veículo exclusivo precisa visitar um dos locais de retirada (e diminuir a capacidade disponível). Depois, visitar um dos locais de entrega mais tarde e aumentar a capacidade disponível novamente.
Campos | |
---|---|
display_name |
O nome de exibição do frete definido pelo usuário. Ele pode ter até 63 caracteres e usar caracteres UTF-8. |
pickups[] |
Conjunto de alternativas de retirada associadas ao envio. Se não for especificado, o veículo só vai precisar visitar um local correspondente às entregas. |
deliveries[] |
Conjunto de alternativas de entrega associadas ao envio. Caso não seja especificado, o veículo só vai precisar visitar um local correspondente às retiradas. |
load_demands |
As demandas de carga do frete (por exemplo, peso, volume, número de paletes etc.). As chaves no mapa devem ser identificadores que descrevam o tipo de carga correspondente, incluindo, idealmente, 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_vehicle_indices[] |
O conjunto de veículos que podem realizar esta remessa. Se estiver vazia, ela pode ser realizada por todos os veículos. Os veículos são fornecidos pelo índice na lista |
costs_per_vehicle[] |
Especifica o custo incorrido quando esta encomenda é entregue por cada veículo. Se especificado, ele precisa incluir:
Esses custos precisam estar na mesma unidade que |
costs_per_vehicle_indices[] |
Índices dos veículos aos quais |
pickup_to_delivery_absolute_detour_limit |
Especifica o tempo máximo absoluto de desvio em comparação com o caminho mais curto da coleta até a entrega. Se especificado, ele não pode ser negativo e a remessa precisa conter pelo menos uma retirada e uma entrega. Por exemplo, que t seja o menor tempo necessário para ir da alternativa de retirada selecionada diretamente à alternativa de entrega selecionada. Em seguida, definir
Se os limites relativos e absolutos forem especificados na mesma remessa, será usado o limite mais limitador para cada par de coleta/entrega possível. A partir de 2017/10, os desvios serão aceitos apenas quando a duração das viagens não depender de veículos. |
pickup_to_delivery_time_limit |
Especifica a duração máxima entre o início da retirada e o início da entrega de uma remessa. Se especificado, ele não pode ser negativo e a remessa precisa conter pelo menos uma retirada e uma entrega. Isso não depende das alternativas selecionadas para retirada e entrega, nem da velocidade do veículo. Isso pode ser especificado junto com as restrições de desvio máximo: a solução vai respeitar as duas especificações. |
shipment_type |
String que especifica um "tipo" para este envio. Esse recurso pode ser usado para definir incompatibilidades ou requisitos entre o É diferente de |
label |
Especifica um rótulo para esta remessa. Esse rótulo é informado na resposta no |
ignore |
Se verdadeiro, pular este envio, mas não aplicar uma Ignorar uma remessa resulta em um erro de validação quando há É permitido ignorar uma remessa realizada em |
penalty_cost |
Se o frete não for concluído, essa penalidade será adicionada ao custo total dos trajetos. Uma remessa é considerada concluída quando uma das alternativas de coleta e entrega é 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 é especificada, ela é considerada infinita, ou seja, o envio precisa ser concluído. |
pickup_to_delivery_relative_detour_limit |
Especifica o tempo máximo de desvio relativo em comparação com o caminho mais curto da coleta até a entrega. Se especificado, ele não pode ser negativo e a remessa precisa conter pelo menos uma retirada e uma entrega. Por exemplo, que t seja o menor tempo necessário para ir da alternativa de retirada selecionada diretamente à alternativa de entrega selecionada. Em seguida, definir
Se os limites relativos e absolutos forem especificados na mesma remessa, será usado o limite mais limitador para cada par de coleta/entrega possível. A partir de 2017/10, os desvios serão aceitos apenas quando a duração das viagens não depender de veículos. |
Carregamento
Ao realizar uma visita, um valor predefinido pode ser adicionado à carga do veículo se for uma retirada, ou subtraído se for uma entrega. Esta mensagem define esse valor. Consulte os load_demands
.
Campos | |
---|---|
amount |
O valor da carga do veículo que realiza a visita correspondente varia. Como os dados são números inteiros, aconselhamos os usuários a escolher uma unidade adequada para evitar a perda de precisão. Precisa ser ≥ 0. |
VisitRequest
Solicitação de visita que pode ser feita por um veículo: ela tem uma localização geográfica (ou duas, conforme mostrado abaixo), os horários de abertura e fechamento representados por janelas e um tempo de duração do serviço (tempo gasto pelo veículo depois que ele chegou até a coleta ou a entrega de produtos).
Campos | |
---|---|
arrival_location |
A geolocalização em que o veículo chega ao executar este |
arrival_waypoint |
O waypoint a que o veículo chega ao realizar esta |
departure_location |
A geolocalização de onde o veículo parte após concluir esta |
departure_waypoint |
O waypoint de onde o veículo parte após concluir esta |
tags[] |
Especifica as tags anexadas à solicitação de visita. Strings vazias ou duplicadas não são permitidas. |
time_windows[] |
Janelas de tempo que restringem o horário de chegada em uma visita. Um veículo pode partir fora do horário de chegada, ou seja, não é preciso inserir o horário de chegada + duração dentro de um intervalo dentro desse período. Isso poderá 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 precisam estar em ordem crescente.
|
duration |
Duração da visita, ou seja, tempo gasto pelo veículo entre a chegada e a partida (a ser adicionada ao possível tempo de espera; consulte |
cost |
Custo para atender a esta solicitação de visita em um trajeto de veículo. Isso pode ser usado para pagar custos diferentes para cada retirada ou entrega alternativa de uma remessa. O custo precisa estar na mesma unidade que |
load_demands |
Demandas de carga desta solicitação de visita. Ele é semelhante ao campo |
visit_types[] |
Especifica os tipos de visita. Isso pode ser usado para alocar o tempo adicional necessário para que o veículo conclua essa visita (consulte Um tipo só pode aparecer uma vez. |
label |
Especifica um rótulo para esta |
ShipmentModel
Um modelo de remessa contém um conjunto de remessas que devem ser realizadas por um conjunto de veículos, minimizando o custo total, que é a soma de:
- o custo de deslocamento dos veículos (soma do custo por tempo total, custo por tempo de viagem e custo fixo de todos os veículos).
- as penalidades de remessa não executadas.
- o custo da duração global das remessas.
Campos | |
---|---|
shipments[] |
Conjunto de remessas que devem ser executados no modelo. |
vehicles[] |
Conjunto de veículos que podem ser usados para realizar visitas. |
global_start_time |
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, Ao usar campos |
global_end_time |
Se não for definido, 00:00:00 UTC, 1o de janeiro de 1971 (ou seja, segundos: 31536000, nanos: 0) será usado como padrão. |
global_duration_cost_per_hour |
A "duração global" do plano geral é a diferença entre o horário de início mais cedo e o horário de término mais recente de todos os veículos. Os usuários podem atribuir um custo por hora a essa quantidade para tentar otimizar a conclusão mais próxima do job, por exemplo. Esse custo precisa estar na mesma unidade que |
duration_distance_matrices[] |
Especifica as matrizes de duração e distância usadas no modelo. Se este campo estiver vazio, o Google Maps ou as distâncias geodésicas serão usadas, dependendo do valor do campo Exemplos de uso:
|
duration_distance_matrix_src_tags[] |
Tags que definem as origens das matrizes de duração e distância. As tags correspondem a |
duration_distance_matrix_dst_tags[] |
Tags que definem os destinos das matrizes de duração e distância. As tags correspondem a |
transition_attributes[] |
Atributos de transição adicionados ao modelo. |
shipment_type_incompatibilities[] |
Conjuntos de envios_types incompatíveis (consulte |
shipment_type_requirements[] |
Conjuntos de requisitos de |
precedence_rules[] |
Conjunto de regras de precedência que precisam ser aplicadas no modelo. |
max_active_vehicles |
Restringe o número máximo de veículos ativos. Um veículo está ativo se o trajeto tem pelo menos uma remessa. Isso pode ser usado para limitar o número de trajetos nos casos em que há menos motoristas do que veículos e a frota de veículos é heterogênea. A otimização vai selecionar o melhor subconjunto de veículos para usar. Precisa ser estritamente positivo. |
DurationDistanceMatrix
Especifica uma matriz de duração e distância dos locais de visita e de início do veículo até os locais de chegada e de término dos veículos.
Campos | |
---|---|
rows[] |
Especifica as linhas da matriz de duração e distância. O número de elementos precisa ser igual a |
vehicle_start_tag |
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 partida de veículo precisa corresponder exatamente a 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 determinada linha. O número de elementos precisa ser igual a |
meters[] |
Valores de distância para uma determinada linha. Se nenhum custo ou restrição se referir a distâncias no modelo, ele poderá ser deixado em branco. Caso contrário, precisará ter a mesma quantidade de elementos que |
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 offset_duration
depois que o "primeiro" tiver começado.
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 ocorre após a retirada de B.
Além disso, as precedências só se aplicam quando ambas as remessas são realizadas e ignoradas.
Campos | |
---|---|
first_is_delivery |
Indica se o "primeiro" evento é uma entrega. |
second_is_delivery |
Indica se o "segundo" evento é uma entrega. |
offset_duration |
O deslocamento entre o "primeiro" e o "segundo". Pode ser negativo. |
first_index |
Índice de envio do evento "primeiro". Esse campo precisa ser especificado. |
second_index |
Índice de envio do "segundo evento". Esse campo precisa ser especificado. |
ShipmentRoute
O trajeto de um veículo pode ser decomposto ao longo do eixo de tempo, da seguinte forma (consideramos 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 fazemos uma diferença entre:
- "eventos pontuais", como o início e o término do veículo e o início e fim de cada visita (também conhecido como chegada e partida). Acontecem em um determinado segundo.
- "intervalos de tempo", como as próprias visitas e a transição entre as visitas. Embora os intervalos às vezes possam ter 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 antes dela (mesmo índice) e por uma transição depois dela (índice + 1).
- A partida do veículo é sempre seguida pela transição 0.
- O fim do veículo é sempre precedido pela transição #n.
Ao aumentar o zoom, 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, veja como VIAGENS, QUEBRAS, ATRASO e ESPERA podem ser organizadas durante uma transição.
- Eles não se sobrepõem.
- O atraso é exclusivo e precisa ser um período contíguo antes da próxima visita (ou do fim do veículo). Portanto, é suficiente conhecer a duração do atraso para saber os horários de início e término.
- As BREAKS são períodos contíguos e não sobrepostos. A resposta especifica o horário de início e a duração de cada intervalo.
- VIAGENS e ESPERA são "preveníveis": elas podem ser interrompidas várias vezes durante essa transição. Os clientes podem presumir que a viagem acontece "o mais rápido possível" e que "espera" preenche o tempo restante.
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_index |
Veículo que realiza o trajeto, identificado pelo índice na origem |
vehicle_label |
Etiqueta do veículo que faz este trajeto, igual a |
vehicle_start_time |
Horário em que o veículo inicia seu trajeto. |
vehicle_end_time |
Horário em que o veículo termina seu trajeto. |
visits[] |
Sequência ordenada de visitas que representam um trajeto. Visitas [i] é a i-ésima visita no trajeto. Se este campo estiver vazio, o veículo será considerado não utilizado. |
transitions[] |
Lista ordenada de transições para a rota. |
has_traffic_infeasibilities |
Quando
A chegada em next_visit provavelmente acontecerá depois do período atual devido à estimativa elevada do tempo de viagem |
route_polyline |
A representação de polilinha codificada do trajeto. Esse campo só será preenchido se |
breaks[] |
Pausas programadas para o veículo que está executando este trajeto. A sequência |
metrics |
Métricas de duração, distância e carregamento para este trajeto. Os campos de |
route_costs |
Custo do trajeto detalhado por campos de solicitação relacionados ao custo. As chaves são caminhos proto em relação à entrada OptimizeToursRequest, 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, os custos["model.shipments.pickups.cost"] são a soma de todos os custos de embarque no trajeto. Todos os custos definidos no modelo são informados em detalhes aqui, com exceção dos custos relacionados a TransitionAttributes que só são informados de forma agregada a partir de 2022/01. |
route_total_cost |
Custo total do trajeto. A soma de todos os custos no mapa de custos. |
Intervalo
Dados que representam a execução de uma pausa.
Campos | |
---|---|
start_time |
Horário de início de uma pausa. |
duration |
Duração de uma pausa. |
EncodedPolyline
A representação codificada de uma polilinha. Mais informações sobre codificação de polilinhas podem ser encontradas aqui: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.
Campos | |
---|---|
points |
String que representa pontos codificados da polilinha. |
Transição
Transição entre dois eventos no trajeto. Veja a descrição de ShipmentRoute
.
Se o veículo não tiver um start_location
e/ou end_location
, as métricas de viagem correspondentes serão 0.
Campos | |
---|---|
travel_duration |
Duração da viagem durante essa transição. |
travel_distance_meters |
Distância percorrida durante a transição. |
traffic_info_unavailable |
Quando o tráfego é solicitado pelo |
delay_duration |
Soma das durações de atraso aplicadas a essa transição. Se for o caso, o atraso começará exatamente |
break_duration |
Soma da duração das pausas que ocorrem durante essa transição, se houver. Os detalhes sobre o horário de início e a duração de cada intervalo são armazenados em |
wait_duration |
Tempo gasto esperando durante a transição. A duração da espera corresponde ao tempo de inatividade e não inclui o intervalo. Além disso, esse tempo de espera pode ser dividido em vários intervalos não contíguos. |
total_duration |
Duração total da transição, fornecida por conveniência. Ele é igual a:
|
start_time |
Horário de início dessa transição. |
route_polyline |
A representação de polilinha codificada do trajeto seguido durante a transição. Esse campo só será preenchido se |
vehicle_loads |
Cargas de veículos durante essa transição, para cada tipo que aparece no As cargas durante a primeira transição são as cargas iniciais do trajeto do veículo. Após cada visita, os |
VehicleLoad
Informa a carga real do veículo em algum ponto ao longo do trajeto para um determinado tipo (consulte Transition.vehicle_loads
).
Campos | |
---|---|
amount |
A quantidade de carga no veículo para o tipo especificado. Geralmente, a unidade de carga é indicada pelo tipo. Consulte os |
Acessar
Uma visita realizada durante um trajeto. Essa visita corresponde à retirada ou entrega de um Shipment
.
Campos | |
---|---|
shipment_index |
Índice do campo |
is_pickup |
Se verdadeiro, a visita corresponde ao embarque de um |
visit_request_index |
Índice de |
start_time |
Horário em que a visita começa. O veículo pode chegar antes desse horário no local da visita. Os horários são consistentes com o |
load_demands |
Demanda total de carga da visita como a soma do frete e da solicitação de visita |
detour |
Tempo de desvio extra devido às encomendas visitadas no trajeto antes da visita e ao tempo de espera em potencial 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 será calculado a partir do
|
shipment_label |
Cópia do |
visit_label |
Cópia do |
ShipmentTypeIncompatibility
Especifica incompatibilidades entre fretes dependendo do shipment_type. A aparência de remessas incompatíveis no mesmo trajeto é restrita com base no modo de incompatibilidade.
Campos | |
---|---|
types[] |
Lista de tipos incompatíveis. Duas remessas com |
incompatibility_mode |
Modo aplicado à incompatibilidade. |
IncompatibilityMode
Modos que definem como a aparência de remessas incompatíveis é restrita no mesmo trajeto.
Enums | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Modo de incompatibilidade não especificado. Esse valor nunca pode ser usado. |
NOT_PERFORMED_BY_SAME_VEHICLE |
Nesse modo, duas remessas com tipos incompatíveis nunca podem compartilhar o mesmo veículo. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
Para duas remessas com tipos incompatíveis com o modo de incompatibilidade
|
ShipmentTypeRequirement
Especifica os requisitos entre fretes com base no shipping_type. Os detalhes do requisito são definidos pelo modo de requisito.
Campos | |
---|---|
required_shipment_type_alternatives[] |
Lista de tipos alternativos de envio exigidos pela |
dependent_shipment_types[] |
Todas as remessas com um tipo no campo OBSERVAÇÃO: não são permitidas cadeias de requisitos, para que um |
requirement_mode |
Modo aplicado ao requisito. |
RequirementMode
Modos que definem a aparência das remessas dependentes em um trajeto.
Enums | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Modo de requisito não especificado. Esse valor nunca pode ser usado. |
PERFORMED_BY_SAME_VEHICLE |
Nesse modo, todas as remessas "dependentes" precisam usar o mesmo veículo que pelo menos uma das remessas "necessárias". |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
Com o modo Uma retirada de remessa "dependente" precisa ter:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
O mesmo que antes, mas os fretes "dependentes" precisam ter uma remessa "obrigatória" no veículo no momento da entrega. |
SkippedShipment
Especifica detalhes de remessas não executadas em uma solução. Para casos triviais e/ou se conseguirmos identificar a causa da ação de pular, informamos o motivo aqui.
Campos | |
---|---|
index |
O índice corresponde ao índice do envio na origem |
label |
Cópia do |
reasons[] |
Uma lista de motivos que explicam por que o envio foi pulado. Ver 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
vai ter mais de um elemento. Um frete pulado não pode ter motivos duplicados, ou seja, 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
}
O frete pulado é incompatível com todos os veículos. Os motivos podem ser diferentes para todos os veículos, mas a capacidade de "Maçãs" de um veículo seria excedida (incluindo o veículo 1), a capacidade de "Peras" de 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_exceeded_capacity_type |
Se o código de motivo for |
example_vehicle_index |
Se o motivo estiver relacionado a uma incompatibilidade entre remessa e veículo, esse campo fornecerá o índice de um veículo relevante. |
Programar
Código que identifica o tipo de motivo. A ordem não faz sentido. Em particular, ele não indica se um motivo específico vai aparecer antes de outro na solução, caso ambos se apliquem.
Enums | |
---|---|
CODE_UNSPECIFIED |
Nunca deve ser usado. Se não conseguirmos entender por que uma remessa foi pulada, vamos retornar um conjunto vazio de motivos. |
NO_VEHICLE |
O modelo não inclui nenhum veículo, o que torna as remessas inviáveis. |
DEMAND_EXCEEDS_VEHICLE_CAPACITY |
A demanda do frete excede a capacidade de um veículo para alguns tipos, como example_exceeded_capacity_type . |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT |
A distância mínima necessária para realizar o envio, por exemplo, do Para esse cálculo, usamos as distâncias geodésicas. |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT |
O tempo mínimo necessário para realizar o envio, incluindo o tempo de viagem, de espera e de serviço, excede a 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/h). |
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 essa remessa no melhor cenário (consulte CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT para cálculo do tempo) se começar no horário de início mais cedo: o tempo total faria o veículo terminar após o horário de término mais recente. |
VEHICLE_NOT_ALLOWED |
O campo allowed_vehicle_indices do frete não está vazio e este veículo não pertence a ele. |
TimeWindow
As janelas de tempo restringem o horário de um evento, como a hora de chegada em uma visita ou os horários de início e término de um veículo.
Os limites de janela de tempo rígido, start_time
e end_time
, impõem o horário mais antigo e mais recente 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 aconteça em soft_start_time
ou depois, incorrendo em um custo proporcional ao tempo antes de soft_start_time ocorrer. O limite superior da janela de tempo flexível, soft_end_time
, expressa uma preferência para que o evento aconteça em soft_end_time
ou antes, incorrendo em um custo proporcional ao tempo após soft_end_time
o evento ocorrer. 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` <= `soft_start_time` <= `end_time` and
0 <= `start_time` <= `soft_end_time` <= `end_time`.
Campos | |
---|---|
start_time |
O horário de início da janela de horário difícil. Se não for especificado, ele será definido como |
end_time |
O horário de término da janela de horário difícil. Se não for especificado, ele será definido como |
soft_start_time |
O horário de início gradual da janela de tempo. |
soft_end_time |
O horário de término flexível da janela de tempo. |
cost_per_hour_before_soft_start_time |
Um custo por hora adicionado a outros custos no modelo caso o evento ocorra antes de soft_start_time, calculado da seguinte forma:
Esse custo precisa ser positivo, e o campo só poderá ser definido se o soft_start_time tiver sido definido. |
cost_per_hour_after_soft_end_time |
Um custo por hora adicionado a outros custos no modelo se o evento ocorrer após
O custo precisa ser positivo, e o campo só poderá ser definido se |
TransitionAttributes
Especifica atributos de transições entre duas visitas consecutivas em um trajeto. Várias TransitionAttributes
podem ser aplicadas à mesma transição. Nesse caso, todos os custos extras são somados e a restrição ou o limite mais rigoroso é aplicado (seguindo a semântica "AND" natural).
Campos | |
---|---|
src_tag |
Tags que definem o conjunto de transições (src->dst) às quais esses atributos se aplicam. Uma visita à origem ou a partida do veículo corresponde se |
excluded_src_tag |
Consulte os |
dst_tag |
Uma visita de destino ou fim de veículo corresponde se o |
excluded_dst_tag |
Consulte os |
cost |
Especifica um custo para realizar essa transição. Essa unidade está na mesma unidade de todos os outros custos do modelo e não pode ser negativa. Ele é aplicado sobre todos os outros custos existentes. |
cost_per_kilometer |
Especifica um custo por quilômetro aplicado à distância percorrida durante essa transição. Ela é somada a qualquer |
distance_limit |
Especifica um limite na distância percorrida durante essa transição. A partir de 2021/06, apenas limites flexíveis são suportados. |
delay |
Especifica um atraso ao realizar essa transição. Esse atraso sempre ocorre após a conclusão da visita de origem e antes de iniciar a visita de destino. |
Veículo
Modela um veículo em um problema de remessa. Resolver um problema de remessa criará um trajeto começando em start_location
e terminando em end_location
para este veículo. Um trajeto é uma sequência de visitas (consulte ShipmentRoute
).
Campos | |
---|---|
display_name |
O nome de exibição do veículo definido pelo usuário. Ele pode ter até 63 caracteres e usar caracteres UTF-8. |
travel_mode |
O meio de transporte que afeta as vias utilizáveis pelo veículo e sua velocidade. Consulte também |
start_location |
Localização geográfica onde o veículo começa antes de pegar qualquer frete. Se não for especificado, o veículo iniciará na primeira retirada. Se o modelo de frete tiver matrizes de duração e distância, |
start_waypoint |
Waypoint que representa uma localização geográfica em que o veículo inicia antes de retirar qualquer envio. Se |
end_location |
Localização geográfica onde o veículo termina depois de concluir a última |
end_waypoint |
Waypoint que representa um local geográfico em que o veículo termina após concluir a última |
start_tags[] |
Especifica tags anexadas ao início do trajeto do veículo. Strings vazias ou duplicadas não são permitidas. |
end_tags[] |
Especifica tags anexadas ao fim do trajeto do veículo. Strings vazias ou duplicadas não são permitidas. |
start_time_windows[] |
Períodos 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 separadas, ou seja, nenhuma janela de tempo pode se sobrepor ou ser adjacente a outra e precisa estar em ordem cronológica.
|
end_time_windows[] |
Períodos em que o veículo pode chegar ao local de término. Eles precisam estar dentro dos limites de tempo globais (consulte os campos As janelas de tempo pertencentes ao mesmo campo repetido precisam ser separadas, ou seja, nenhuma janela de tempo pode se sobrepor ou ser adjacente a outra e precisa estar em ordem cronológica.
|
unloading_policy |
Política de descarregamento aplicada no veículo. |
load_limits |
Capacidade do veículo (peso, volume, número de paletes, por exemplo). As chaves no mapa são os identificadores do tipo de carregamento, consistentes com as chaves do campo |
cost_per_hour |
Custos de veículos: 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 percorrido pelo trajeto e inclui tempo de viagem, tempo de espera e tempo de visita. Usar |
cost_per_traveled_hour |
Custo por hora percorrida do trajeto do veículo. Esse custo é aplicado somente ao tempo de viagem no trajeto (ou seja, o valor informado no |
cost_per_kilometer |
Custo por quilômetro do trajeto do veículo. Esse custo é aplicado à distância informada no |
fixed_cost |
Custo fixo aplicado se o veículo for usado para lidar com uma remessa. |
used_if_route_is_empty |
Este campo só se aplica a veículos quando o trajeto não inclui remessas. Indica se o veículo deve ser considerado como usado ou não nesse caso. Se verdadeiro, o veículo vai do início ao local final mesmo que não atenda a nenhuma remessa, e os custos de tempo e distância resultantes de sua partida --> viagem final são considerados. Caso contrário, ele não vai do início ao fim, e nenhum |
route_duration_limit |
Limite aplicado à duração total do trajeto do veículo. Em um determinado |
travel_duration_limit |
Limite aplicado à duração da viagem no trajeto do veículo. Em um determinado |
route_distance_limit |
Limite aplicado à distância total do trajeto do veículo. Em um determinado |
extra_visit_duration_for_visit_type |
Especifica um mapa de strings visit_types a durações. A duração é o tempo adicional de Se uma solicitação de visita tiver vários tipos, uma duração será adicionada para cada um deles no mapa. |
break_rule |
Descreve a programação de intervalo a ser aplicada neste veículo. Se estiver vazio, nenhum intervalo será programado para este 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 no Se um frete for realizado por um veículo ignorado em |
travel_duration_multiple |
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 que em veículos padrão. Esse múltiplo não afeta a duração das visitas. Ela afeta o custo se AVISO: os tempos de viagem serão arredondados para o segundo mais próximo após a aplicação desse múltiplo, mas antes de realizar qualquer operação numérica. Portanto, um 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. Pode ser difícil ou suave.
Quando um campo de limite flexível é definido, o limite flexível e o custo associado precisam ser definidos juntos.
Campos | |
---|---|
max_duration |
Um limite rígido que restringe a duração ao máximo de max_duration. |
soft_max_duration |
Um limite flexível não aplica um limite de duração máxima, mas quando violado faz com que a rota incorre em um custo. Esse custo é somado a outros custos definidos no modelo, com a mesma unidade. Se definido, |
quadratic_soft_max_duration |
Um limite flexível não aplica um limite de duração máxima, 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_per_hour_after_soft_max |
Custo por hora incorrido se o limite de
O custo não pode ser negativo. |
cost_per_square_hour_after_quadratic_soft_max |
Custo por hora quadrada incorrida se o limite de O custo adicional será 0 se a duração estiver abaixo do limite. Caso contrário, o custo dependerá da duração da seguinte forma:
O custo não pode ser negativo. |
LoadLimit
Define um limite de carga aplicado a um veículo, por exemplo, "este caminhão só pode carregar até 3.500 kg". Consulte os load_limits
.
Campos | |
---|---|
soft_max_load |
Um limite flexível da carga. Consulte os |
cost_per_unit_above_soft_max |
Se a carga exceder |
start_load_interval |
O intervalo de carga aceitável do veículo no início do trajeto. |
end_load_interval |
O intervalo de carga aceitável do veículo no final do trajeto. |
max_load |
A quantidade máxima aceitável de carga. |
Intervalo
Intervalo de quantidades de carga aceitáveis.
Campos | |
---|---|
min |
Uma carga mínima aceitável. Precisa ser ≥ 0. Se ambos forem especificados, |
max |
Um carregamento máximo 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, |
TravelMode
Meios de transporte que podem ser usados por veículos.
Eles precisam ser um subconjunto dos meios de transporte da API Routes Preferred da Plataforma Google Maps. Consulte: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
Enums | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
Meio de transporte não especificado, equivalente a DRIVING . |
DRIVING |
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. Isso se aplica apenas a fretes com retirada e entrega.
Outras encomendas são sem custo financeiro para ocorrer em qualquer lugar da rota, independentemente da unloading_policy
.
Enums | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
Política de descarregamento não especificada. As entregas precisam ocorrer somente após as retiradas correspondentes. |
LAST_IN_FIRST_OUT |
As entregas precisam ocorrer na ordem inversa de retirada |
FIRST_IN_FIRST_OUT |
As entregas precisam ocorrer na mesma ordem que as de retirada |
Ponto de referência
Encapsula um waypoint. Os waypoints indicam os locais de chegada e partida de VisitRequests, além de locais de partida e chegada dos Veículos.
Campos | |
---|---|
side_of_road |
Opcional. Indica que o local deste waypoint deve ter preferência para que o veículo pare em um lado específico da via. Quando você define este valor, o trajeto passa pelo local, de modo que o veículo possa parar no lado da estrada para onde o local é direcionado a partir do centro da estrada. Esta opção não funciona para o modo de viagem "WALKING". |
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 cabeçalho opcional. |
place_id |
O ID de lugar do PDI associado ao waypoint. |