Le finestre temporali specificano la tempistica degli eventi su un percorso. Questi eventi possono includere l'inizio e la fine del percorso di un autista, gli orari di ritiro e consegna pianificati o la durata di un intero percorso.
Le finestre temporali possono supportare obiettivi quali:
- Dai la priorità al completamento dei ritiri e delle consegne entro i tempi specificati.
- Pianifica gli itinerari in modo da operare entro l'orario di apertura complessivo.
- Assicurati che i veicoli inizino e terminino i percorsi entro i periodi di tempo specificati.
Struttura
Come mostrato nel diagramma, le finestre temporali sono strutturate nel seguente modo:
globalStartTime
eglobalEndTime
sono proprietà diShipmentModel
timeWindows
sono proprietà di:pickups
all'interno diShipment
.deliveries
all'interno diShipment
.
startTimeWindows
eendTimeWindows
sono proprietà diVehicle
.
Elenco di controllo di Essentials
Proprietà
La tabella seguente descrive le proprietà della finestra temporale globale.
Proprietà | Formato | Descrizione |
---|---|---|
globalStartTime |
Timestamp |
L'ora più mattiniera per qualsiasi evento. |
globalEndTime |
Timestamp |
L'ora più recente per qualsiasi evento. |
La tabella seguente descrive le proprietà della finestra temporale nelle spedizioni e nei veicoli.
Genitore | Proprietà | Formato | Descrizione |
---|---|---|---|
Shipment.pickups |
timeWindows |
Array di tipi di messaggi TimeWindow . |
Specifica gli intervalli di tempo per il ritiro di una spedizione. |
Shipment.deliveries |
timeWindows |
Specifica gli intervalli di tempo per la consegna di una spedizione. | |
Vehicle |
startTimeWindows |
Specifica l'ora di inizio della programmazione operativa di un veicolo. | |
endTimeWindows |
Specifica l'ora di fine dell'orario di funzionamento di un veicolo. |
La seguente tabella descrive le proprietà di un tipo di messaggio TimeWindow
.
Proprietà | Formato | Descrizione |
---|---|---|
startTime |
Stringa (formato "Zulu" UTC RFC3339) | L'inizio di un intervallo di tempo. |
endTime |
Stringa (formato "Zulu" UTC RFC3339) | La fine di un intervallo di tempo. |
Esempi
Questa sezione tratta tre tipi di esempi:
- Esempi di codice che illustrano la struttura delle finestre temporali.
- Uno scenario di esempio che mostra un modo per utilizzare le finestre temporali per raggiungere un obiettivo commerciale.
- Un esempio di richiesta che include i valori impostati nello scenario di esempio.
Esempi di codice
Le sezioni seguenti mostrano esempi di codice di diversi tipi di finestre temporali.
Finestre temporali globali
Il seguente esempio di codice mostra la struttura delle finestre temporali globali:
{ "model": { "globalStartTime": "YYYY-MM-DDTHH:MM:SSZ", "globalEndTime": "YYYY-MM-DDTHH:MM:SSZ", "shipments": [ ... ], "vehicles": [ ... ] } }
Finestre temporali per ritiri e consegne
Il seguente esempio di codice mostra la struttura delle finestre temporali nei ritiri e nelle consegne di una spedizione:
{ "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": [ ... ] } }
Finestre temporali del veicolo
Il seguente esempio di codice mostra la struttura delle finestre temporali di un veicolo:
{ "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" } ] } ] } }
Scenario di esempio
Questa sezione utilizza uno scenario aziendale di un asilo nido per cani. L'esempio ottimizza i percorsi per il ritiro e l'accompagnamento di cani da due case diverse e i proprietari hanno le stesse fasce orarie di ritiro e accompagnamento. L'ottimizzatore deve rispettare l'orario di apertura dell'asilo nido, le finestre temporali specifiche per il ritiro e l'accompagnamento dei clienti e l'orario di lavoro del conducente.
Per questo esempio, i valori delle proprietà nella richiesta sono i seguenti:
Genitore | Proprietà | Valore | Scenario |
---|---|---|---|
ShipmentModel |
globalStartTime |
2023-01-13T07:00:00Z |
Rappresenta l'orario di apertura del tuo asilo nido per cani. Nessun ritiro o consegna può avvenire prima di questo orario. |
ShipmentModel |
globalEndTime |
2023-01-13T19:00:00Z |
Rappresenta l'orario di chiusura dell'asilo nido per cani. Tutti i ritiri e le consegne devono essere completati entro questo orario. |
Shipment.pickups |
timeWindows |
startTime :2023-01-13T07:30:00Z |
Definisce l'intervallo di tempo accettabile per il ritiro di un cane dalla casa di un cliente. In questo esempio, hai comunicato a entrambi i clienti di essere disponibili per il ritiro tra le 7:30 e le 9:00. |
endTime :2023-01-13T09:00:00Z |
|||
Shipment.deliveries |
timeWindows |
startTime :2023-01-13T17:00:00Z |
Definisce l'intervallo di tempo accettabile per lasciare un cane a casa di un cliente. In questo esempio, hai comunicato a entrambi i clienti che i loro cani verranno consegnati tra le 17:00 e le 18:30. |
endTime :2023-01-13T18:30:00Z |
|||
Vehicle |
startTimeWindows |
startTime :2023-01-13T07:00:00Z endTime :2023-01-13T07:15:00Z |
Definisce la finestra accettabile per l'inizio (dalle 7:00 alle 7:15) e la fine (dalle 17:00 alle 17:15) del viaggio del veicolo. |
endTimeWindows |
startTime :2023-01-13T18:45:00Z endTime :2023-01-13T19:00:00Z |
Il seguente diagramma illustra le finestre temporali che interessano questa rotta.
In questo scenario, come illustrato nel diagramma, le finestre temporali funzionano come segue:
- La finestra temporale globale rappresenta l'orario di apertura dell'asilo per cani e tutte le altre finestre temporali devono rientrare in questa finestra temporale.
- I ritiri e le consegne hanno una propria
timeWindows
all'inizio e alla fine della giornata, rispettivamente. - Il
startTimeWindows
del veicolo indica all'operatore del veicolo un periodo di tempo in cui deve iniziare a lavorare, mentre ilendTimeWindows
indica un altro periodo di tempo in cui deve terminare la giornata. - L'ora di inizio del primo
startTimeWindow
e l'ora di fine dell'ultimoendTimeWindow
definiscono l'orario di servizio del veicolo, che in questo caso è lo stesso della finestra temporale globale.
Esempio di richiesta
L'esempio seguente mostra la struttura di una richiesta optimizeTours
che incorpora i valori delle finestre temporali dello scenario di esempio.
{ "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" } ] } ] } }
Finestre temporali soft
Le finestre temporali possono essere utilizzate come vincoli flessibili definendo softStartTime
e
softEndTime
in un tipo di messaggio TimeWindow
. Ciò consente all'ottimizzatore di
discostarsi dalla finestra temporale specificata a un costo specificato, dando la priorità all'ottimizzazione
complessiva rispetto al rispetto rigoroso dei periodi di tempo quando è vantaggioso.
Le finestre temporali flessibili presentano le seguenti limitazioni di utilizzo:
- Non possono essere applicati a
globalStartTime
eglobalEndTime
perché non utilizzano il tipo di messaggioTimeWindow
. - Sono applicabili solo quando in un elenco è presente un solo
TimeWindow
.
Proprietà
La tabella seguente descrive le proprietà del vincolo flessibile per le finestre temporali.
Nome proprietà | Formato | Descrizione della proprietà |
---|---|---|
softStartTime |
Timestamp | Specifica l'inizio della finestra temporale soft. Se un evento si verifica prima di questo orario, viene addebitato un costo. |
softEndTime |
Timestamp | Specifica la fine della finestra temporale flessibile. Se si verifica un evento dopo questo orario, viene addebitato un costo. |
costPerHourBeforeSoftStartTime |
numero | Il costo orario sostenuto quando un evento inizia prima delle softStartTime . Questa proprietà è obbligatoria quando utilizzi softStartTime . Consulta il concetto chiave Modello di costo per scoprire di più su come implementare i costi. |
costPerHourAfterSoftEndTime |
numero | Il costo orario sostenuto quando un evento termina dopo le ore softEndTime . Questa proprietà è obbligatoria quando utilizzi softEndTime . Consulta il concetto chiave Modello di costo per scoprire di più su come implementare i costi. |
Esempio di codice
L'esempio seguente mostra la struttura delle proprietà del vincolo flessibile di un tipo di messaggio
TimeWindow
:
{ "softStartTime": "SOFT_START_TIME", "softEndTime": "SOFT_END_TIME", "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME, "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME }