ShipmentModel

Un modello di spedizione contiene un insieme di spedizioni che devono essere eseguite da un insieme di veicoli, riducendo al minimo il costo complessivo, ovvero la somma di:

  • il costo del percorso dei veicoli (somma del costo per tempo totale, del costo per tempo di percorrenza e del costo fisso di tutti i veicoli).
  • penali per la spedizione non eseguite.
  • il costo della durata globale delle spedizioni.
Rappresentazione JSON
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
Campi
shipments[]

object (Shipment)

Insieme di spedizioni che devono essere eseguite nel modello.

vehicles[]

object (Vehicle)

Insieme di veicoli che possono essere utilizzati per effettuare visite.

globalStartTime

string (Timestamp format)

Ora di inizio e di fine globali del modello: nessun orario al di fuori di questo intervallo può essere considerato valido.

L'intervallo di tempo del modello deve essere inferiore a un anno, vale a dire che globalEndTime e globalStartTime non devono superare i 31536000 secondi l'uno dall'altro.

Quando utilizzi i campi cost_per_*hour, è preferibile impostare questa finestra su un intervallo più ridotto per aumentare le prestazioni (ad esempio, se modelli un solo giorno, devi impostare i limiti di tempo globali su quel giorno). Se il criterio non viene configurato, per impostazione predefinita viene utilizzato il valore 00:00:00 UTC, 1° gennaio 1970 (ad es. secondi: 0, nano: 0).

Un timestamp in formato "Zulu" RFC3339 UTC, con risoluzione in nanosecondi e fino a nove cifre frazionarie. Esempi: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

globalEndTime

string (Timestamp format)

Se il criterio non viene configurato, per impostazione predefinita viene utilizzato il valore 00:00:00 UTC, 1° gennaio 1971 (ad es. secondi: 31536000, nano: 0).

Un timestamp in formato "Zulu" RFC3339 UTC, con risoluzione in nanosecondi e fino a nove cifre frazionarie. Esempi: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

globalDurationCostPerHour

number

La "durata globale" del piano generale è la differenza tra la prima ora di inizio effettiva e l'ultima ora di fine effettiva di tutti i veicoli. Gli utenti possono assegnare un costo orario a quella quantità per provare a ottimizzare per il primo completamento del job, ad esempio. Questo costo deve essere nella stessa unità di Shipment.penalty_cost.

durationDistanceMatrices[]

object (DurationDistanceMatrix)

Specifica le matrici di durata e distanza utilizzate nel modello. Se questo campo è vuoto, verranno utilizzati Google Maps o le distanze geodetiche, a seconda del valore del campo useGeodesicDistances. Se non è vuoto, useGeodesicDistances non può essere true e né durationDistanceMatrixSrcTagsdurationDistanceMatrixDstTags possono essere vuoti.

Esempi di utilizzo:

  • Esistono due posizioni: locA e locB.
  • 1 veicolo che inizia il percorso in locA e lo termina in locA.
  • 1 richiesta di visita di ritiro presso locB.
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • Esistono tre posizioni: locA, locB e locC.
  • 1 veicolo che inizia il percorso in locA e lo termina in locB, utilizzando la matrice "rapido".
  • 1 veicolo che inizia il percorso in locB e lo termina in locB, utilizzando la matrice "lenta".
  • 1 veicolo che inizia il percorso in locB e lo termina in locB, utilizzando la matrice "fast".
  • 1 richiesta di visita di ritiro presso locC.
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

Tag che definiscono le origini delle matrici di durata e distanza; durationDistanceMatrices(i).rows(j) definisce le durate e le distanze dalle visite con il tag durationDistanceMatrixSrcTags(j) ad altre visite nella matrice i.

I tag corrispondono a VisitRequest.tags o Vehicle.start_tags. Un determinato VisitRequest o Vehicle deve corrispondere esattamente a un tag in questo campo. Tieni presente che i tag di origine, destinazione e matrice di Vehicle possono essere uguali; allo stesso modo, i tag source e destination di VisitRequest possono coincidere. Tutti i tag devono essere diversi e non possono essere stringhe vuote. Se questo campo non è vuoto, durationDistanceMatrices non deve essere vuoto.

durationDistanceMatrixDstTags[]

string

Tag che definiscono le destinazioni delle matrici di durata e distanza; durationDistanceMatrices(i).rows(j).durations(k) (resp. durationDistanceMatrices(i).rows(j).meters(k)) definisce la durata (ovvero la distanza) del viaggio dalle visite con il tag durationDistanceMatrixSrcTags(j) alle visite con il tag durationDistanceMatrixDstTags(k) nella matrice i.

I tag corrispondono a VisitRequest.tags o Vehicle.start_tags. Un determinato VisitRequest o Vehicle deve corrispondere esattamente a un tag in questo campo. Tieni presente che i tag di origine, destinazione e matrice di Vehicle possono essere uguali; allo stesso modo, i tag source e destination di VisitRequest possono coincidere. Tutti i tag devono essere diversi e non possono essere stringhe vuote. Se questo campo non è vuoto, durationDistanceMatrices non deve essere vuoto.

transitionAttributes[]

object (TransitionAttributes)

Attributi di transizione aggiunti al modello.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

Insiemi di billing_type incompatibili (vedi ShipmentTypeIncompatibility).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

Insieme di shipmentType requisiti (vedi ShipmentTypeRequirement).

precedenceRules[]

object (PrecedenceRule)

Set di regole di precedenza che deve essere applicato in modo forzato nel modello.

maxActiveVehicles

integer

