ShipmentModel

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

  • Il costo di transito dei veicoli (somma del costo per tempo totale, costo per tempo di percorrenza e costo fisso su tutti i veicoli).
  • le penalità di spedizione per mancata esecuzione.
  • 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 effettuate 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, ad esempio globalEndTime e globalStartTime devono rientrare in 31536000 secondi l'uno dall'altro.

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

Un timestamp nel formato RFC3339 UTC "Zulu" 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 non viene configurato, per impostazione predefinita viene utilizzato il valore 00:00:00 UTC, 1 gennaio 1971 (secondi: 31536000, nano: 0).

Un timestamp nel formato RFC3339 UTC "Zulu" 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, ad esempio, a eseguire l'ottimizzazione prima del completamento del lavoro. 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, verrà utilizzato 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 località: locA e locB.
  • 1 veicolo che inizia il percorso da locA e 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 località: locA, locB e locC.
  • 1 veicolo che inizia il suo percorso in locA e termina in locB, utilizzando la matrice "fast".
  • 1 veicolo che inizia il suo percorso in locB e lo termina in locB, utilizzando la matrice "slow".
  • 1 veicolo che inizia il suo 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

i tag che definiscono le origini delle matrici di durata e distanza. durationDistanceMatrices(i).rows(j) definisce le durate e le distanze tra le visite con il tag durationDistanceMatrixSrcTags(j) e le 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 un Vehicle potrebbero essere gli stessi; Allo stesso modo, i tag di origine e quelli di destinazione di un VisitRequest possono essere uguali. Tutti i tag devono essere diversi e non possono essere stringhe vuote. Se questo campo non è vuoto, il campo durationDistanceMatrices non deve essere vuoto.

durationDistanceMatrixDstTags[]

string

i tag che definiscono le destinazioni delle matrici di durata e distanza. durationDistanceMatrices(i).rows(j).durations(k) (risp. durationDistanceMatrices(i).rows(j).meters(k)) definisce la durata (ovvero la distanza) del percorso dalle visite con tag durationDistanceMatrixSrcTags(j) alle visite con 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 un Vehicle potrebbero essere gli stessi; Allo stesso modo, i tag di origine e quelli di destinazione di un VisitRequest possono essere uguali. Tutti i tag devono essere diversi e non possono essere stringhe vuote. Se questo campo non è vuoto, il campo durationDistanceMatrices non deve essere vuoto.

transitionAttributes[]

object (TransitionAttributes)

Attributi di transizione aggiunti al modello.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

Insiemi di spedizioni_type incompatibili (vedi ShipmentTypeIncompatibility).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

Insieme di requisiti per shipmentType (vedi ShipmentTypeRequirement).

precedenceRules[]

object (PrecedenceRule)

Insieme di regole di precedenza che devono essere applicate nel modello.

maxActiveVehicles

integer

Limita 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 che il parco veicoli sia eterogeneo. L'ottimizzazione selezionerà quindi il sottoinsieme migliore di veicoli da utilizzare. Deve essere strettamente positiva.

Spedizione

