As janelas de tempo especificam o horário dos eventos em uma rota. Esses eventos podem incluir o início e o fim do trajeto de um motorista, horários programados de retirada e entrega ou a duração de um trajeto inteiro.
As janelas de tempo podem oferecer suporte a objetivos como:
- Priorizar a conclusão de retiradas e entregas dentro de períodos especificados.
- Planejar rotas para operar dentro do horário de funcionamento geral.
- Garantir que os veículos comecem e terminem os trajetos dentro de períodos especificados.
Estrutura
Conforme mostrado no diagrama, as janelas de tempo são estruturadas da seguinte maneira:
globalStartTimeeglobalEndTimesão propriedades deShipmentModel.timeWindowssão propriedades de:pickupsdentro deShipment.deliveriesdentro deShipment.
startTimeWindowseendTimeWindowssão propriedades deVehicle.
Lista de verificação de fundamentos
A lista de verificação a seguir descreve o conhecimento essencial que evita possíveis erros relacionados a janelas de tempo. Essa lista pode ajudar você a validar sua solicitação e solucionar problemas na resposta.
Propriedades
A tabela a seguir descreve as propriedades da janela de tempo global.
| Propriedade | Formato | Descrição |
|---|---|---|
globalStartTime |
Timestamp |
O horário mais cedo para qualquer evento. |
globalEndTime |
Timestamp |
O horário mais tarde para qualquer evento. |
A tabela a seguir descreve as propriedades da janela de tempo em remessas e veículos.
| Com filhos | Propriedade | Formato | Descrição |
|---|---|---|---|
Shipment.pickups |
timeWindows |
Matriz de TimeWindow tipos de mensagem. |
Especifica intervalos de tempo para uma retirada de remessa. |
Shipment.deliveries |
timeWindows |
Especifica intervalos de tempo para uma entrega de remessa. | |
Vehicle |
startTimeWindows |
Especifica o horário de início da programação de funcionamento de um veículo. | |
endTimeWindows |
Especifica o horário de término da programação de funcionamento de um veículo. |
A tabela a seguir descreve as propriedades de um TimeWindow tipo de mensagem.
| Propriedade | Formato | Descrição |
|---|---|---|
startTime |
String (formato UTC "Zulu" RFC3339) | O início de uma janela de tempo. |
endTime |
String (formato UTC "Zulu" RFC3339) | O fim de uma janela de tempo. |
Exemplos
Esta seção aborda três tipos de exemplos:
- Amostras de código que ilustram a estrutura das janelas de tempo .
- Um cenário de exemplo que mostra uma maneira de usar janelas de tempo para alcançar um objetivo de negócios.
- Um exemplo de solicitação que inclui os valores definidos no cenário de exemplo.
Amostras de código
As seções a seguir mostram exemplos de código de diferentes tipos de janelas de tempo.
Janelas de tempo globais
O exemplo de código a seguir mostra a estrutura das janelas de tempo globais:
{ "model": { "globalStartTime": "YYYY-MM-DDTHH:MM:SSZ", "globalEndTime": "YYYY-MM-DDTHH:MM:SSZ", "shipments": [ ... ], "vehicles": [ ... ] } }
Janelas de tempo de retiradas e entregas
O exemplo de código a seguir mostra a estrutura das janelas de tempo nas retiradas e entregas de uma remessa:
{ "model": { "shipments": [ { "pickups": [ { "timeWindows": [ { "startTime": "YYYY-MM-DDTHH:MM:SSZ", "endTime": "YYYY-MM-DDTHH:MM:SSZ" } ] } ], "deliveries": [ { "timeWindows": [ { "startTime": "YYYY-MM-DDTHH:MM:SSZ", "endTime": "YYYY-MM-DDTHH:MM:SSZ" } ] } ] } ], "vehicles": [ ... ] } }
Janelas de tempo do veículo
O exemplo de código a seguir mostra a estrutura das janelas de tempo de um veículo:
{ "model": { "shipments": [ ... ], "vehicles": [ { "startTimeWindows": [ { "startTime": "YYYY-MM-DDTHH:MM:SSZ", "endTime": "YYYY-MM-DDTHH:MM:SSZ" } ], "endTimeWindows": [ { "startTime": "YYYY-MM-DDTHH:MM:SSZ", "endTime": "YYYY-MM-DDTHH:MM:SSZ" } ] } ] } }
Exemplo de cenário
Esta seção usa um cenário de negócios de uma creche para cães. O exemplo otimiza os trajetos para buscar e deixar cães de duas casas diferentes, e os proprietários têm as mesmas janelas de tempo de retirada e entrega. O otimizador precisa respeitar o horário de funcionamento da creche, as janelas de retirada e entrega específicas para os clientes e o horário de trabalho do motorista.
Para este exemplo, os valores de propriedade na solicitação são os seguintes:
| Com filhos | Propriedade | Valor | Cenário |
|---|---|---|---|
ShipmentModel |
globalStartTime |
2023-01-13T07:00:00Z |
Representa o horário de abertura da creche para cães. Nenhuma retirada ou entrega pode acontecer antes desse horário. |
ShipmentModel |
globalEndTime |
2023-01-13T19:00:00Z |
Representa o horário de fechamento da creche para cães. Todas as retiradas e entregas precisam ser concluídas até esse horário. |
Shipment.pickups |
timeWindows |
startTime:2023-01-13T07:30:00Z |
Define a janela aceitável para buscar um cão na casa de um cliente. Neste exemplo, você pediu aos dois clientes que ficassem disponíveis para retirada entre 7h30 e 9h. |
endTime:2023-01-13T09:00:00Z |
|||
Shipment.deliveries |
timeWindows |
startTime:2023-01-13T17:00:00Z |
Define a janela aceitável para deixar um cão na casa de um cliente. Neste exemplo, você informou aos dois clientes que os cães seriam deixados entre 17h e 18h30. |
endTime:2023-01-13T18:30:00Z |
|||
Vehicle |
startTimeWindows |
startTime:2023-01-13T07:00:00ZendTime:2023-01-13T07:15:00Z |
Define a janela aceitável para o veículo começar (7h às 7h15) e terminar (17h às 17h15). |
endTimeWindows |
startTime:2023-01-13T18:45:00ZendTime:2023-01-13T19:00:00Z |
O diagrama a seguir ilustra as janelas de tempo que afetam esse trajeto.
Nesse cenário, conforme ilustrado pelo diagrama, as janelas de tempo funcionam da seguinte maneira:
- A janela de tempo global representa o horário de funcionamento da creche para cães, e todas as outras janelas de tempo precisam estar dentro dessa janela.
- As retiradas e entregas têm suas próprias
timeWindowsno início e fim do dia, respectivamente. - As
startTimeWindowsdo veículo oferecem ao operador um período em que ele precisa começar a trabalhar, eendTimeWindowsoferecem outro período em que ele precisa terminar o dia. - O horário de início da primeira
startTimeWindowe o horário de término da últimaendTimeWindowdefinem o horário de funcionamento do veículo, que, nesse caso, é o mesmo da janela de tempo global.
Exemplo de solicitação
O exemplo a seguir mostra a estrutura de uma solicitação optimizeTours
que incorpora os valores de janelas de tempo do cenário de exemplo.
{ "model": { "globalStartTime": "2023-01-13T07:00:00Z", "globalEndTime": "2023-01-13T19:00:00Z", "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.8024, "longitude": -122.4058 }, "timeWindows": [ { "startTime": "2023-01-13T07:30:00Z", "endTime": "2023-01-13T09:00:00Z" } ] } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "timeWindows": [ { "startTime": "2023-01-13T17:00:00Z", "endTime": "2023-01-13T18:30:00Z" } ] } ] }, { "pickups": [ { "arrivalLocation": { "latitude": 37.7359, "longitude": -122.5011 }, "timeWindows": [ { "startTime": "2023-01-13T07:30:00Z", "endTime": "2023-01-13T09:00:00Z" } ] } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "timeWindows": [ { "startTime": "2023-01-13T17:00:00Z", "endTime": "2023-01-13T18:30:00Z" } ] } ] } ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "costPerHour": 27, "startTimeWindows": [ { "startTime": "2023-01-13T07:00:00Z", "endTime": "2023-01-13T07:15:00Z" } ], "endTimeWindows": [ { "startTime": "2023-01-13T18:45:00Z", "endTime": "2023-01-13T19:00:00Z" } ] } ] } }
Janelas de tempo flexíveis
As janelas de tempo podem ser usadas como restrições flexíveis definindo softStartTime
e softEndTime em um tipo de mensagem TimeWindow. Isso permite que o otimizador se desvie da janela de tempo especificada a um custo especificado, priorizando a otimização geral em vez da adesão estrita aos períodos quando for benéfico.
As janelas de tempo flexíveis têm as seguintes limitações de uso:
- Elas não podem ser aplicadas a
globalStartTimeeglobalEndTime, porque não usam o tipo de mensagemTimeWindow. - Elas só são aplicáveis quando há uma única
TimeWindowem uma lista.
Propriedades
A tabela a seguir descreve as propriedades de restrição flexível para janelas de tempo.
| Nome da propriedade | Formato | Descrição da propriedade |
|---|---|---|
softStartTime |
Carimbo de data/hora | Especifica o início da janela de tempo flexível. Se um evento ocorrer antes desse horário, um custo será gerado. |
softEndTime |
Carimbo de data/hora | Especifica o fim da janela de tempo flexível. Se um evento ocorrer após esse horário, um custo será gerado. |
costPerHourBeforeSoftStartTime |
número | O custo por hora gerado quando um evento começa antes do softStartTime. Essa propriedade é obrigatória ao usar softStartTime. Consulte o conceito-chave do modelo de custo para saber mais sobre como implementar custos. |
costPerHourAfterSoftEndTime |
número | O custo por hora gerado quando um evento termina após o softEndTime. Essa propriedade é obrigatória ao usar softEndTime. Consulte o conceito-chave do modelo de custo para saber mais sobre como implementar custos. |
Exemplo de código
O exemplo a seguir mostra a estrutura das propriedades de restrição flexível de um
TimeWindow tipo de mensagem:
{ "softStartTime": "SOFT_START_TIME", "softEndTime": "SOFT_END_TIME", "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME, "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME }