- Representação JSON
- Envio
- VisitRequest
- LatLng
- Waypoint
- Local
- TimeWindow
- Veículo
- TravelMode
- UnloadingPolicy
- LoadLimit
- Intervalo
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- DurationDistanceMatrix
- Linha
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
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.
Representação JSON |
---|
{ "shipments": [ { object ( |
Campos | |
---|---|
shipments[] |
Conjunto de remessas que devem ser executados no modelo. |
vehicles[] |
Conjunto de veículos que podem ser usados para realizar visitas. |
globalStartTime |
Horário de início e término global do modelo: nenhum horário fora desse intervalo pode ser considerado válido. O período do modelo precisa ser inferior a um ano, ou seja, Ao usar campos Um carimbo de data/hora no formato UTC "Zulu" RFC3339, com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: |
globalEndTime |
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. Um carimbo de data/hora no formato UTC "Zulu" RFC3339, com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: |
globalDurationCostPerHour |
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 |
durationDistanceMatrices[] |
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:
|
durationDistanceMatrixSrcTags[] |
Tags que definem as origens das matrizes de duração e distância. As tags correspondem a |
durationDistanceMatrixDstTags[] |
Tags que definem os destinos das matrizes de duração e distância. As tags correspondem a |
transitionAttributes[] |
Atributos de transição adicionados ao modelo. |
shipmentTypeIncompatibilities[] |
Conjuntos de envios_types incompatíveis (consulte |
shipmentTypeRequirements[] |
Conjuntos de requisitos de |
precedenceRules[] |
Conjunto de regras de precedência que precisam ser aplicadas no modelo. |
maxActiveVehicles |
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. |
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.
Representação JSON |
---|
{ "displayName": string, "pickups": [ { object ( |
Campos | |
---|---|
displayName |
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. |
loadDemands |
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. Um objeto com uma lista de pares |
allowedVehicleIndices[] |
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 |
costsPerVehicle[] |
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 |
costsPerVehicleIndices[] |
Índices dos veículos aos quais |
pickupToDeliveryAbsoluteDetourLimit |
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. Uma duração em segundos com até nove dígitos fracionários, terminando em " |
pickupToDeliveryTimeLimit |
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. Uma duração em segundos com até nove dígitos fracionários, terminando em " |
shipmentType |
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 |
penaltyCost |
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. |
pickupToDeliveryRelativeDetourLimit |
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. |
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).
Representação JSON |
---|
{ "arrivalLocation": { object ( |
Campos | |
---|---|
arrivalLocation |
A geolocalização em que o veículo chega ao executar este |
arrivalWaypoint |
O waypoint a que o veículo chega ao realizar esta |
departureLocation |
A geolocalização de onde o veículo parte após concluir esta |
departureWaypoint |
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. |
timeWindows[] |
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 Uma duração em segundos com até nove dígitos fracionários, terminando em " |
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 |
loadDemands |
Demandas de carga desta solicitação de visita. Ele é semelhante ao campo Um objeto com uma lista de pares |
visitTypes[] |
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 |
LatLng
Um objeto que representa um par de latitude/longitude. Ele é expresso como um par de valores duplos para representar graus de latitude e longitude. A menos que especificado de outra forma, esse objeto precisa estar em conformidade com o padrão WGS84. Os valores precisam estar dentro de intervalos normalizados.
Representação JSON |
---|
{ "latitude": number, "longitude": number } |
Campos | |
---|---|
latitude |
A latitude em graus. Precisa estar no intervalo [-90,0, +90,0]. |
longitude |
A longitude em graus. Precisa estar no intervalo [-180,0, +180,0]. |
Ponto de referência
Encapsula um waypoint. Os waypoints indicam os locais de chegada e partida de VisitRequests, além de locais de partida e chegada dos Veículos.
Representação JSON |
---|
{ "sideOfRoad": boolean, // Union field |
Campos | |
---|---|
sideOfRoad |
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. |
placeId |
O ID de lugar do PDI associado ao waypoint. |
Local
Encapsula um local (um ponto geográfico e um cabeçalho opcional).
Representação JSON |
---|
{
"latLng": {
object ( |
Campos | |
---|---|
latLng |
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. |
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, startTime
e endTime
, impõem o horário mais antigo e mais recente do evento, de modo que startTime <= event_time <=
endTime
. O limite inferior da janela de tempo flexível, softStartTime
, expressa uma preferência para que o evento aconteça em softStartTime
ou depois, incorrendo em um custo proporcional ao tempo antes de softStartTime ocorrer. O limite superior da janela de tempo flexível, softEndTime
, expressa uma preferência para que o evento aconteça em softEndTime
ou antes, incorrendo em um custo proporcional ao tempo após softEndTime
o evento ocorrer. startTime
, endTime
, softStartTime
e softEndTime
precisam estar dentro dos limites de tempo globais (consulte ShipmentModel.global_start_time
e ShipmentModel.global_end_time
) e respeitar:
0 <= `startTime` <= `softStartTime` <= `endTime` and
0 <= `startTime` <= `softEndTime` <= `endTime`.
Representação JSON |
---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
Campos | |
---|---|
startTime |
O horário de início da janela de horário difícil. Se não for especificado, ele será definido como Um carimbo de data/hora no formato UTC "Zulu" RFC3339, com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: |
endTime |
O horário de término da janela de horário difícil. Se não for especificado, ele será definido como Um carimbo de data/hora no formato UTC "Zulu" RFC3339, com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: |
softStartTime |
O horário de início gradual da janela de tempo. Um carimbo de data/hora no formato UTC "Zulu" RFC3339, com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: |
softEndTime |
O horário de término flexível da janela de tempo. Um carimbo de data/hora no formato UTC "Zulu" RFC3339, com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: |
costPerHourBeforeSoftStartTime |
Um custo por hora adicionado a outros custos no modelo se o evento ocorrer antes do softStartTime, calculado como:
Esse custo precisa ser positivo, e o campo só poderá ser definido se softStartTime tiver sido definido. |
costPerHourAfterSoftEndTime |
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 |
Veículo
Modela um veículo em um problema de remessa. Resolver um problema de remessa criará um trajeto começando em startLocation
e terminando em endLocation
para este veículo. Um trajeto é uma sequência de visitas (consulte ShipmentRoute
).
Representação JSON |
---|
{ "displayName": string, "travelMode": enum ( |
Campos | |
---|---|
displayName |
O nome de exibição do veículo definido pelo usuário. Ele pode ter até 63 caracteres e usar caracteres UTF-8. |
travelMode |
O meio de transporte que afeta as vias utilizáveis pelo veículo e sua velocidade. Consulte também |
startLocation |
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, |
startWaypoint |
Waypoint que representa uma localização geográfica em que o veículo inicia antes de retirar qualquer envio. Se |
endLocation |
Localização geográfica onde o veículo termina depois de concluir a última |
endWaypoint |
Waypoint que representa um local geográfico em que o veículo termina após concluir a última |
startTags[] |
Especifica tags anexadas ao início do trajeto do veículo. Strings vazias ou duplicadas não são permitidas. |
endTags[] |
Especifica tags anexadas ao fim do trajeto do veículo. Strings vazias ou duplicadas não são permitidas. |
startTimeWindows[] |
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.
|
endTimeWindows[] |
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.
|
unloadingPolicy |
Política de descarregamento aplicada no veículo. |
loadLimits |
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 Um objeto com uma lista de pares |
costPerHour |
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 |
costPerTraveledHour |
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 |
costPerKilometer |
Custo por quilômetro do trajeto do veículo. Esse custo é aplicado à distância informada no |
fixedCost |
Custo fixo aplicado se o veículo for usado para lidar com uma remessa. |
usedIfRouteIsEmpty |
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 |
routeDurationLimit |
Limite aplicado à duração total do trajeto do veículo. Em um determinado |
travelDurationLimit |
Limite aplicado à duração da viagem no trajeto do veículo. Em um determinado |
routeDistanceLimit |
Limite aplicado à distância total do trajeto do veículo. Em um determinado |
extraVisitDurationForVisitType |
Especifica um mapa de strings visitTypes para durações. A duração é o tempo adicional de Se uma solicitação de visita tiver vários tipos, uma duração será adicionada para cada um deles no mapa. Um objeto com uma lista de pares |
breakRule |
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 |
travelDurationMultiple |
Especifica um fator multiplicativo que pode ser usado para aumentar ou diminuir os tempos de viagem desse veículo. Por exemplo, definir esse valor como 2,0 significa que o veículo é mais lento e tem tempos de viagem duas vezes maiores 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 |
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 unloadingPolicy
.
Enums | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
Política de descarregamento não especificada. As entregas precisam ocorrer somente após as retiradas correspondentes. |
LAST_IN_FIRST_OUT |
As entregas precisam ocorrer na ordem inversa de retirada |
FIRST_IN_FIRST_OUT |
As entregas precisam ocorrer na mesma ordem que as de retirada |
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 loadLimits
.
Representação JSON |
---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
Campos | |
---|---|
softMaxLoad |
Um limite flexível da carga. Consulte os |
costPerUnitAboveSoftMax |
Se a carga exceder |
startLoadInterval |
O intervalo de carga aceitável do veículo no início do trajeto. |
endLoadInterval |
O intervalo de carga aceitável do veículo no final do trajeto. |
maxLoad |
A quantidade máxima aceitável de carga. |
Intervalo
Intervalo de quantidades de carga aceitáveis.
Representação JSON |
---|
{ "min": string, "max": string } |
Campos | |
---|---|
min |
Uma carga mínima aceitável. Precisa ser ≥ 0. Se ambos forem especificados, |
max |
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, |
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.
Representação JSON |
---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
Campos | |
---|---|
maxDuration |
Um limite rígido que restringe a duração ao máximo de maxDuration. Uma duração em segundos com até nove dígitos fracionários, terminando em " |
softMaxDuration |
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, Uma duração em segundos com até nove dígitos fracionários, terminando em " |
quadraticSoftMaxDuration |
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,
Uma duração em segundos com até nove dígitos fracionários, terminando em " |
costPerHourAfterSoftMax |
Custo por hora incorrido se o limite de
O custo não pode ser negativo. |
costPerSquareHourAfterQuadraticSoftMax |
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. |
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, softMaxMeters
e costPerKilometerAboveSoftMax
precisarão ser definidos e não negativos.
Representação JSON |
---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerAboveSoftMax": number } |
Campos | |
---|---|
maxMeters |
Um limite rígido que restringe a distância a no máximo maxMeters. O limite não pode ser negativo. |
softMaxMeters |
Um limite flexível 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, softMaxMeters deve ser menor que maxMeters e deve ser não negativo. |
costPerKilometerAboveSoftMax |
Custo por quilômetro incorrido se a distância estiver acima do limite de
O custo não pode ser negativo. |
BreakRule
Regras para 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).
Representação JSON |
---|
{ "breakRequests": [ { object ( |
Campos | |
---|---|
breakRequests[] |
Sequência de intervalos. Veja a mensagem |
frequencyConstraints[] |
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 (earliestStartTime
/ latestStartTime
) podem se sobrepor, mas precisam ser compatíveis com a ordem (essa opção está marcada).
Representação JSON |
---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
Campos | |
---|---|
earliestStartTime |
Obrigatório. Limite inferior (inclusivo) no início da quebra. Um carimbo de data/hora no formato UTC "Zulu" RFC3339, com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: |
latestStartTime |
Obrigatório. Limite superior (inclusivo) no início da quebra. Um carimbo de data/hora no formato UTC "Zulu" RFC3339, com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: |
minDuration |
Obrigatório. Duração mínima do intervalo. Precisa ser positivo. Uma duração em segundos com até nove dígitos fracionários, terminando em " |
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
:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
O tempo e a duração dos intervalos na solução respeitarão todas essas restrições, além 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
Representação JSON |
---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
Campos | |
---|---|
minBreakDuration |
Obrigatório. Duração mínima do intervalo para essa restrição. Não negativo. Confira a descrição de Uma duração em segundos com até nove dígitos fracionários, terminando em " |
maxInterBreakDuration |
Obrigatório. Período máximo permitido de qualquer intervalo de tempo no trajeto que não inclua pelo menos parcialmente uma pausa de Uma duração em segundos com até nove dígitos fracionários, terminando em " |
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.
Representação JSON |
---|
{
"rows": [
{
object ( |
Campos | |
---|---|
rows[] |
Especifica as linhas da matriz de duração e distância. O número de elementos precisa ser igual a |
vehicleStartTag |
Tag que define a quais veículos essa matriz de duração e distância se aplica. Se estiver vazio, isso se aplica a todos os veículos, e só pode haver uma 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.
Representação JSON |
---|
{ "durations": [ string ], "meters": [ number ] } |
Campos | |
---|---|
durations[] |
Valores de duração para uma determinada linha. O número de elementos precisa ser igual a Uma duração em segundos com até nove dígitos fracionários, terminando em " |
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 |
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).
Representação JSON |
---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
Campos | |
---|---|
srcTag |
Tags que definem o conjunto de transições (src->dst) às quais esses atributos se aplicam. Uma visita à origem ou a partida do veículo corresponde se |
excludedSrcTag |
Consulte os |
dstTag |
Uma visita de destino ou fim de veículo corresponde se o |
excludedDstTag |
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. |
costPerKilometer |
Especifica um custo por quilômetro aplicado à distância percorrida durante essa transição. Ela é somada a qualquer |
distanceLimit |
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. Uma duração em segundos com até nove dígitos fracionários, terminando em " |
ShipmentTypeIncompatibility
Especifica incompatibilidades entre fretes dependendo do shippingType. A aparência de remessas incompatíveis no mesmo trajeto é restrita com base no modo de incompatibilidade.
Representação JSON |
---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
Campos | |
---|---|
types[] |
Lista de tipos incompatíveis. Duas remessas com |
incompatibilityMode |
Modo aplicado à incompatibilidade. |
IncompatibilityMode
Modos que definem como a aparência de remessas incompatíveis é restrita 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 envios com base no tipo de envio. Os detalhes do requisito são definidos pelo modo de requisito.
Representação JSON |
---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
Campos | |
---|---|
requiredShipmentTypeAlternatives[] |
Lista de tipos alternativos de envio exigidos pela |
dependentShipmentTypes[] |
Todas as remessas com um tipo no campo OBSERVAÇÃO: não são permitidas cadeias de requisitos, para que um |
requirementMode |
Modo aplicado ao requisito. |
RequirementMode
Modos que definem a aparência das remessas dependentes em um trajeto.
Enums | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Modo de requisito não especificado. Esse valor nunca pode ser usado. |
PERFORMED_BY_SAME_VEHICLE |
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. |
PrecedenceRule
Uma regra de precedência entre dois eventos (cada evento é a retirada ou a entrega de uma remessa): o "segundo" evento precisa começar pelo menos offsetDuration
depois 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.
Representação JSON |
---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
Campos | |
---|---|
firstIsDelivery |
Indica se o "primeiro" evento é uma entrega. |
secondIsDelivery |
Indica se o "segundo" evento é uma entrega. |
offsetDuration |
O deslocamento entre o "primeiro" e o "segundo". Pode ser negativo. Uma duração em segundos com até nove dígitos fracionários, terminando em " |
firstIndex |
Índice de envio do evento "primeiro". Esse campo precisa ser especificado. |
secondIndex |
Índice de envio do "segundo evento". Esse campo precisa ser especificado. |