- Rappresentazione JSON
- Spedizione
- VisitRequest
- LatLng
- Waypoint
- Località
- TimeWindow
- Veicolo
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- Intervallo
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- Obiettivo
- Tipo
- DurationDistanceMatrix
- Row
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
Un modello di spedizione contiene un insieme di spedizioni che devono essere eseguite da un insieme di veicoli, riducendo al minimo il costo complessivo, che è la somma di:
- il costo del routing dei veicoli (somma del costo per tempo totale, del costo per tempo di percorrenza e del costo fisso per tutti i veicoli).
- le penali per la mancata spedizione.
- il costo della durata complessiva delle spedizioni
| Rappresentazione JSON |
|---|
{ "shipments": [ { object ( |
| Campi | |
|---|---|
shipments[] |
Insieme di spedizioni che devono essere eseguite nel modello. |
vehicles[] |
Insieme di veicoli che possono essere utilizzati per eseguire le visite. |
objectives[] |
L'insieme di obiettivi per questo modello, che trasformeremo in costi. Se non è vuoto, il modello di input deve essere senza costi. Per ottenere la richiesta modificata, utilizza Sperimentale: per ulteriori dettagli, consulta la pagina https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request. |
globalStartTime |
Ora di inizio e di fine globale del modello: non possono essere considerate valide ore al di fuori di questo intervallo. L'intervallo di tempo del modello deve essere inferiore a un anno, ovvero Quando utilizzi i campi Utilizza RFC 3339, in cui l'output generato è sempre con normalizzazione Z e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
globalEndTime |
Se non impostato, viene utilizzato come valore predefinito 00:00:00 UTC, 1° gennaio 1971 (ovvero secondi: 31536000, nanos: 0). Utilizza RFC 3339, in cui l'output generato è sempre con normalizzazione Z e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
globalDurationCostPerHour |
La "durata globale" del piano complessivo è la differenza tra l'ora di inizio effettiva più remota e l'ora di fine effettiva più recente di tutti i veicoli. Gli utenti possono assegnare un costo orario a questa quantità per cercare di ottimizzare, ad esempio, il completamento più rapido del job. Questo costo deve essere nella stessa unità di |
durationDistanceMatrices[] |
Specifica le matrici di durata e Distance Matrix utilizzate nel modello. Se questo campo è vuoto, verranno utilizzate le distanze di Google Maps o geodetiche, a seconda del valore del campo Esempi di utilizzo:
|
durationDistanceMatrixSrcTags[] |
Tag che definiscono le origini delle matrici di durata e Distance Matrix; I tag corrispondono a |
durationDistanceMatrixDstTags[] |
Tag che definiscono le destinazioni delle matrici di durata e Distance Matrix; I tag corrispondono a |
transitionAttributes[] |
Attributi di transizione aggiunti al modello. |
shipmentTypeIncompatibilities[] |
Insiemi di shipment_type incompatibili (vedi |
shipmentTypeRequirements[] |
Insiemi di requisiti |
precedenceRules[] |
Insieme di regole di precedenza che devono essere applicate nel modello. IMPORTANTE: l'utilizzo delle regole di precedenza limita le dimensioni del problema che può essere ottimizzato. Le richieste che utilizzano regole di precedenza che includono molte spedizioni potrebbero essere rifiutate. |
maxActiveVehicles |
Vincola il numero massimo di veicoli attivi. Un veicolo è attivo se il suo percorso esegue almeno una spedizione. Questo può essere utilizzato per limitare il numero di percorsi nel caso in cui ci siano meno conducenti che veicoli e il parco veicoli sia eterogeneo. L'ottimizzazione selezionerà quindi il sottoinsieme migliore di veicoli da utilizzare. Deve essere un numero strettamente positivo. |
Spedizione
La spedizione di un singolo articolo, da uno dei suoi ritiri a una delle sue consegne. Affinché la spedizione venga considerata come eseguita, un veicolo univoco deve visitare una delle sue località di ritiro (e ridurre di conseguenza le sue capacità residue), quindi visitare una delle sue località di consegna in un secondo momento (e quindi aumentare di nuovo le sue capacità residue di conseguenza).
| Rappresentazione JSON |
|---|
{ "displayName": string, "pickups": [ { object ( |
| Campi | |
|---|---|
displayName |
Il nome visualizzato della spedizione definito dall'utente. Può contenere fino a 63 caratteri e può utilizzare caratteri UTF-8. |
pickups[] |
Insieme di alternative di ritiro associate alla spedizione. Se non specificato, il veicolo deve solo visitare una località corrispondente alle consegne. |
deliveries[] |
Insieme di alternative di consegna associate alla spedizione. Se non specificato, il veicolo deve solo visitare una località corrispondente ai ritiri. |
loadDemands |
Requisiti di carico della spedizione (ad esempio peso, volume, numero di pallet e così via). Le chiavi nella mappa devono essere identificatori che descrivono il tipo di carico corrispondente, idealmente includendo anche le unità. Ad esempio: "weight_kg", "volume_gallons", "pallet_count" e così via. Se una determinata chiave non viene visualizzata nella mappa, il carico corrispondente viene considerato nullo. |
allowedVehicleIndices[] |
L'insieme di veicoli che possono eseguire questa spedizione. Se vuoto, tutti i veicoli possono eseguirla. I veicoli sono indicati dal loro indice nell'elenco |
costsPerVehicle[] |
Specifica il costo sostenuto quando questa spedizione viene consegnata da ciascun veicolo. Se specificato, deve avere:
Questi costi devono essere espressi nella stessa unità di |
costsPerVehicleIndices[] |
Indici dei veicoli a cui si applica |
pickupToDeliveryAbsoluteDetourLimit |
Specifica il tempo di deviazione assoluto massimo rispetto al percorso più breve dal ritiro alla consegna. Se specificato, deve essere un valore non negativo e la spedizione deve contenere almeno un ritiro e una consegna. Ad esempio, supponiamo che t sia il tempo più breve impiegato per andare dall'alternativa di ritiro selezionata direttamente all'alternativa di consegna selezionata. In questo caso, l'impostazione Se per la stessa spedizione vengono specificati sia limiti relativi che assoluti, per ogni possibile coppia di ritiro/consegna viene utilizzato il limite più restrittivo. A partire da ottobre 2017, le deviazioni sono supportate solo quando le durate dei viaggi non dipendono dai veicoli. |
pickupToDeliveryTimeLimit |
Specifica la durata massima dall'inizio del ritiro all'inizio della consegna di una spedizione. Se specificato, deve essere un valore non negativo e la spedizione deve contenere almeno un ritiro e una consegna. Questo non dipende dalle alternative selezionate per il ritiro e la consegna, né dalla velocità del veicolo. Questo valore può essere specificato insieme ai vincoli di deviazione massima: la soluzione rispetterà entrambe le specifiche. |
shipmentType |
Stringa non vuota che specifica un "tipo" per questa spedizione. Questa funzionalità può essere utilizzata per definire incompatibilità o requisiti tra A differenza di |
label |
Specifica un'etichetta per questa spedizione. Questa etichetta viene riportata nella risposta nel campo |
ignore |
Se true, salta questa spedizione, ma non applicare un Se ignori una spedizione, si verifica un errore di convalida quando nel modello sono presenti È consentito ignorare una spedizione eseguita in |
penaltyCost |
Se la spedizione non viene completata, questa penalità viene aggiunta al costo complessivo dei percorsi. Una spedizione è considerata completata se viene visitata una delle sue alternative di ritiro e consegna. Il costo può essere espresso nella stessa unità utilizzata per tutti gli altri campi relativi ai costi nel modello e deve essere positivo. IMPORTANTE: se questa penalità non viene specificata, viene considerata infinita, ovvero la spedizione deve essere completata. |
pickupToDeliveryRelativeDetourLimit |
Specifica il tempo di deviazione relativo massimo rispetto al percorso più breve dal ritiro alla consegna. Se specificato, deve essere un valore non negativo e la spedizione deve contenere almeno un ritiro e una consegna. Ad esempio, supponiamo che t sia il tempo più breve impiegato per andare dall'alternativa di ritiro selezionata direttamente all'alternativa di consegna selezionata. In questo caso, l'impostazione Se per la stessa spedizione vengono specificati sia limiti relativi che assoluti, per ogni possibile coppia di ritiro/consegna viene utilizzato il limite più restrittivo. A partire da ottobre 2017, le deviazioni sono supportate solo quando le durate dei viaggi non dipendono dai veicoli. |
VisitRequest
Richiesta di una visita che può essere eseguita da un veicolo: ha una posizione geografica (o due, vedi sotto), orari di apertura e chiusura rappresentati da finestre temporali e una durata del servizio (tempo trascorso dal veicolo una volta arrivato per il ritiro o la consegna delle merci).
| Rappresentazione JSON |
|---|
{ "arrivalLocation": { object ( |
| Campi | |
|---|---|
arrivalLocation |
La posizione geografica in cui arriva il veicolo quando esegue questa |
arrivalWaypoint |
Il waypoint in cui arriva il veicolo durante l'esecuzione di questo |
departureLocation |
La posizione geografica da cui parte il veicolo dopo aver completato questo |
departureWaypoint |
Il waypoint da cui parte il veicolo dopo aver completato questo |
tags[] |
Specifica i tag associati alla richiesta di visita. Non sono consentite stringhe vuote o duplicate. |
timeWindows[] |
Finestre temporali che limitano l'ora di arrivo a una visita. Tieni presente che un veicolo può partire al di fuori della finestra temporale di arrivo, ovvero l'ora di arrivo + la durata non devono necessariamente rientrare in una finestra temporale. Ciò può comportare un tempo di attesa se il veicolo arriva prima di L'assenza di Le finestre temporali devono essere disgiunte, ovvero non devono sovrapporsi o essere adiacenti l'una all'altra e devono essere in ordine crescente.
|
duration |
Durata della visita, ovvero il tempo trascorso dal veicolo tra l'arrivo e la partenza (da aggiungere all'eventuale tempo di attesa; vedi |
cost |
Costo per gestire questa richiesta di visita su un percorso del veicolo. Può essere utilizzato per pagare costi diversi per ogni ritiro o consegna alternativi di una spedizione. Questo costo deve essere espresso nella stessa unità di |
loadDemands |
Requisiti di carico di questa richiesta di visita. Questo campo è simile al campo |
visitTypes[] |
Specifica i tipi di visita. Può essere utilizzato per assegnare il tempo aggiuntivo necessario a un veicolo per completare la visita (vedi Un tipo può essere visualizzato una sola volta. |
label |
Specifica un'etichetta per questo |
avoidUTurns |
Specifica se le inversioni a U devono essere evitate nei percorsi in auto in questa località. L'evitamento delle inversioni a U è un'operazione "best effort" e l'evitamento completo non è garantito. Questa è una funzionalità sperimentale e il comportamento è soggetto a modifiche. Sperimentale: per maggiori dettagli, consulta https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request. |
LatLng
Un oggetto che rappresenta una coppia di latitudine/longitudine. Questo valore è espresso come una coppia di valori double che rappresentano i gradi di latitudine e longitudine. Se non diversamente specificato, questo oggetto deve essere conforme allo standard WGS84. I valori devono rientrare negli intervalli normalizzati.
| Rappresentazione JSON |
|---|
{ "latitude": number, "longitude": number } |
| Campi | |
|---|---|
latitude |
La latitudine in gradi. Deve essere compreso nell'intervallo [-90.0, +90.0]. |
longitude |
La longitudine in gradi. Deve essere compreso nell'intervallo [-180,0, +180,0]. |
Waypoint
Incapsula un waypoint. I waypoint contrassegnano le località di arrivo e partenza delle richieste di visita, nonché le località di partenza e di arrivo dei veicoli.
| Rappresentazione JSON |
|---|
{
"sideOfRoad": boolean,
"vehicleStopover": boolean,
// The following is a list of mutually exclusive fields. At most one of the
// fields will be set in a response:
"location": {
object ( |
| Campi | |
|---|---|
sideOfRoad |
Facoltativo. Indica che la posizione di questo waypoint deve avere una preferenza per la sosta del veicolo su un lato specifico della strada. Quando imposti questo valore, il percorso passerà attraverso la località in modo che il veicolo possa fermarsi sul lato della strada verso cui è orientata la località rispetto al centro della strada. Questa opzione non funziona per la modalità di viaggio "A PIEDI". |
vehicleStopover |
Indica che la tappa è destinata alla sosta dei veicoli, con l'intenzione di far salire o scendere i passeggeri. Questa opzione funziona solo per la modalità di viaggio "DRIVING" e quando "locationType" è "location". Sperimentale: il comportamento o l'esistenza di questo campo potrebbero cambiare in futuro. |
| Diversi modi per rappresentare una località. Di seguito è riportato un elenco di campi che si escludono a vicenda. In una risposta verrà impostato al massimo uno dei campi: | |
location |
Un punto specificato utilizzando le coordinate geografiche, inclusa un'intestazione facoltativa. |
placeId |
L'ID luogo del PDI associato al waypoint. Quando utilizzi un ID luogo per specificare la località di arrivo o di partenza di una richiesta di visita, utilizza un ID luogo sufficientemente specifico da determinare una località LatLng per la navigazione verso il luogo. Ad esempio, un ID luogo che rappresenta un edificio è adatto, ma un ID luogo che rappresenta una strada è sconsigliato. |
| Fine dei campi che si escludono a vicenda. | |
Località
Incapsula una località (un punto geografico e un'intestazione facoltativa).
| Rappresentazione JSON |
|---|
{
"latLng": {
object ( |
| Campi | |
|---|---|
latLng |
Le coordinate geografiche del waypoint. |
heading |
La direzione della bussola associata alla direzione del flusso del traffico. Questo valore viene utilizzato per specificare il lato della strada da utilizzare per il ritiro e la consegna. I valori della direzione possono essere compresi tra 0 e 360, dove 0 indica una direzione verso nord, 90 indica una direzione verso est e così via. |
TimeWindow
Le finestre temporali limitano l'orario di un evento, ad esempio l'ora di arrivo di una visita o l'ora di inizio e di fine di un veicolo.
I limiti rigidi della finestra temporale, startTime e endTime, applicano l'ora di inizio e di fine dell'evento, in modo che startTime <= event_time <=
endTime. Il limite inferiore della finestra temporale flessibile, softStartTime, esprime una preferenza per l'evento che si verifica in corrispondenza o dopo softStartTime, sostenendo un costo proporzionale al tempo trascorso prima di softStartTime. Il limite superiore della finestra temporale flessibile, softEndTime, esprime una preferenza per l'evento che si verifica entro o prima di softEndTime, con un costo proporzionale al tempo trascorso dopo softEndTime. startTime, endTime, softStartTime e softEndTime devono rientrare nei limiti di tempo globali (vedi ShipmentModel.global_start_time e ShipmentModel.global_end_time) e devono rispettare:
0 <= `startTime` <= `endTime` and
0 <= `startTime` <= `softStartTime` and
0 <= `softEndTime` <= `endTime`.
| Rappresentazione JSON |
|---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
| Campi | |
|---|---|
startTime |
L'ora di inizio della finestra temporale rigida. Se non specificato, verrà impostato su Utilizza RFC 3339, in cui l'output generato è sempre con normalizzazione Z e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
endTime |
L'ora di fine della finestra temporale rigida. Se non specificato, verrà impostato su Utilizza RFC 3339, in cui l'output generato è sempre con normalizzazione Z e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
softStartTime |
L'ora di inizio flessibile della finestra temporale. Utilizza RFC 3339, in cui l'output generato è sempre con normalizzazione Z e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
softEndTime |
L'ora di fine flessibile della finestra temporale. Utilizza RFC 3339, in cui l'output generato è sempre con normalizzazione Z e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
costPerHourBeforeSoftStartTime |
Un costo orario aggiunto ad altri costi nel modello se l'evento si verifica prima di softStartTime, calcolato come: Questo costo deve essere positivo e il campo può essere impostato solo se è stato impostato softStartTime. |
costPerHourAfterSoftEndTime |
Un costo orario aggiunto ad altri costi nel modello se l'evento si verifica dopo il giorno Questo costo deve essere positivo e il campo può essere impostato solo se è stato impostato |
Veicolo
Modella un veicolo in un problema di spedizione. La risoluzione di un problema di spedizione creerà un percorso che inizia da startLocation e termina in endLocation per questo veicolo. Un percorso è una sequenza di visite (vedi ShipmentRoute).
| Rappresentazione JSON |
|---|
{ "displayName": string, "travelMode": enum ( |
| Campi | |
|---|---|
displayName |
Il nome visualizzato del veicolo definito dall'utente. Può contenere fino a 63 caratteri e può utilizzare caratteri UTF-8. |
travelMode |
La modalità di viaggio, che influisce sulle strade utilizzabili dal veicolo e sulla sua velocità. Vedi anche |
routeModifiers |
Un insieme di condizioni da soddisfare che influiscono sul modo in cui vengono calcolati i percorsi per il veicolo specificato. |
startLocation |
Posizione geografica in cui il veicolo inizia il percorso prima di ritirare le spedizioni. Se non specificato, il veicolo parte dal primo ritiro. Se il modello di spedizione ha matrici di durata e Distance Matrix, |
startWaypoint |
Waypoint che rappresenta una posizione geografica in cui il veicolo si trova prima di ritirare le spedizioni. Se non viene specificato né |
endLocation |
Posizione geografica in cui si trova il veicolo dopo aver completato l'ultima |
endWaypoint |
Waypoint che rappresenta una posizione geografica in cui il veicolo si ferma dopo aver completato l'ultima |
startTags[] |
Specifica i tag associati all'inizio del percorso del veicolo. Non sono consentite stringhe vuote o duplicate. |
endTags[] |
Specifica i tag associati alla fine del percorso del veicolo. Non sono consentite stringhe vuote o duplicate. |
startTimeWindows[] |
Finestre temporali durante le quali il veicolo può partire dalla località di partenza. Devono rientrare nei limiti di tempo globali (vedi i campi Le finestre temporali appartenenti allo stesso campo ripetuto devono essere disgiunte, ovvero nessuna finestra temporale può sovrapporsi o essere adiacente a un'altra e devono essere in ordine cronologico.
|
endTimeWindows[] |
Finestre temporali durante le quali il veicolo può arrivare alla località di arrivo. Devono rientrare nei limiti di tempo globali (vedi i campi Le finestre temporali appartenenti allo stesso campo ripetuto devono essere disgiunte, ovvero nessuna finestra temporale può sovrapporsi o essere adiacente a un'altra e devono essere in ordine cronologico.
|
unloadingPolicy |
Policy di scarico applicata al veicolo. |
loadLimits |
Capacità del veicolo (ad esempio peso, volume, numero di pallet). Le chiavi nella mappa sono gli identificatori del tipo di carico, coerenti con le chiavi del campo |
costPerHour |
Costi del veicolo: tutti i costi si sommano e devono essere espressi nella stessa unità di Costo per ora del percorso del veicolo. Questo costo viene applicato al tempo totale impiegato per il percorso e include il tempo di percorrenza, il tempo di attesa e il tempo di visita. L'utilizzo di |
costPerTraveledHour |
Costo per ora di viaggio del percorso del veicolo. Questo costo viene applicato solo al tempo di percorrenza impiegato dal percorso (ovvero quello indicato in |
costPerKilometer |
Costo per chilometro del percorso del veicolo. Questo costo viene applicato alla distanza indicata nel |
fixedCost |
Costo fisso applicato se questo veicolo viene utilizzato per gestire una spedizione. |
usedIfRouteIsEmpty |
Questo campo si applica ai veicoli solo quando il loro percorso non prevede spedizioni. Indica se il veicolo deve essere considerato usato o meno in questo caso. Se true, il veicolo si sposta dalla località di partenza a quella di arrivo anche se non effettua spedizioni e vengono presi in considerazione i costi di tempo e distanza derivanti dal viaggio dalla località di partenza a quella di arrivo. In caso contrario, non si sposta dalla posizione di partenza a quella di arrivo e non sono previsti |
routeDurationLimit |
Limite applicato alla durata totale del percorso del veicolo. In un determinato |
travelDurationLimit |
Limite applicato alla durata del viaggio del percorso del veicolo. In un determinato |
routeDistanceLimit |
Limite applicato alla distanza totale del percorso del veicolo. In un determinato |
extraVisitDurationForVisitType |
Specifica una mappa dalle stringhe visitTypes alle durate. La durata è il tempo aggiuntivo rispetto a Se una richiesta di visita ha più tipi, verrà aggiunta una durata per ogni tipo nella mappa. |
breakRule |
Descrive la pianificazione delle pause da applicare a questo veicolo. Se il campo è vuoto, non verranno programmate pause per questo veicolo. |
label |
Specifica un'etichetta per questo veicolo. Questa etichetta viene riportata nella risposta come |
ignore |
Se true, Se una spedizione viene eseguita da un veicolo ignorato in Se una spedizione viene eseguita da un veicolo ignorato in |
travelDurationMultiple |
Specifica un fattore moltiplicativo che può essere utilizzato per aumentare o diminuire i tempi di percorrenza di questo veicolo. Ad esempio, se imposti questo valore su 2,0, significa che questo veicolo è più lento e ha tempi di percorrenza doppi rispetto ai veicoli standard. Questo multiplo non influisce sulla durata delle visite. Influisce sul costo se vengono specificati ATTENZIONE: i tempi di percorrenza verranno arrotondati al secondo più vicino dopo l'applicazione di questo multiplo, ma prima di eseguire qualsiasi operazione numerica. Pertanto, un multiplo piccolo potrebbe comportare una perdita di precisione. Vedi anche |
TravelMode
Modalità di viaggio che possono essere utilizzate dai veicoli.
Queste dovrebbero essere un sottoinsieme delle modalità di viaggio dell'API Routes di Google Maps Platform, consulta: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
Nota: i percorsi WALKING sono in versione beta e a volte potrebbero non avere marciapiedi o percorsi pedonali chiari. Devi mostrare questo avviso all'utente per tutti i percorsi a piedi che mostri nella tua app.
| Enum | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
Modalità di viaggio non specificata, equivalente a DRIVING. |
DRIVING |
Modalità di viaggio corrispondente alle indicazioni stradali (auto, …). |
WALKING |
Modalità di viaggio corrispondente alle indicazioni stradali a piedi. |
TWO_WHEELER |
Veicolo motorizzato a due ruote. Ad esempio, una moto. Questa modalità di viaggio è supportata solo nei paesi elencati in Paesi e regioni supportati per i veicoli a due ruote. |
RouteModifiers
Incapsula un insieme di condizioni facoltative da soddisfare durante il calcolo dei percorsi dei veicoli. Questo è simile a RouteModifiers nell'API Routes Preferred di Google Maps Platform; consulta: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.
| Rappresentazione JSON |
|---|
{ "avoidTolls": boolean, "avoidHighways": boolean, "avoidFerries": boolean, "avoidIndoor": boolean } |
| Campi | |
|---|---|
avoidTolls |
Specifica se evitare le strade a pedaggio, se possibile. Verrà data la preferenza ai percorsi che non contengono strade a pedaggio. Si applica solo alle modalità di viaggio motorizzate. |
avoidHighways |
Specifica se evitare le autostrade, se possibile. Verrà data la preferenza ai percorsi che non contengono autostrade. Si applica solo alle modalità di viaggio motorizzate. |
avoidFerries |
Specifica se evitare i traghetti, se ragionevole. Verrà data la preferenza ai percorsi che non prevedono l'utilizzo di traghetti. Si applica solo alle modalità di viaggio motorizzate. |
avoidIndoor |
Facoltativo. Specifica se evitare la navigazione in ambienti chiusi, se possibile. Verrà data la preferenza ai percorsi che non contengono la navigazione interna. Si applica solo alla modalità di viaggio |
UnloadingPolicy
Policy su come un veicolo può essere scaricato. Si applica solo alle spedizioni che prevedono sia il ritiro che la consegna.
Le altre spedizioni possono essere effettuate in qualsiasi punto del percorso, indipendentemente da unloadingPolicy.
| Enum | |
|---|---|
UNLOADING_POLICY_UNSPECIFIED |
Policy di scarico non specificata; le consegne devono avvenire dopo i ritiri corrispondenti. |
LAST_IN_FIRST_OUT |
Le consegne devono avvenire in ordine inverso rispetto ai ritiri |
FIRST_IN_FIRST_OUT |
Le consegne devono avvenire nello stesso ordine dei ritiri |
LoadLimit
Definisce un limite di carico applicabile a un veicolo, ad esempio "questo camion può trasportare solo fino a 3500 kg". Leggi i loadLimits.
| Rappresentazione JSON |
|---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
| Campi | |
|---|---|
softMaxLoad |
Un limite flessibile del carico. Leggi i |
costPerUnitAboveSoftMax |
Se il carico supera |
startLoadInterval |
L'intervallo di carico accettabile del veicolo all'inizio del percorso. |
endLoadInterval |
L'intervallo di carico accettabile del veicolo alla fine del percorso. |
maxLoad |
La quantità massima di carico accettabile. |
costPerKilometer |
Costo dello spostamento di un'unità di carico per un chilometro per questo veicolo. Questo valore può essere utilizzato come proxy per il consumo di carburante: se il carico è un peso (in Newton), il carico*chilometro ha la dimensione di un'energia. Sperimentale: per maggiori dettagli, consulta https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request. |
costPerTraveledHour |
Costo del viaggio con un'unità di carico per un'ora per questo veicolo. Sperimentale: per maggiori dettagli, consulta https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request. |
Intervallo
Intervallo di importi di ricarica accettabili.
| Rappresentazione JSON |
|---|
{ "min": string, "max": string } |
| Campi | |
|---|---|
min |
Un carico minimo accettabile. Deve essere ≥ 0. Se vengono specificati entrambi, |
max |
Un carico massimo accettabile. Deve essere ≥ 0. Se non specificato, il carico massimo non è limitato da questo messaggio. Se vengono specificati entrambi, |
LoadCost
Costo dello spostamento di un'unità di carico durante un Transition. Per un determinato carico, il costo è la somma di due parti:
- min(load,
loadThreshold) *costPerUnitBelowThreshold - max(0, carico -
loadThreshold) *costPerUnitAboveThreshold
Con questo costo, le soluzioni preferiscono consegnare prima le domande elevate o, in modo equivalente, ritirare per ultime le domande elevate. Ad esempio, se un veicolo ha
load_limit {
key: "weight"
value {
costPerKilometer {
loadThreshold: 15
costPerUnitBelowThreshold: 2.0
costPerUnitAboveThreshold: 10.0
}
}
}
e il suo percorso è inizio,ritiro,ritiro,consegna,consegna,fine con le transizioni:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
allora il costo sostenuto da questo LoadCost è (cost_below * load_below * chilometri + cost_above * load_above * chilometri)
- transizione 0: 0.0
- transizione 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- transizione 2: 2,0 * 15 * 1,0 + 10,0 * (20 - 15) * 1,0 = 80,0
- transizione 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- transizione 4: 0.0
Quindi il valore di LoadCost lungo il percorso è 120,0.
Tuttavia, se il percorso è inizio,ritiro,consegna,ritiro,consegna,fine con transizioni:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
il costo sostenuto da questo LoadCost è
- transizione 0: 0.0
- transizione 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- transizione 2: 0.0
- transizione 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- transizione 4: 0.0
In questo caso, il valore di LoadCost sul percorso è 40,0.
LoadCost rende più costose le soluzioni con transizioni con carichi pesanti.
Sperimentale: per maggiori dettagli, consulta https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request.
| Rappresentazione JSON |
|---|
{ "loadThreshold": string, "costPerUnitBelowThreshold": number, "costPerUnitAboveThreshold": number } |
| Campi | |
|---|---|
loadThreshold |
Quantità di carico al di sopra della quale il costo di spostamento di un'unità di carico cambia da costPerUnitBelowThreshold a costPerUnitAboveThreshold. Deve essere >= 0. |
costPerUnitBelowThreshold |
Costo dello spostamento di un'unità di carico, per ogni unità compresa tra 0 e la soglia. Deve essere un valore finito e >= 0. |
costPerUnitAboveThreshold |
Costo dello spostamento di un'unità di carico, per ogni unità superiore alla soglia. Nel caso speciale in cui la soglia è pari a 0, si tratta di un costo fisso per unità. Deve essere un valore finito e >= 0. |
DurationLimit
Un limite che definisce la durata massima del percorso di un veicolo. Può essere rigido o morbido.
Quando viene definito un campo di limite flessibile, devono essere definiti insieme sia la soglia massima flessibile sia il costo associato.
| Rappresentazione JSON |
|---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
| Campi | |
|---|---|
maxDuration |
Un limite rigido che limita la durata a un massimo di maxDuration. |
softMaxDuration |
Un limite flessibile che non impone un limite di durata massima, ma che, se violato, comporta un costo per il percorso. Questo costo si aggiunge agli altri costi definiti nel modello, con la stessa unità. Se definito, |
quadraticSoftMaxDuration |
Un limite flessibile che non impone un limite di durata massima, ma che, se violato, comporta un costo per il percorso, quadratico nella durata. Questo costo si aggiunge agli altri costi definiti nel modello, con la stessa unità. Se
|
costPerHourAfterSoftMax |
Costo orario sostenuto se la soglia Il costo deve essere non negativo. |
costPerSquareHourAfterQuadraticSoftMax |
Costo per ora al quadrato sostenuto se viene violata la soglia Il costo aggiuntivo è pari a 0 se la durata è inferiore alla soglia, altrimenti il costo dipende dalla durata come segue: Il costo deve essere non negativo. |
DistanceLimit
Un limite che definisce una distanza massima che può essere percorsa. Può essere rigido o morbido.
Se viene definito un limite flessibile, devono essere definiti sia softMaxMeters che costPerKilometerAboveSoftMax e devono essere non negativi.
| Rappresentazione JSON |
|---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
| Campi | |
|---|---|
maxMeters |
Un limite rigido che limita la distanza a un massimo di maxMeters. Il limite deve essere non negativo. |
softMaxMeters |
Un limite flessibile che non impone un limite di distanza massima, ma che, se violato, comporta un costo che si aggiunge ad altri costi definiti nel modello, con la stessa unità. Se definito, softMaxMeters deve essere inferiore a maxMeters e non negativo. |
costPerKilometerBelowSoftMax |
Costo per chilometro sostenuto, fino a Questo costo non è supportato in |
costPerKilometerAboveSoftMax |
Costo per chilometro sostenuto se la distanza supera il limite di Il costo deve essere non negativo. |
BreakRule
Regole per generare pause per un veicolo (ad es. pause pranzo). Una pausa è un periodo di tempo contiguo durante il quale il veicolo rimane inattivo nella sua posizione attuale e non può eseguire alcuna visita. Un'interruzione può verificarsi:
- Durante il viaggio tra due visite (che include il tempo immediatamente prima o immediatamente dopo una visita, ma non nel mezzo di una visita), nel qual caso estende il tempo di transito corrispondente tra le visite.
- o prima dell'ora di inizio del veicolo (il veicolo non può partire nel mezzo di una pausa), nel qual caso non influisce sull'ora di inizio del veicolo.
- o dopo la fine del veicolo (lo stesso vale per l'ora di fine del veicolo).
| Rappresentazione JSON |
|---|
{ "breakRequests": [ { object ( |
| Campi | |
|---|---|
breakRequests[] |
Sequenza di interruzioni. Consulta il messaggio |
frequencyConstraints[] |
Potrebbero essere applicati diversi |
BreakRequest
La sequenza delle pause (ovvero il loro numero e ordine) che si applicano a ogni veicolo deve essere nota in anticipo. I BreakRequest ripetuti definiscono la sequenza, nell'ordine in cui devono verificarsi. Le loro finestre temporali (earliestStartTime/latestStartTime) possono sovrapporsi, ma devono essere compatibili con l'ordine (questo viene verificato).
| Rappresentazione JSON |
|---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
| Campi | |
|---|---|
earliestStartTime |
Obbligatorio. Limite inferiore (incluso) all'inizio della pausa. Utilizza RFC 3339, in cui l'output generato è sempre con normalizzazione Z e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
latestStartTime |
Obbligatorio. Limite superiore (incluso) per l'inizio della pausa. Utilizza RFC 3339, in cui l'output generato è sempre con normalizzazione Z e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
minDuration |
Obbligatorio. Durata minima dell'interruzione. Deve essere positivo. |
FrequencyConstraint
È possibile limitare ulteriormente la frequenza e la durata delle pause specificate sopra applicando una frequenza minima delle pause, ad esempio "Deve essere prevista una pausa di almeno 1 ora ogni 12 ore". Supponendo che questo possa essere interpretato come "All'interno di qualsiasi finestra temporale scorrevole di 12 ore, deve esserci almeno una pausa di almeno un'ora", l'esempio si tradurrebbe nel seguente FrequencyConstraint:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
La tempistica e la durata delle pause nella soluzione rispetteranno tutti questi vincoli, oltre alle finestre temporali e alle durate minime già specificate in BreakRequest.
In pratica, un FrequencyConstraint può essere applicato a interruzioni non consecutive. Ad esempio, la seguente pianificazione rispetta l'esempio "1 ora ogni 12 ore":
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
| Rappresentazione JSON |
|---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
| Campi | |
|---|---|
minBreakDuration |
Obbligatorio. Durata minima dell'interruzione per questo vincolo. Non negativo. Visualizza la descrizione di |
maxInterBreakDuration |
Obbligatorio. Durata massima consentita di qualsiasi intervallo di tempo nel percorso che non includa, almeno parzialmente, una pausa di |
Obiettivo
Gli obiettivi sostituiscono completamente il modello di costo e, pertanto, non sono compatibili con i costi preesistenti. Ogni obiettivo corrisponde a un numero di costi predefiniti, ad esempio per veicoli, spedizioni o attributi di transizione.
Sperimentale: per ulteriori dettagli, consulta la pagina https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request.
| Rappresentazione JSON |
|---|
{
"type": enum ( |
| Campi | |
|---|---|
type |
Il tipo di obiettivo. |
weight |
Quanto deve contare questo obiettivo rispetto agli altri. Può essere qualsiasi numero non negativo; la somma dei pesi non deve essere necessariamente pari a 1. Il valore predefinito dei pesi è 1,0. |
Tipo
Il tipo di obiettivo che verrà mappato a un insieme di costi.
| Enum | |
|---|---|
DEFAULT |
Verrà utilizzato un insieme di costi predefinito per garantire una soluzione ragionevole. Nota: questo obiettivo può essere utilizzato da solo, ma verrà sempre aggiunto con un peso di 1,0, come base di riferimento, agli obiettivi specificati dall'utente, se non è già presente. |
MIN_DISTANCE |
"MIN". Ridurre al minimo la distanza totale percorsa. |
MIN_WORKING_TIME |
Ridurre al minimo il tempo di lavoro totale, sommato per tutti i veicoli. |
MIN_TRAVEL_TIME |
Come sopra, ma concentrandosi solo sul tempo di percorrenza. |
MIN_NUM_VEHICLES |
Ridurre al minimo il numero di veicoli utilizzati. |
DurationDistanceMatrix
Specifica una matrice di durata e Distance Matrix dalle località di partenza delle visite e dei veicoli alle località di arrivo delle visite e dei veicoli.
| Rappresentazione JSON |
|---|
{
"rows": [
{
object ( |
| Campi | |
|---|---|
rows[] |
Specifica le righe della matrice di durata e distanza. Deve avere lo stesso numero di elementi di |
vehicleStartTag |
Tag che definisce i veicoli a cui si applica questa Distance Matrix di durata e distanza. Se non viene specificato, si applica a tutti i veicoli e può esistere una sola matrice. Ogni partenza del veicolo deve corrispondere esattamente a una matrice, ovvero esattamente uno dei campi Tutte le matrici devono avere un |
Riga
Specifica una riga della matrice di durata e distanza.
| Rappresentazione JSON |
|---|
{ "durations": [ string ], "meters": [ number ] } |
| Campi | |
|---|---|
durations[] |
Valori di durata per una determinata riga. Deve avere lo stesso numero di elementi di |
meters[] |
Valori di distanza per una determinata riga. Se nessun costo o vincolo fa riferimento alle distanze nel modello, questo campo può essere lasciato vuoto; in caso contrario, deve contenere lo stesso numero di elementi di |
TransitionAttributes
Specifica gli attributi delle transizioni tra due visite consecutive su un percorso. A una stessa transizione possono essere applicati più TransitionAttributes: in questo caso, tutti i costi aggiuntivi vengono sommati e viene applicato il vincolo o il limite più restrittivo (seguendo la semantica naturale "AND").
| Rappresentazione JSON |
|---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
| Campi | |
|---|---|
srcTag |
Tag che definiscono l'insieme di transizioni (src->dst) a cui si applicano questi attributi. Una visita di origine o una partenza del veicolo corrisponde se e solo se il relativo |
excludedSrcTag |
Leggi i |
dstTag |
Una visita alla destinazione o una fine del veicolo corrisponde se il relativo |
excludedDstTag |
Leggi i |
cost |
Specifica un costo per l'esecuzione di questa transizione. Deve essere nella stessa unità di tutti gli altri costi del modello e non deve essere negativo. Viene applicata in aggiunta a tutti gli altri costi esistenti. |
costPerKilometer |
Specifica un costo per chilometro applicato alla distanza percorsa durante l'esecuzione di questa transizione. Si somma a qualsiasi |
distanceLimit |
Specifica un limite per la distanza percorsa durante l'esecuzione di questa transizione. A partire da giugno 2021, sono supportati solo i limiti flessibili. |
delay |
Specifica un ritardo che si verifica durante l'esecuzione di questa transizione. Questo ritardo si verifica sempre dopo il completamento della visita di origine e prima dell'inizio della visita di destinazione. |
ShipmentTypeIncompatibility
Specifica le incompatibilità tra le spedizioni in base al relativo shipmentType. La presenza di spedizioni incompatibili sullo stesso percorso è limitata in base alla modalità di incompatibilità.
| Rappresentazione JSON |
|---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
| Campi | |
|---|---|
types[] |
Elenco dei tipi non compatibili. Due spedizioni con |
incompatibilityMode |
Modalità applicata all'incompatibilità. |
IncompatibilityMode
Modalità che definiscono il modo in cui l'aspetto delle spedizioni incompatibili è limitato sullo stesso percorso.
| Enum | |
|---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Modalità di incompatibilità non specificata. Questo valore non deve mai essere utilizzato. |
NOT_PERFORMED_BY_SAME_VEHICLE |
In questa modalità, due spedizioni con tipi incompatibili non possono mai condividere lo stesso veicolo. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
In questa modalità, due spedizioni con tipi incompatibili non possono mai trovarsi sullo stesso veicolo contemporaneamente:
|
ShipmentTypeRequirement
Specifica i requisiti tra le spedizioni in base al relativo shipmentType. Le specifiche del requisito sono definite dalla modalità del requisito.
| Rappresentazione JSON |
|---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
| Campi | |
|---|---|
requiredShipmentTypeAlternatives[] |
Elenco dei tipi di spedizione alternativi richiesti da |
dependentShipmentTypes[] |
Tutte le spedizioni con un tipo nel campo NOTA: non sono consentite catene di requisiti in cui un |
requirementMode |
Modalità applicata al requisito. |
RequirementMode
Modalità che definiscono l'aspetto delle spedizioni dipendenti su un percorso.
| Enum | |
|---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Modalità di requisito non specificata. Questo valore non deve mai essere utilizzato. |
PERFORMED_BY_SAME_VEHICLE |
In questa modalità, tutte le spedizioni "dipendenti" devono condividere lo stesso veicolo di almeno una delle spedizioni "richieste". |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
Con la modalità Un ritiro della spedizione "dipendente" deve quindi avere:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Come prima, con la differenza che le spedizioni "dipendenti" devono avere una spedizione "obbligatoria" sul veicolo al momento della consegna. |
PrecedenceRule
Una regola di precedenza tra due eventi (ogni evento è il ritiro o la consegna di una spedizione): il "secondo" evento deve iniziare almeno offsetDuration dopo l'inizio del "primo".
Più precedenze possono fare riferimento agli stessi eventi (o a eventi correlati), ad esempio "il ritiro di B avviene dopo la consegna di A" e "il ritiro di C avviene dopo il ritiro di B".
Inoltre, le precedenze si applicano solo quando vengono eseguite entrambe le spedizioni, altrimenti vengono ignorate.
| Rappresentazione JSON |
|---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
| Campi | |
|---|---|
firstIsDelivery |
Indica se il "primo" evento è una consegna. |
secondIsDelivery |
Indica se il "secondo" evento è una consegna. |
offsetDuration |
L'offset tra il "primo" e il "secondo" evento. Può essere negativo. |
firstIndex |
Indice della spedizione del "primo" evento. Questo campo deve essere specificato. |
secondIndex |
Indice della spedizione del "secondo" evento. Questo campo deve essere specificato. |