Limita il numero massimo di veicoli attivi. Un veicolo è attivo se il relativo percorso esegue almeno una spedizione. Ciò può essere utilizzato per limitare il numero di percorsi nel caso in cui ci siano meno conducenti che veicoli e il parco veicoli è eterogeneo. L'ottimizzazione selezionerà quindi il sottoinsieme migliore di veicoli da utilizzare. Deve essere rigorosamente positiva.

Spedizione

La spedizione di un singolo articolo, da uno dei suoi ritiri a una delle sue consegne. Affinché la spedizione venga considerata come effettuata, un veicolo specifico deve visitare uno dei punti di ritiro (e ridurre di conseguenza le capacità di riserva), per poi visitare uno dei punti di consegna in un secondo momento (e di conseguenza aumentare le capacità di riserva).

Rappresentazione JSON
{
  "displayName": string,
  "pickups": [
    {
      object (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
Campi
displayName

string

Il nome visualizzato della spedizione definito dall'utente. Può contenere fino a 63 caratteri e può utilizzare caratteri UTF-8.

pickups[]

object (VisitRequest)

Insieme di alternative di ritiro associate alla spedizione. Se non specificato, il veicolo deve visitare solo una sede corrispondente alle consegne.

deliveries[]

object (VisitRequest)

Insieme di alternative di consegna associate alla spedizione. Se non specificato, il veicolo deve visitare solo una sede corrispondente ai ritiri.

loadDemands

map (key: string, value: object (Load))

Richieste 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 del carico corrispondente, possibilmente 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 null.

Un oggetto contenente un elenco di "key": value coppie. Esempio: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

allowedVehicleIndices[]

integer

Il gruppo di veicoli che possono effettuare questa spedizione. Se il campo è vuoto, è possibile che venga usato da tutti i veicoli. I veicoli sono forniti in base al relativo indice nell'elenco vehicles di ShipmentModel.

costsPerVehicle[]

number

Specifica il costo sostenuto quando la spedizione viene consegnata da ciascun veicolo. Se specificato, deve avere O:

  • lo stesso numero di elementi di costsPerVehicleIndices. costsPerVehicle[i] corrisponde al veicolo costsPerVehicleIndices[i] del modello.
  • lo stesso numero di elementi dei veicoli nel modello. L'elemento i-esima corrisponde al veicolo n. i del modello.

Questi costi devono essere nella stessa unità di penaltyCost e non devono essere negativi. Lascia vuoto questo campo se non sono previsti costi di questo tipo.

costsPerVehicleIndices[]

integer

Indici dei veicoli a cui si applica costsPerVehicle. Se non è vuoto, deve avere lo stesso numero di elementi di costsPerVehicle. Un indice di veicoli non può essere specificato più di una volta. Se un veicolo viene escluso da costsPerVehicleIndices, il suo costo è pari a zero.

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

Specifica il tempo di deviazione assoluto massimo rispetto al percorso più breve dal ritiro alla consegna. Se specificato, deve essere un numero non negativo e la spedizione deve includere almeno un ritiro e una consegna.

Ad esempio, lascia che sia il tempo più breve per passare dall'alternativa di ritiro selezionata direttamente a quella di consegna selezionata. L'impostazione di pickupToDeliveryAbsoluteDetourLimit applica quindi:

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

Se per la stessa spedizione vengono specificati sia i limiti relativi che assoluti, viene utilizzato il limite più vincolante per ogni coppia possibile di ritiro/consegna. A partire dal 2017/10, le deviazioni sono supportate solo quando la durata del viaggio non dipende dai veicoli.

Una durata in secondi con un massimo di nove cifre frazionarie, che termina con "s". Esempio: "3.5s".

pickupToDeliveryTimeLimit

string (Duration format)

Specifica la durata massima dall'inizio del ritiro all'inizio della consegna di una spedizione. Se specificato, deve essere un numero non negativo e la spedizione deve includere almeno un ritiro e una consegna. Ciò non dipende dalle alternative selezionate per il ritiro e la consegna, né dalla velocità del veicolo. Questo può essere specificato insieme ai vincoli massimi di deviazione: la soluzione rispetterà entrambe le specifiche.

Una durata in secondi con un massimo di nove cifre frazionarie, che termina con "s". Esempio: "3.5s".

shipmentType

string

Stringa non vuota che specifica un "type" per questa spedizione. Questa funzionalità può essere utilizzata per definire incompatibilità o requisiti tra shipment_types (vedi shipmentTypeIncompatibilities e shipmentTypeRequirements in ShipmentModel).

Differisce dal valore visitTypes specificato per una singola visita: tutti i prelievi/consegne appartenenti alla stessa spedizione condividono lo stesso shipmentType.

label

string

Specifica un'etichetta per questa spedizione. Questa etichetta viene riportata nella risposta in shipmentLabel del ShipmentRoute.Visit corrispondente.

ignore

boolean

Se il valore è true, salta questa spedizione, ma non applicare un penaltyCost.

Se ignori una spedizione, verrà restituito un errore di convalida quando nel modello sono presenti shipmentTypeRequirements.

È consentito ignorare una spedizione eseguita in injectedFirstSolutionRoutes o injectedSolutionConstraint; il risolutore rimuove le relative visite di ritiro/consegna dal percorso in esecuzione. Verranno ignorati anche gli elementi precedenceRules che fanno riferimento a spedizioni ignorate.

penaltyCost

number

Se la spedizione non viene completata, questa sanzione 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 sanzione non è specificata, è considerata infinita, ossia la spedizione deve essere completata.

pickupToDeliveryRelativeDetourLimit

number

Specifica il tempo di deviazione relativo massimo rispetto al percorso più breve dal ritiro alla consegna. Se specificato, deve essere un numero non negativo e la spedizione deve includere almeno un ritiro e una consegna.

Ad esempio, lascia che sia il tempo più breve per passare dall'alternativa di ritiro selezionata direttamente a quella di consegna selezionata. L'impostazione di pickupToDeliveryRelativeDetourLimit applica quindi:

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

Se per la stessa spedizione vengono specificati sia i limiti relativi che assoluti, viene utilizzato il limite più vincolante per ogni coppia possibile di ritiro/consegna. A partire dal 2017/10, le deviazioni sono supportate solo quando la durata del viaggio non dipende dai veicoli.

VisitRequest

Richiesta di una visita che può essere effettuata da un veicolo: ha una geolocalizzazione (o due, vedi sotto), gli orari di apertura e chiusura rappresentati da finestre temporali e una durata del servizio (tempo speso dal veicolo una volta arrivato al ritiro o alla consegna delle merci).

Rappresentazione JSON
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string
}
Campi
arrivalLocation

object (LatLng)

La geolocalizzazione alla quale arriva il veicolo quando esegui questo VisitRequest. Se il modello di spedizione ha matrici di durata e distanza, non è necessario specificare arrivalLocation.

arrivalWaypoint

object (Waypoint)

Il waypoint a cui arriva il veicolo quando esegui questo VisitRequest. Se il modello di spedizione ha matrici di durata e distanza, non è necessario specificare arrivalWaypoint.

departureLocation

object (LatLng)

La geolocalizzazione da cui parte il veicolo dopo aver completato questo VisitRequest. Può essere omesso se è uguale a arrivalLocation. Se il modello di spedizione ha matrici di durata e distanza, non è necessario specificare departureLocation.

departureWaypoint

object (Waypoint)

Il waypoint da cui parte il veicolo dopo aver completato questo VisitRequest. Può essere omesso se è uguale a arrivalWaypoint. Se il modello di spedizione ha matrici di durata e distanza, non è necessario specificare departureWaypoint.

tags[]

string

Specifica i tag allegati alla richiesta di visita. Non sono consentite stringhe vuote o duplicate.

timeWindows[]

object (TimeWindow)

Finestre temporali che limitano l'ora di arrivo a una visita. Tieni presente che un veicolo potrebbe partire al di fuori dell'orario di arrivo, ad esempio se l'ora di arrivo e la durata non devono necessariamente rientrare in un intervallo di tempo. Ciò può comportare tempi di attesa se il veicolo arriva prima delle ore TimeWindow.start_time.

L'assenza di TimeWindow indica che il veicolo può effettuare questa visita in qualsiasi momento.

Le finestre temporali devono essere separate, ovvero nessuna finestra temporale deve sovrapporsi o essere adiacente a un'altra e devono essere in ordine crescente.

costPerHourAfterSoftEndTime e softEndTime possono essere impostati solo se è presente un'unica finestra temporale.

duration

string (Duration format)

Durata della visita, ovvero tempo trascorso dal veicolo tra l'arrivo e la partenza (da sommare ai possibili tempi di attesa; vedi timeWindows).

Una durata in secondi con un massimo di nove cifre frazionarie, che termina con "s". Esempio: "3.5s".

cost

number

Costo del servizio per questa richiesta di visita su un percorso di veicoli. Questo metodo può essere utilizzato per pagare costi diversi per ogni ritiro o consegna alternativi di una spedizione. Questo costo deve essere nella stessa unità di Shipment.penalty_cost e non deve essere negativo.

loadDemands

map (key: string, value: object (Load))

Carica le richieste di questa richiesta di visita. Funziona esattamente come il campo Shipment.load_demands, con la differenza che si applica solo a questo VisitRequest anziché all'intero Shipment. Le richieste elencate qui vengono aggiunte a quelle elencate in Shipment.load_demands.

Un oggetto contenente un elenco di "key": value coppie. Esempio: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

visitTypes[]

string

Specifica i tipi di visita. Può essere utilizzato per assegnare a un veicolo il tempo aggiuntivo necessario per completare la visita (vedi Vehicle.extra_visit_duration_for_visit_type).

Un tipo può apparire una sola volta.

label

string

Specifica un'etichetta per questo VisitRequest. Questa etichetta viene segnalata nella risposta come visitLabel nel ShipmentRoute.Visit corrispondente.

LatLng

Un oggetto che rappresenta una coppia latitudine/longitudine. Questo valore è espresso come una coppia di doppi per rappresentare i gradi di latitudine e i gradi di longitudine. Se non diversamente specificato, questo oggetto deve essere conforme allo standard WGS84. I valori devono essere compresi negli intervalli normalizzati.

Rappresentazione JSON
{
  "latitude": number,
  "longitude": number
}
Campi
latitude

number

Latitudine in gradi. Deve essere compreso nell'intervallo [-90,0, +90,0].

longitude

number

Longitudine in gradi. Deve essere compreso nell'intervallo [-180,0, +180,0].

Waypoint

Incapsula un waypoint. I Waypoint contrassegnano i luoghi di arrivo e di partenza di VisitRequests, nonché le posizioni di partenza e di arrivo dei veicoli.

Rappresentazione JSON
{
  "sideOfRoad": boolean,

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
Campi
sideOfRoad

boolean

Campo facoltativo. Indica che la posizione di questo waypoint è preferita in modo che il veicolo si fermi su un determinato lato della strada. Quando imposti questo valore, il percorso attraverserà la località in modo che il veicolo possa fermarsi sul lato della strada verso il quale la posizione è orientata rispetto al centro della strada. Questa opzione non funziona per la modalità di viaggio "WALKING".

Campo di unione location_type. Diversi modi per rappresentare un luogo. location_type può essere solo uno dei seguenti:
location

object (Location)

Un punto specificato utilizzando le coordinate geografiche, inclusa un'intestazione facoltativa.

placeId

string

L'ID luogo del PDI associato al waypoint.

Località

Incapsula una località (un punto geografico e un'intestazione facoltativa).

Rappresentazione JSON
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
Campi
latLng

object (LatLng)

Le coordinate geografiche del waypoint.

heading

integer

L'intestazione della bussola associata alla direzione del flusso del traffico. Questo valore viene utilizzato per specificare il lato della strada da utilizzare per le operazioni di prelievo e di discesa. I valori di intestazione possono essere compresi tra 0 e 360, dove 0 indica la direzione di nord, 90 indica un'intestazione di est e così via.

TimeWindow

Le finestre temporali limitano l'ora di un evento, ad esempio l'ora di arrivo a una visita o l'ora di inizio e di fine di un veicolo.

I limiti di finestra temporale rigida, startTime e endTime, forzano l'applicazione del primo e dell'ultimo orario dell'evento, in modo che startTime <= event_time <= endTime. Il limite inferiore della finestra di tempo soft, softStartTime, esprime una preferenza affinché l'evento si verifichi entro il giorno softStartTime incorrere in un costo proporzionale al tempo che deve trascorrere prima che si verifichi l'evento softStartTime. Il limite superiore della finestra temporale flessibile, softEndTime, esprime una preferenza affinché l'evento si verifichi entro il giorno softEndTime incorrere in un costo proporzionale al periodo di tempo successivo al giorno softEndTime che si verifica l'evento. startTime, endTime, softStartTime e softEndTime devono rientrare nei limiti di tempo globali (vedi ShipmentModel.global_start_time e ShipmentModel.global_end_time) e rispettare:

  0 <= `startTime` <= `softStartTime` <= `endTime` and
  0 <= `startTime` <= `softEndTime` <= `endTime`.
Rappresentazione JSON
{
  "startTime": string,
  "endTime": string,
  "softStartTime": string,
  "softEndTime": string,
  "costPerHourBeforeSoftStartTime": number,
  "costPerHourAfterSoftEndTime": number
}
Campi
startTime

string (Timestamp format)

L'ora di inizio della finestra temporale. Se non specificato, verrà impostato su ShipmentModel.global_start_time.

Un timestamp in formato "Zulu" RFC3339 UTC, con risoluzione in nanosecondi e fino a nove cifre frazionarie. Esempi: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

endTime

string (Timestamp format)

L'ora di fine della finestra temporale. Se non specificato, verrà impostato su ShipmentModel.global_end_time.

Un timestamp in formato "Zulu" RFC3339 UTC, con risoluzione in nanosecondi e fino a nove cifre frazionarie. Esempi: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

softStartTime

string (Timestamp format)

L'ora di avvio graduale della finestra temporale.

Un timestamp in formato "Zulu" RFC3339 UTC, con risoluzione in nanosecondi e fino a nove cifre frazionarie. Esempi: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

softEndTime

string (Timestamp format)

L'ora di fine temporanea della finestra temporale.

Un timestamp in formato "Zulu" RFC3339 UTC, con risoluzione in nanosecondi e fino a nove cifre frazionarie. Esempi: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

costPerHourBeforeSoftStartTime

number

Costo orario aggiunto ad altri costi nel modello se l'evento si verifica prima della data softStartTime, calcolato come segue:

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

Questo costo deve essere positivo e il campo può essere impostato solo se è stato impostato softStartTime.

costPerHourAfterSoftEndTime

number

Un costo orario aggiunto ad altri costi nel modello se l'evento si verifica dopo il giorno softEndTime, calcolato come:

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

Questo costo deve essere positivo e il campo può essere impostato solo se è stato impostato softEndTime.

Veicolo

Crea modelli di un veicolo in un problema di spedizione. Se risolvi un problema di spedizione, per questo veicolo verrà creato un percorso a partire da startLocation e fino al giorno endLocation. Un percorso è una sequenza di visite (vedi ShipmentRoute).

Rappresentazione JSON
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
Campi
displayName

string

Il nome visualizzato del veicolo definito dall'utente. Può contenere fino a 63 caratteri e può utilizzare caratteri UTF-8.

travelMode

enum (TravelMode)

La modalità di viaggio che influisce sulle strade utilizzabili dal veicolo e sulla sua velocità. Vedi anche travelDurationMultiple.

startLocation

object (LatLng)

Posizione geografica da cui parte il veicolo prima di ritirare qualsiasi spedizione. Se non specificato, il veicolo parte al primo ritiro. Se il modello di spedizione ha matrici di durata e distanza, non è necessario specificare startLocation.

startWaypoint

object (Waypoint)

Waypoint che rappresenta una posizione geografica in cui il veicolo parte prima di ritirare qualsiasi spedizione. Se non è specificato né startWaypointstartLocation, il veicolo parte al primo ritiro. Se il modello di spedizione ha matrici di durata e distanza, non è necessario specificare startWaypoint.

endLocation

object (LatLng)

Posizione geografica in cui il veicolo finisce dopo che ha completato l'ultimo periodo (VisitRequest). Se non specificato, il campo ShipmentRoute per il veicolo termina immediatamente quando ne completa gli ultimi VisitRequest. Se il modello di spedizione ha matrici di durata e distanza, non è necessario specificare endLocation.

endWaypoint

object (Waypoint)

Waypoint che rappresenta una posizione geografica in cui il veicolo finisce dopo che ha completato gli ultimi VisitRequest. Se non è specificato né endWaypointendLocation, il ShipmentRoute del veicolo termina immediatamente quando completa l'ultimo VisitRequest. Se il modello di spedizione ha matrici di durata e distanza, non è necessario specificare endWaypoint.

startTags[]

string

Specifica i tag attaccati all'inizio del percorso del veicolo.

Non sono consentite stringhe vuote o duplicate.

endTags[]

string

Specifica i tag attaccati alla fine del percorso del veicolo.

Non sono consentite stringhe vuote o duplicate.

startTimeWindows[]

object (TimeWindow)

Finestre temporali durante le quali il veicolo può partire dal punto di partenza. Devono rientrare nei limiti di tempo globali (vedi i campi ShipmentModel.global_*). Se non specificati, non sono previsti limiti oltre a questi limiti di tempo globali.

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.

costPerHourAfterSoftEndTime e softEndTime possono essere impostati solo se è presente un'unica finestra temporale.

endTimeWindows[]

object (TimeWindow)

Finestre temporali durante le quali il veicolo può arrivare al punto di arrivo. Devono rientrare nei limiti di tempo globali (vedi i campi ShipmentModel.global_*). Se non specificati, non sono previsti limiti oltre a questi limiti di tempo globali.

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.

costPerHourAfterSoftEndTime e softEndTime possono essere impostati solo se è presente un'unica finestra temporale.

unloadingPolicy

enum (UnloadingPolicy)

Norme di scarico applicate al veicolo.

loadLimits

map (key: string, value: object (LoadLimit))

Capacità del veicolo (ad esempio peso, volume, n. di pallet). Le chiavi nella mappa sono gli identificatori del tipo di caricamento, in linea con le chiavi del campo Shipment.load_demands. Se una determinata chiave non è presente in questa mappa, la capacità corrispondente è considerata illimitata.

Un oggetto contenente un elenco di "key": value coppie. Esempio: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

costPerHour

number

Costi del veicolo: tutti i costi vengono sommati e devono essere nella stessa unità di Shipment.penalty_cost.

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 costPerHour anziché solo di costPerTraveledHour può comportare una latenza aggiuntiva.

costPerTraveledHour

number

Costo per ora di percorrenza del percorso del veicolo. Questo costo viene applicato solo al tempo di percorrenza per il percorso (ad es. quello riportato nel mese di ShipmentRoute.transitions) ed esclude il tempo di attesa e quello della visita.

costPerKilometer

number

Costo per chilometro del percorso veicolare. Questo costo viene applicato alla distanza riportata nel ShipmentRoute.transitions e non si applica a nessuna distanza percorsa implicitamente dal arrivalLocation al departureLocation di una singola VisitRequest.

fixedCost

number

Se questo veicolo viene utilizzato per gestire una spedizione, viene applicato un costo fisso.

usedIfRouteIsEmpty

boolean

Questo campo si applica solo ai veicoli quando il loro percorso non prevede spedizioni. Indica se il veicolo deve essere considerato usato o meno in questo caso.

Se il valore è true, il veicolo passa dalla posizione di partenza a quella di arrivo anche se non serve alcuna spedizione e vengono presi in considerazione i costi di tempo e distanza derivanti dalla corsa di inizio --> di fine viaggio.

In caso contrario, non si sposta dal punto di partenza a quello di arrivo e per questo veicolo non sono programmati breakRule o ritardi (da TransitionAttributes). In questo caso, il codice ShipmentRoute del veicolo non contiene alcuna informazione ad eccezione dell'indice e dell'etichetta del veicolo.

routeDurationLimit

object (DurationLimit)

Limite applicato alla durata totale del percorso del veicolo. In un determinato OptimizeToursResponse, la durata del percorso di un veicolo è la differenza tra i suoi vehicleEndTime e vehicleStartTime.

travelDurationLimit

object (DurationLimit)

Limite applicato alla durata del percorso del veicolo. In un determinato OptimizeToursResponse, la durata del percorso del percorso è la somma di tutti i suoi transitions.travel_duration.

routeDistanceLimit

object (DistanceLimit)

Limite applicato alla distanza totale del percorso del veicolo. In un determinato OptimizeToursResponse, la distanza del percorso è la somma di tutti i suoi transitions.travel_distance_meters.

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

Specifica una mappa dalle stringhe visitTypes alle durate. La durata è tempo oltre a VisitRequest.duration da considerare per le visite con il visitTypes specificato. Questa durata extra della visita comporta un aumento dei costi se costPerHour è specificato. Le chiavi (ad es. visitTypes) non possono essere stringhe vuote.

Se una richiesta di visita presenta più tipi, verrà aggiunta una durata per ogni tipo nella mappa.

Un oggetto contenente un elenco di "key": value coppie. Esempio: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

breakRule

object (BreakRule)

Descrive il programma delle pause da applicare su questo veicolo. Se vuoto, non saranno programmate pause per questo veicolo.

label

string

Specifica un'etichetta per questo veicolo. Questa etichetta viene riportata nella risposta come vehicleLabel dell'elemento ShipmentRoute corrispondente.

ignore

boolean

Se il valore è true, usedIfRouteIsEmpty deve essere false e questo veicolo rimarrà inutilizzato.

Se una spedizione viene eseguita da un veicolo ignorato in injectedFirstSolutionRoutes, viene saltata nella prima soluzione, ma può essere eseguita senza costi nella risposta.

Se una spedizione viene eseguita da un veicolo ignorato in injectedSolutionConstraint e l'eventuale ritiro/consegna correlato è vincolato a rimanere sul veicolo (ovvero non è rilassato al livello RELAX_ALL_AFTER_THRESHOLD), l'azione viene saltata nella risposta. Se una spedizione ha un campo allowedVehicleIndices non vuoto e tutti i veicoli consentiti vengono ignorati, l'ordine viene ignorato nella risposta.

travelDurationMultiple

number

Specifica un fattore moltiplicativo che può essere utilizzato per aumentare o diminuire i tempi di percorrenza di questo veicolo. Ad esempio, impostare questo valore su 2,0 significa che il veicolo è più lento e ha tempi di percorrenza doppi rispetto a quelli dei veicoli standard. Questo multiplo non influisce sulla durata delle visite. Influisce sui costi se vengono specificati costPerHour o costPerTraveledHour. Deve essere compreso nell'intervallo [0,001, 1000,0]. Se non viene configurato, il veicolo è standard, e questo multiplo è considerato pari a 1,0.

ATTENZIONE: i tempi di percorrenza saranno arrotondati al secondo più vicino dopo l'applicazione di questo multiplo, ma prima di eseguire operazioni numeriche, pertanto un piccolo multiplo può comportare una perdita di precisione.

Vedi anche extraVisitDurationForVisitType di seguito.

TravelMode

Modalità di viaggio utilizzabili dai veicoli.

Dovrebbero essere un sottoinsieme delle modalità di viaggio preferite dell'API Routes di Google Maps Platform. Consulta: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.

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 a piedi.

UnloadingPolicy

Norme sulla modalità di scarico di un veicolo. Si applica solo alle spedizioni con servizio di ritiro e consegna.

Altre spedizioni possono essere effettuate senza costi aggiuntivi lungo il percorso, indipendentemente da unloadingPolicy.

Enum
UNLOADING_POLICY_UNSPECIFIED Norme di scaricamento non specificate; le consegne devono avvenire solo 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 al massimo 3500 kg". Leggi i loadLimits.

Rappresentazione JSON
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string
}
Campi
softMaxLoad

string (int64 format)

Un limite flessibile del carico. Leggi i costPerUnitAboveSoftMax.

costPerUnitAboveSoftMax

number

Se il carico supera softMaxLoad lungo il percorso di questo veicolo, si applica la seguente penalità (solo una volta per veicolo): (carico - softMaxLoad) * costPerUnitAboveSoftMax. Tutti i costi vengono sommati e devono essere nella stessa unità di Shipment.penalty_cost.

startLoadInterval

object (Interval)

L'intervallo di carico accettabile del veicolo all'inizio del percorso.

endLoadInterval

object (Interval)

L'intervallo di carico accettabile del veicolo alla fine del percorso.

maxLoad

string (int64 format)

La quantità massima accettabile di carico.

Intervallo

Intervallo degli importi di carico accettabili.

Rappresentazione JSON
{
  "min": string,
  "max": string
}
Campi
min

string (int64 format)

Un carico minimo accettabile. Deve essere ≥ 0. Se sono specificati entrambi, il valore del campo min deve essere ≤ max.

max

string (int64 format)

Un carico massimo accettabile. Deve essere ≥ 0. Se non specificato, il carico massimo non viene limitato da questo messaggio. Se sono specificati entrambi, il valore del campo min deve essere ≤ max.

DurationLimit

Un limite che definisce la durata massima del percorso di un veicolo. Può essere duro o morbido.

Quando viene definito un campo di limite flessibile, sia la soglia minima che il costo associato devono essere definiti insieme.

Rappresentazione JSON
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
Campi
maxDuration

string (Duration format)

Un limite fisso che limita la durata al massimo a maxDuration.

Una durata in secondi con un massimo di nove cifre frazionarie, che termina con "s". Esempio: "3.5s".

softMaxDuration

string (Duration format)

Un limite flessibile non applica un limite di durata massima, ma se viene violato, la route comporta un costo. Questo costo viene sommato agli altri costi definiti nel modello, con la stessa unità.

Se definito, softMaxDuration non deve essere un numero negativo. Se è definito anche maxDuration, softMaxDuration deve essere inferiore a maxDuration.

Una durata in secondi con un massimo di nove cifre frazionarie, che termina con "s". Esempio: "3.5s".

quadraticSoftMaxDuration

string (Duration format)

Un limite flessibile non applica un limite di durata massima, ma se viene violato, la route è soggetta a un costo quadratico nella durata. Questo costo viene sommato agli altri costi definiti nel modello, con la stessa unità.

Se definito, quadraticSoftMaxDuration non deve essere un numero negativo. Se è definito anche maxDuration, quadraticSoftMaxDuration deve essere inferiore a maxDuration e la differenza non deve essere superiore a un giorno:

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

Una durata in secondi con un massimo di nove cifre frazionarie, che termina con "s". Esempio: "3.5s".

costPerHourAfterSoftMax

number

Costo per ora sostenuto in caso di violazione della soglia di softMaxDuration. Il costo aggiuntivo è pari a 0 se la durata è inferiore alla soglia, altrimenti dipende dalla durata come segue:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

Il costo deve essere un numero non negativo.

costPerSquareHourAfterQuadraticSoftMax

number

Costo per ora quadrata sostenuto in caso di violazione della soglia di quadraticSoftMaxDuration.

Il costo aggiuntivo è pari a 0 se la durata è inferiore alla soglia, altrimenti dipende dalla durata come segue:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

Il costo deve essere un numero non negativo.

DistanceLimit

Un limite che definisce la distanza massima che è possibile percorrere. Può essere duro o morbido.

Se viene definito un limite flessibile, è necessario definire sia softMaxMeters che costPerKilometerAboveSoftMax e che non siano negativi.

Rappresentazione JSON
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerAboveSoftMax": number
}
Campi
maxMeters

string (int64 format)

Un limite fisso che limita la distanza a un massimo di maxMeters. Il limite deve essere un numero non negativo.

softMaxMeters

string (int64 format)

Un limite flessibile non applica un limite di distanza massima, ma se la violazione comporta un costo che somma gli altri costi definiti nel modello, con la stessa unità.

Se definito softMaxMeters, deve essere inferiore a maxMeters e non deve essere un numero negativo.

costPerKilometerAboveSoftMax

number

Costo per chilometro sostenuto se la distanza è superiore al limite di softMaxMeters. Il costo aggiuntivo è pari a 0 se la distanza è inferiore al limite, altrimenti la formula utilizzata per calcolare il costo è la seguente:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

Il costo deve essere un numero non negativo.

BreakRule

Regole per creare 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ò effettuare alcuna visita. Può verificarsi un'interruzione:

  • durante il viaggio tra due visite (che include il tempo immediatamente prima o subito dopo una visita, ma non nel corso di una visita), nel qual caso estende il tempo di transito corrispondente tra le visite,
  • o prima dell'avvio del veicolo (il veicolo potrebbe non avviarsi nel mezzo di una pausa), nel qual caso non influisce sull'orario di avvio del veicolo.
  • o dopo la fine del veicolo (lo stesso vale per l'ora di fine).
Rappresentazione JSON
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
Campi
breakRequests[]

object (BreakRequest)

Sequenza di interruzioni. Vedi il messaggio BreakRequest.

frequencyConstraints[]

object (FrequencyConstraint)

Potrebbero essere applicabili diversi FrequencyConstraint. Devono essere tutte soddisfatte dai BreakRequest di questo BreakRule. Leggi i FrequencyConstraint.

BreakRequest

La sequenza delle interruzioni (ovvero il loro numero e l'ordine) applicabile a ciascun veicolo deve essere nota in anticipo. I BreakRequest ripetuti definiscono questa sequenza nell'ordine in cui devono verificarsi. Le relative finestre temporali (earliestStartTime / latestStartTime) potrebbero sovrapporsi, ma devono essere compatibili con l'ordine (questa opzione è selezionata).

Rappresentazione JSON
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
Campi
earliestStartTime

string (Timestamp format)

obbligatorio. Limite inferiore (incluso) all'inizio dell'interruzione.

Un timestamp in formato "Zulu" RFC3339 UTC, con risoluzione in nanosecondi e fino a nove cifre frazionarie. Esempi: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

latestStartTime

string (Timestamp format)

obbligatorio. Limite superiore (incluso) all'inizio dell'interruzione.

Un timestamp in formato "Zulu" RFC3339 UTC, con risoluzione in nanosecondi e fino a nove cifre frazionarie. Esempi: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

minDuration

string (Duration format)

obbligatorio. Durata minima dell'interruzione. Deve essere positivo.

Una durata in secondi con un massimo di nove cifre frazionarie, che termina con "s". Esempio: "3.5s".

FrequencyConstraint

Si può limitare ulteriormente la frequenza e la durata delle interruzioni specificate sopra applicando una frequenza minima delle interruzioni, ad esempio "Deve esserci una pausa di almeno 1 ora ogni 12 ore". Supponendo che questo possa essere interpretato come "In qualsiasi finestra temporale scorrevole di 12 ore, deve esserci almeno un'interruzione di almeno un'ora", l'esempio si traduce nel seguente FrequencyConstraint:

{
   minBreakDuration { seconds: 3600 }         # 1 hour.
   maxInterBreakDuration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

La tempistica e la durata delle interruzioni nella soluzione rispetteranno tutti questi vincoli, oltre alle finestre temporali e alle durate minime già specificate in BreakRequest.

In pratica, un'FrequencyConstraint potrebbe essere applicata alle interruzioni non consecutive. Ad esempio, la tabella seguente rispetta l'esempio "1 h ogni 12 h":

  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

string (Duration format)

obbligatorio. Durata minima dell'interruzione per questo vincolo. Non negativo. Vedi la descrizione di FrequencyConstraint.

Una durata in secondi con un massimo di nove cifre frazionarie, che termina con "s". Esempio: "3.5s".

maxInterBreakDuration

string (Duration format)

obbligatorio. Intervallo massimo consentito di qualsiasi intervallo di tempo nel percorso che non include almeno un'interruzione parziale di duration >= minBreakDuration. Deve essere positivo.

Una durata in secondi con un massimo di nove cifre frazionarie, che termina con "s". Esempio: "3.5s".

DurationDistanceMatrix

Specifica una matrice di durata e distanza dalle località di partenza della visita e dei veicoli da visitare e dai luoghi di arrivo dei veicoli.

Rappresentazione JSON
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
Campi
rows[]

object (Row)

Specifica le righe della matrice di durata e distanza. Deve avere un numero di elementi pari a ShipmentModel.duration_distance_matrix_src_tags.

vehicleStartTag

string

Tag che definisce i veicoli a cui si applica la durata e la matrice della distanza. Se vuoto, si applica a tutti i veicoli e può essere presente una sola matrice.

L'inizio di ogni veicolo deve corrispondere esattamente a una matrice, ovvero esattamente uno dei campi startTags deve corrispondere al valore vehicleStartTag di una matrice (e solo di quella matrice).

Tutte le matrici devono avere un valore vehicleStartTag diverso.

Row

Specifica una riga della matrice di durata e distanza.

Rappresentazione JSON
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
Campi
durations[]

string (Duration format)

Valori della durata di una determinata riga. Deve avere un numero di elementi pari a ShipmentModel.duration_distance_matrix_dst_tags.

Una durata in secondi con un massimo di nove cifre frazionarie, che termina con "s". Esempio: "3.5s".

meters[]

number

Valori di distanza per una determinata riga. Se nessun costo o vincolo si riferisce alle distanze nel modello, è possibile lasciare vuoto questo campo, altrimenti deve avere un numero di elementi pari a durations.

TransitionAttributes

Specifica gli attributi delle transizioni tra due visite consecutive di un percorso. Diversi TransitionAttributes possono essere applicati alla stessa transizione: in questo caso, tutti i costi aggiuntivi vengono sommati e viene applicato il vincolo o il limite più rigido (seguendo la semantica "AND" naturale).

Rappresentazione JSON
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
Campi
srcTag

string

Tag che definiscono l'insieme di transizioni (src->dst) a cui si applicano questi attributi.

Una visita di origine o un avvio del veicolo corrisponde se il relativo VisitRequest.tags o Vehicle.start_tags contiene srcTag o non contiene excludedSrcTag (a seconda di quale di questi due campi non è vuoto).

excludedSrcTag

string

Leggi i srcTag. I campi srcTag e excludedSrcTag non devono essere vuoti.

dstTag

string

Una visita a destinazione o la fine di un veicolo corrisponde se il relativo VisitRequest.tags o Vehicle.end_tags contiene dstTag o non contiene excludedDstTag (a seconda di quale di questi due campi non è vuoto).

excludedDstTag

string

Leggi i dstTag. I campi dstTag e excludedDstTag non devono essere vuoti.

cost

number

Specifica un costo per l'esecuzione di questa transizione. Si tratta della stessa unità di tutti gli altri costi nel modello e non deve essere negativo. Viene applicato in aggiunta a tutti gli altri costi esistenti.

costPerKilometer

number

Specifica un costo per chilometro applicato alla distanza percorsa durante l'esecuzione di questa transizione. Viene sommato il valore Vehicle.cost_per_kilometer specificato sui veicoli.

distanceLimit

object (DistanceLimit)

Specifica un limite alla distanza percorsa durante l'esecuzione di questa transizione.

A partire dal 6/2021, sono supportati solo i limiti flessibili.

delay

string (Duration format)

Specifica un ritardo riscontrato durante l'esecuzione di questa transizione.

Questo ritardo si verifica sempre dopo il termine della visita di origine e prima di iniziare la visita alla destinazione.

Una durata in secondi con un massimo di nove cifre frazionarie, che termina con "s". Esempio: "3.5s".

ShipmentTypeIncompatibility

Specifica le incompatibilità tra le spedizioni in base al loro tipo di spedizione. L'aspetto di spedizioni incompatibili sullo stesso percorso è limitato in base alla modalità di incompatibilità.

Rappresentazione JSON
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
Campi
types[]

string

Elenco dei tipi non compatibili. Due spedizioni con shipment_types diversi tra quelli elencati sono "incompatibili".

incompatibilityMode

enum (IncompatibilityMode)

Modalità applicata all'incompatibilità.

IncompatibilityMode

Modalità che definiscono in che modo l'aspetto di 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

Per due spedizioni con tipi incompatibili con la modalità di incompatibilità NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY:

  • Se entrambi si basano solo sul ritiro (senza consegne) o solo su consegne (senza ritiri), non possono condividere lo stesso veicolo.
  • Se una delle spedizioni prevede una consegna e l'altra un ritiro, le due spedizioni possono condividere lo stesso veicolo se la spedizione precedente viene consegnata prima del ritiro della seconda.

ShipmentTypeRequirement

Consente di specificare i requisiti tra le spedizioni in base al loro tipo di spedizione. Le specifiche del requisito sono definite dalla modalità dei requisiti.

Rappresentazione JSON
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
Campi
requiredShipmentTypeAlternatives[]

string

Elenco di tipi di spedizione alternativi richiesti da dependentShipmentTypes.

dependentShipmentTypes[]

string

Per tutte le spedizioni di tipo nel campo dependentShipmentTypes è necessario visitare almeno una spedizione di tipo requiredShipmentTypeAlternatives sullo stesso percorso.

NOTA: non sono consentite catene di requisiti in modo che un shipmentType dipenda da se stesso.

requirementMode

enum (RequirementMode)

Modalità applicata al requisito.

RequirementMode

Modalità che definiscono l'aspetto delle spedizioni dipendenti su un percorso.

Enum
REQUIREMENT_MODE_UNSPECIFIED Modalità 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 "obbligatorie".
IN_SAME_VEHICLE_AT_PICKUP_TIME

Con la modalità IN_SAME_VEHICLE_AT_PICKUP_TIME, tutte le spedizioni "dipendenti" devono avere almeno una spedizione "obbligatoria" sul veicolo al momento del ritiro.

Pertanto, un ritiro con spedizione "dipendente" deve avere:

  • Una spedizione "obbligatoria" con solo la consegna consegnata lungo il percorso dopo oppure
  • Una spedizione "obbligatoria" ritirata lungo il percorso che lo precede e, se la spedizione "obbligatoria" ha una consegna, questa consegna deve essere effettuata dopo il ritiro della spedizione "dipendente".
IN_SAME_VEHICLE_AT_DELIVERY_TIME Come in precedenza, ad eccezione del fatto 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 corrisponde al ritiro o alla consegna di una spedizione): il "secondo" evento deve iniziare almeno offsetDuration dopo l'inizio del "primo" evento.

Diverse precedenza possono fare riferimento agli stessi eventi (o 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 precedenza si applicano solo quando vengono effettuate entrambe le spedizioni e vengono altrimenti ignorate.

Rappresentazione JSON
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
Campi
firstIsDelivery

boolean

Indica se il "primo" evento è una pubblicazione.

secondIsDelivery

boolean

Indica se il "secondo" evento è una pubblicazione.

offsetDuration

string (Duration format)

L'offset tra il "primo" e il "secondo" evento. Può essere negativa.

Una durata in secondi con un massimo di nove cifre frazionarie, che termina con "s". Esempio: "3.5s".

firstIndex

integer

Indice di spedizione del "primo" evento. È necessario specificare questo campo.

secondIndex

integer

Indice di spedizione del "secondo" evento. È necessario specificare questo campo.