La spedizione di un singolo articolo, da uno dei suoi ritiri a una delle sue consegne. Affinché la spedizione venga considerata eseguita, un veicolo unico deve visitare una delle sedi di ritiro (e diminuire di conseguenza la capacità di riserva), quindi visitare una delle sedi di consegna in un secondo momento (e quindi aumentare di conseguenza la 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ò avere una lunghezza massima di 63 caratteri e possono essere utilizzati caratteri UTF-8.

pickups[]

object (VisitRequest)

Insieme di alternative per il 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 un luogo corrispondente ai ritiri.

loadDemands

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

Carica le esigenze della spedizione (ad es. peso, volume, numero di pallet e così via). Le chiavi nella mappa dovrebbero essere identificatori che descrivono il tipo di carico corrispondente e idealmente includono 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.

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

allowedVehicleIndices[]

integer

L'insieme di veicoli che potrebbero effettuare questa spedizione. Se è vuota, la si può eseguire su tutti i veicoli. I veicoli sono indicati 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 contenere CIASCUNO:

  • lo stesso numero di elementi di costsPerVehicleIndices. costsPerVehicle[i] corrisponde al veicolo costsPerVehicleIndices[i] del modello.
  • lo stesso numero di elementi di veicoli presenti nel modello. L'elemento i-esimo corrisponde al veicolo #i del modello.

Questi costi devono essere nella stessa unità di penaltyCost e non devono essere negativi. Lascia vuoto questo campo se non sono presenti 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 massimo assoluto rispetto al percorso più breve dal prelievo alla consegna. Se specificato, non deve essere negativo e la spedizione deve contenere almeno un ritiro e una consegna.

Ad esempio, lascia che sia il tempo più breve necessario per passare direttamente dall'alternativa di ritiro selezionata a quella selezionata. Quindi, l'impostazione di pickupToDeliveryAbsoluteDetourLimit applica in modo forzato:

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

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

Durata in secondi con un massimo di nove cifre frazionarie e 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, non deve essere negativo e la spedizione deve contenere 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.

Durata in secondi con un massimo di nove cifre frazionarie e 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 il giorno shipment_types (vedi shipmentTypeIncompatibilities e shipmentTypeRequirements in ShipmentModel).

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

label

string

Specifica un'etichetta per questa spedizione. Questa etichetta è riportata nella risposta nel campo shipmentLabel dell'elemento ShipmentRoute.Visit corrispondente.

ignore

boolean

In questo caso, salta questa spedizione, ma non applicare un penaltyCost.

Se ignori una spedizione, il modello restituisce un errore di convalida se il modello include shipmentTypeRequirements.

È consentito ignorare una spedizione effettuata nei seguenti paesi: injectedFirstSolutionRoutes o injectedSolutionConstraint. il risolutore rimuove le relative visite di ritiro/consegna dal percorso eseguito. Verranno ignorati anche i precedenceRules che fanno riferimento a spedizioni ignorate.

penaltyCost

number

Se la spedizione non viene completata, questa penale viene aggiunta al costo complessivo dei percorsi. Una spedizione viene considerata completata se viene visitata una delle alternative di ritiro e consegna. Il costo può essere espresso nella stessa unità utilizzata per tutti gli altri campi correlati ai costi nel modello e deve essere positivo.

IMPORTANTE: se questa sanzione non viene specificata, è considerata infinita, ovvero la spedizione deve essere completata.

pickupToDeliveryRelativeDetourLimit

number

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

Ad esempio, lascia che sia il tempo più breve necessario per passare direttamente dall'alternativa di ritiro selezionata a quella selezionata. Quindi, l'impostazione di pickupToDeliveryRelativeDetourLimit applica in modo forzato:

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

Se nella stessa spedizione vengono specificati limiti sia relativi che assoluti, il limite più vincolante viene utilizzato per ogni possibile coppia di ritiro/consegna. A partire dal 2017/10, le deviazioni sono supportate solo quando la durata dei viaggi 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 la durata del servizio (tempo trascorso 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 a cui arriva il veicolo quando esegui questo VisitRequest. Se il modello di spedizione ha matrici della durata e della distanza, non è necessario specificare arrivalLocation.

arrivalWaypoint

object (Waypoint)

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

departureLocation

object (LatLng)

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

departureWaypoint

object (Waypoint)

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

tags[]

string

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

timeWindows[]

object (TimeWindow)

Finestre temporali che limitano l'ora di arrivo di una visita. Tieni presente che un veicolo può partire al di fuori della finestra temporale di arrivo, ad esempio ora di arrivo + durata non devono necessariamente essere all'interno di una finestra temporale. Ciò può comportare dei tempi di attesa se il veicolo arriva prima del giorno TimeWindow.start_time.

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

Le finestre temporali devono essere separate, ovvero non devono sovrapporsi o essere adiacenti a un'altra e devono essere in ordine crescente.

costPerHourAfterSoftEndTime e softEndTime possono essere impostati solo se esiste una sola finestra temporale.

duration

string (Duration format)

Durata della visita, ossia il tempo trascorso dal veicolo tra l'arrivo e la partenza (da aggiungere al possibile tempo di attesa; consulta timeWindows).

Durata in secondi con un massimo di nove cifre frazionarie e termina con "s". Esempio: "3.5s".

cost

number

Costo per gestire questa richiesta di visita su un percorso di veicoli. Questa opzione può essere utilizzata per pagare costi diversi per ogni ritiro o consegna alternativa 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. È proprio come il campo Shipment.load_demands, ad eccezione del fatto che si applica solo a questo VisitRequest anziché all'intero campo 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. In questo modo è possibile assegnare il tempo aggiuntivo necessario a un veicolo per completare la visita (vedi Vehicle.extra_visit_duration_for_visit_type).

Un tipo può essere visualizzato una sola volta.

label

string

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

LatLng

Un oggetto che rappresenta una coppia latitudine/longitudine. Questo valore è espresso come 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

La 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 una tappa. I waypoint contrassegnano le posizioni di arrivo e partenza delle VisitRequests e 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

(Facoltativo) Indica che la posizione di questa tappa deve avere una preferenza che il veicolo si fermi in un determinato lato della strada. Quando imposti questo valore, il percorso attraversa la posizione in modo che il veicolo possa fermarsi sul lato della strada inclinato rispetto alla posizione rispetto al centro della strada. Questa opzione non funziona per "WALKING" modalità di viaggio.

Campo 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 alla tappa.

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 della tappa.

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 il ritiro e la discesa. I valori di intestazione possono essere compresi tra 0 e 360, dove 0 indica un'intestazione verso nord, 90 specifica un'intestazione verso est ecc.

TimeWindow

Le finestre temporali vincolano l'ora di un evento, come l'ora di arrivo di una visita o l'ora di inizio e di fine di un veicolo.

I limiti fissi di finestre temporali, startTime e endTime, applicano l'ora più vicina e più recente dell'evento, ad esempio startTime <= event_time <= endTime. Il limite inferiore della finestra temporale flessibile, softStartTime, esprime una preferenza affinché l'evento si verifichi a partire dal giorno softStartTime prevedendo un costo proporzionale al tempo prima del softStartTime dell'evento. Il limite superiore della finestra temporale flessibile, softEndTime, esprime una preferenza affinché l'evento si verifichi entro il giorno softEndTime prevedendo un costo proporzionale al periodo di tempo successivo al giorno softEndTime dell'evento. 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` <= `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 massima. Se non specificato, verrà impostato su ShipmentModel.global_start_time.

Un timestamp nel formato RFC3339 UTC "Zulu" 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 massima. Se non specificato, verrà impostato su ShipmentModel.global_end_time.

Un timestamp nel formato RFC3339 UTC "Zulu" 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 soft start della finestra temporale.

Un timestamp nel formato RFC3339 UTC "Zulu" 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 soft della finestra temporale.

Un timestamp nel formato RFC3339 UTC "Zulu" 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

Un costo per ora aggiunto ad altri costi nel modello se l'evento si verifica prima di softStartTime, calcolato come:

   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 per ora 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

Modella un veicolo in un problema di spedizione. Se risolvi un problema di spedizione, per questo veicolo verrà creato un percorso che parte da startLocation e termina a 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ò avere una lunghezza massima di 63 caratteri e possono essere utilizzati caratteri UTF-8.

travelMode

enum (TravelMode)

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

startLocation

object (LatLng)

La posizione geografica in cui parte il veicolo prima di ritirare qualsiasi spedizione. Se non specificato, il veicolo inizia 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 viene 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)

La posizione geografica in cui termina il veicolo dopo aver completato gli ultimi VisitRequest. Se non specificato, ShipmentRoute del veicolo termina immediatamente quando 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 termina dopo che ha completato l'ultimo VisitRequest. Se non viene specificato né endWaypointendLocation, il valore ShipmentRoute del veicolo termina immediatamente quando viene completato l'ultimo VisitRequest. Se il modello di spedizione ha matrici di durata e distanza, non è necessario specificare endWaypoint.

startTags[]

string

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

Non sono consentite stringhe vuote o duplicate.

endTags[]

string

Specifica i tag allegati 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 dalla posizione di partenza. Devono rientrare nei limiti di tempo globali (vedi i campi ShipmentModel.global_*). Se non specificati, non ci sono limitazioni oltre ai limiti di tempo globali.

Le finestre temporali appartenenti allo stesso campo ripetuto devono essere separate, ossia 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 esiste una sola finestra temporale.

endTimeWindows[]

object (TimeWindow)

Finestre temporali durante le quali il veicolo potrebbe arrivare alla sua posizione di fine. Devono rientrare nei limiti di tempo globali (vedi i campi ShipmentModel.global_*). Se non specificati, non ci sono limitazioni oltre ai limiti di tempo globali.

Le finestre temporali appartenenti allo stesso campo ripetuto devono essere separate, ossia 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 esiste una sola finestra temporale.

unloadingPolicy

enum (UnloadingPolicy)

Criterio di scarico applicato al veicolo.

loadLimits

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

Capacità del veicolo (peso, volume, numero di pallet, ad esempio). 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 nella 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 di percorso del veicolo. Questo costo viene applicato al tempo totale impiegato dal percorso e include il tempo di percorrenza, il tempo di attesa e il tempo di visita. L'utilizzo di costPerHour anziché solo di costPerTraveledHour potrebbe causare una latenza aggiuntiva.

costPerTraveledHour

number

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

costPerKilometer

number

Costo per chilometro del percorso per veicoli. Questo costo viene applicato alla distanza riportata nel ShipmentRoute.transitions e non si applica alle distanze implicitamente percorse dal arrivalLocation al departureLocation di un singolo VisitRequest.

fixedCost

number

Costo fisso applicato se questo veicolo viene utilizzato per gestire una spedizione.

usedIfRouteIsEmpty

boolean

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 è vero, il veicolo passa dalla sua posizione di partenza a quella di arrivo anche se non effettua alcuna spedizione e i costi in termini di tempo e distanza derivanti dall'inizio --> alla fine del viaggio vengono prese in considerazione.

In caso contrario, il veicolo non si sposta dall'inizio alla posizione di fine e non sono previsti breakRule o ritardi (da TransitionAttributes) per questo veicolo. In questo caso, l'elemento 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 vehicleEndTime e vehicleStartTime.

travelDurationLimit

object (DurationLimit)

Limite applicato alla durata del percorso del veicolo. In un determinato OptimizeToursResponse, la durata del viaggio 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 è il tempo, in aggiunta a VisitRequest.duration, da sostenere per le visite con il visitTypes specificato. Questa durata della visita aggiuntiva aggiunge un costo se viene specificato costPerHour. Le chiavi (ad es. visitTypes) non possono essere stringhe vuote.

Se una richiesta di visita ha 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 interruzioni 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 segnalata nella risposta come vehicleLabel del valore ShipmentRoute corrispondente.

ignore

boolean

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

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

Se una spedizione viene eseguita da un veicolo ignorato in injectedSolutionConstraint e l'eventuale ritiro/consegna correlata è vincolato a rimanere sul veicolo (ovvero, non viene rilassato al livello RELAX_ALL_AFTER_THRESHOLD), viene saltata nella risposta. Se una spedizione ha un campo allowedVehicleIndices non vuoto e tutti i veicoli consentiti vengono ignorati, la spedizione viene ignorata 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, se imposti questo valore su 2,0, significa che questo veicolo è più lento e ha tempi di percorrenza due volte superiori rispetto a quelli dei veicoli standard. Questo multiplo non influisce sulla durata delle visite. Ciò influisce sui costi se vengono specificati costPerHour o costPerTraveledHour. Il valore 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 qualsiasi operazione numerica; 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 dell'API Google Maps Platform Routes Preferred. Consulta la pagina: 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 sulle modalità di scarico di un veicolo. Si applica solo alle spedizioni con sia un ritiro che una consegna.

Altre spedizioni sono libere di avvenire ovunque sul percorso, indipendentemente da unloadingPolicy.

Enum
UNLOADING_POLICY_UNSPECIFIED Criterio di unload non specificato; 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 es. "questo camion può trasportare solo fino a 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, viene applicata la seguente penale (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 delle quantità di caricamento accettabili.

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

string (int64 format)

Un carico minimo accettabile. Deve essere ≥ 0. Se sono specificati entrambi, 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, min deve essere ≤ max.

DurationLimit

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

Quando viene definito un campo del limite flessibile, è necessario definire insieme la soglia massima e il costo associato.

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

string (Duration format)

Un limite rigido che vincola la durata al massimo a maxDuration.

Durata in secondi con un massimo di nove cifre frazionarie e termina con "s". Esempio: "3.5s".

softMaxDuration

string (Duration format)

Un limite flessibile che non applica un limite di durata massimo, ma in caso di violazione comporta un costo per la route. Questo costo si somma ad altri costi definiti nel modello, con la stessa unità.

Se definito, softMaxDuration deve essere non negativo. Se viene definito anche maxDuration, softMaxDuration deve essere inferiore a maxDuration.

Durata in secondi con un massimo di nove cifre frazionarie e termina con "s". Esempio: "3.5s".

quadraticSoftMaxDuration

string (Duration format)

Un limite flessibile non applica un limite di durata massimo, ma se viene violato comporta un costo quadratico nella durata. Questo costo si somma ad altri costi definiti nel modello, con la stessa unità.

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

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

Durata in secondi con un massimo di nove cifre frazionarie e termina con "s". Esempio: "3.5s".

costPerHourAfterSoftMax

number

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

  costPerHourAfterSoftMax * (duration - softMaxDuration)

Il costo non deve essere negativo.

costPerSquareHourAfterQuadraticSoftMax

number

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

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

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

Il costo non deve essere negativo.

DistanceLimit

Un limite che definisce la distanza massima percorribile. Può essere difficile o morbida.

Se viene definito un limite flessibile, devono essere definiti sia softMaxMeters sia costPerKilometerAboveSoftMax e non devono essere negativi.

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

string (int64 format)

Un limite rigido che vincola la distanza a un massimo di maxMeters. Il limite non deve essere negativo.

softMaxMeters

string (int64 format)

Un limite flessibile non applica un limite massimo per la distanza, ma se violato genera un costo che si somma ad altri costi definiti nel modello, con la stessa unità.

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

costPerKilometerAboveSoftMax

number

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

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

Il costo non deve essere 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 corrente e non può effettuare alcuna visita. Potrebbe verificarsi una pausa:

  • 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 una visita e l'altra;
  • o prima dell'avvio del veicolo (il veicolo potrebbe non avviarsi nel bel mezzo di una pausa), nel qual caso l'operazione non influisce sull'ora di inizio del veicolo.
  • o dopo la fine del veicolo (come l'ora di fine del veicolo).
Rappresentazione JSON
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
Campi
breakRequests[]

object (BreakRequest)

Sequenza delle interruzioni. Leggi il messaggio di BreakRequest.

frequencyConstraints[]

object (FrequencyConstraint)

Potrebbero essere applicati diversi FrequencyConstraint. Devono essere tutti soddisfatti dai BreakRequest di questa BreakRule. Vedi FrequencyConstraint.

BreakRequest

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

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

string (Timestamp format)

Obbligatorio. Limite inferiore (compreso) all'inizio dell'interruzione.

Un timestamp nel formato RFC3339 UTC "Zulu" 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 nel formato RFC3339 UTC "Zulu" 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 della pausa. Deve essere positivo.

Durata in secondi con un massimo di nove cifre frazionarie e termina con "s". Esempio: "3.5s".

FrequencyConstraint

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

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

I tempi 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 può essere applicato alle interruzioni non consecutive. Ad esempio, la programmazione seguente rispetta l'"1 h ogni 12 h" esempio:

  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.

Durata in secondi con un massimo di nove cifre frazionarie e termina con "s". Esempio: "3.5s".

maxInterBreakDuration

string (Duration format)

Obbligatorio. Periodo massimo consentito di qualsiasi intervallo di tempo del percorso che non include almeno una pausa parziale di duration >= minBreakDuration. Deve essere positivo.

Durata in secondi con un massimo di nove cifre frazionarie e termina con "s". Esempio: "3.5s".

DurationDistanceMatrix

Specifica una matrice di durata e distanza tra le posizioni delle visite e dei veicoli da visitare e le località di fine dei veicoli.

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

object (Row)

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

vehicleStartTag

string

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

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

Tutte le matrici devono avere un valore vehicleStartTag diverso.

Riga

Specifica una riga della durata e della matrice della distanza.

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

string (Duration format)

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

Durata in secondi con un massimo di nove cifre frazionarie e 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, questo campo può essere lasciato vuoto; altrimenti deve avere un numero di elementi pari a durations.

TransitionAttributes

Specifica gli attributi delle transizioni tra due visite consecutive su un percorso. Alla stessa transizione possono essere applicati diversi TransitionAttributes: in questo caso, tutti i costi aggiuntivi vengono sommati e viene applicato il vincolo o il limite più rigido (secondo 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

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

Una visita della sorgente o l'inizio di un veicolo corrisponde a se il suo 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. Uno dei valori srcTag e excludedSrcTag non può essere vuoto.

dstTag

string

Una visita di destinazione o una fine del veicolo corrisponde se la sua 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. Uno dei valori dstTag e excludedDstTag non può essere vuoto.

cost

number

Specifica un costo per l'esecuzione di questa transizione. Questo valore è nella stessa unità di tutti gli altri costi del 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 a qualsiasi Vehicle.cost_per_kilometer specificato sui veicoli.

distanceLimit

object (DistanceLimit)

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

A partire dal 2021/06, sono supportati solo i limiti software.

delay

string (Duration format)

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

Questo ritardo si verifica sempre dopo aver terminato la visita di origine e prima di iniziare la visita di destinazione.

Durata in secondi con un massimo di nove cifre frazionarie e termina con "s". Esempio: "3.5s".

ShipmentTypeIncompatibility

Specifica le incompatibilità tra le spedizioni in base all'attributo billingType. La comparsa di spedizioni incompatibili sullo stesso percorso è limitata in base alla modalità di incompatibilità.

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

string

Elenco dei tipi incompatibili. Due spedizioni con shipment_types diversi tra quelle elencate sono "incompatibili".

incompatibilityMode

enum (IncompatibilityMode)

Modalità applicata all'incompatibilità.

IncompatibilityMode

Modalità che definiscono le limitazioni di visualizzazione di spedizioni incompatibili 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à di NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY:

  • Se in entrambi i casi si tratta di solo ritiro (senza consegne) o solo di consegne (nessun ritiro), 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

Specifica i requisiti tra una spedizione in base all'attributo billingType. Le specifiche dei requisiti sono definite dalla modalità dei requisiti.

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

string

Elenco dei tipi di spedizione alternativi richiesti dall'dependentShipmentTypes.

dependentShipmentTypes[]

string

Tutte le spedizioni con un tipo nel campo dependentShipmentTypes richiedono che sia visitata almeno una spedizione di tipo requiredShipmentTypeAlternatives sullo stesso percorso.

NOTA: non sono consentite catene di requisiti tali da cui un elemento shipmentType dipende da se stesso.

requirementMode

enum (RequirementMode)

Modalità applicata al requisito.

RequirementMode

Modalità che definiscono l'aspetto di spedizioni dipendenti su un itinerario.

Enum
REQUIREMENT_MODE_UNSPECIFIED Modalità requisito non specificata. Questo valore non deve mai essere utilizzato.
PERFORMED_BY_SAME_VEHICLE In questa modalità, tutti i pod Le spedizioni devono condividere lo stesso veicolo di almeno uno dei valori "obbligatori" spedizioni.
IN_SAME_VEHICLE_AT_PICKUP_TIME

Con la modalità IN_SAME_VEHICLE_AT_PICKUP_TIME, tutti i contenuti sono "dipendenti" le spedizioni devono avere almeno un "obbligatorio" dalla spedizione sul veicolo al momento del ritiro.

Un "dipendente" Il ritiro della spedizione deve quindi avere:

  • Un campo "Obbligatorio" solo per la consegna spedizione consegnata lungo l'itinerario dopo o
  • Un campo "obbligatorio" spedizione prelevata lungo il percorso che lo precede e se lo stato "obbligatorio" la spedizione ha una consegna, questa consegna deve essere eseguita dopo il termine "dipendente" il ritiro della spedizione.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Come prima, ad eccezione degli elementi "dipendenti" le spedizioni devono avere un "obbligatorio" sulla spedizione del 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" l'evento deve iniziare almeno offsetDuration dopo "primo" è iniziata.

Diverse precedenza possono fare riferimento agli stessi eventi (o correlati), ad esempio "il ritiro di B avviene dopo la consegna di A" mentre "il ritiro di C avviene dopo il ritiro di B".

Inoltre, le priorità si applicano solo quando entrambe le spedizioni vengono effettuate e vengono altrimenti ignorate.

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

boolean

Indica se il "primo" è un caricamento.

secondIsDelivery

boolean

Indica se il "secondo" è un caricamento.

offsetDuration

string (Duration format)

L'offset tra il "primo" e "second" . Può essere negativo.

Durata in secondi con un massimo di nove cifre frazionarie e termina con "s". Esempio: "3.5s".

firstIndex

integer

Indice di spedizione del "primo" . Questo campo è obbligatorio.

secondIndex

integer

Indice di spedizione del "secondo" . Questo campo è obbligatorio.