Soluzione inserita nella richiesta, comprese informazioni su quali visite devono essere vincolate e come devono essere vincolate.
Rappresentazione JSON |
---|
{ "routes": [ { object ( |
Campi | |
---|---|
routes[] |
Route della soluzione da inserire. Alcuni percorsi potrebbero essere omessi dalla soluzione originale. I percorsi e le spedizioni saltate devono soddisfare i presupposti di validità di base elencati per |
skippedShipments[] |
Sono state saltate le spedizioni della soluzione da inserire. Alcune potrebbero essere omesse dalla soluzione originale. Visualizza il campo |
constraintRelaxations[] |
Per zero o più gruppi di veicoli, specifica quando e quanto allentare i vincoli. Se questo campo è vuoto, tutti i percorsi non vuoti dei veicoli sono completamente vincolati. |
ConstraintRelaxation
Per un gruppo di veicoli, specifica le soglie da cui applicare i vincoli per le visite e a quale livello. Le spedizioni elencate nel campo skipped_shipment
sono limitate a essere ignorate. ovvero non possono essere eseguite.
Rappresentazione JSON |
---|
{
"relaxations": [
{
object ( |
Campi | |
---|---|
relaxations[] |
Tutti gli allentamenti dei vincoli di visita che verranno applicati alle visite sui percorsi con veicoli nel seguente periodo: |
vehicleIndices[] |
Specifica gli indici dei veicoli a cui si applica il vincolo di visita Un indice di veicoli viene mappato come |
Relax
Se il campo relaxations
è vuoto, l'ora di inizio e la sequenza di tutte le visite in data routes
sono completamente limitate e non è possibile inserire o aggiungere nuove visite a questi percorsi. Inoltre, l'ora di inizio e di fine di un veicolo in routes
è completamente limitata, a meno che il veicolo non sia vuoto (ovvero non ha visite e ha usedIfRouteIsEmpty
impostato su false nel modello).
relaxations(i).level
specifica il livello di riduzione del vincolo applicato a una visita #j che soddisfa:
route.visits(j).start_time >= relaxations(i).threshold_time
Ej + 1 >= relaxations(i).threshold_visit_count
Allo stesso modo, l'avvio del veicolo viene spostato su relaxations(i).level
se soddisfa:
vehicleStartTime >= relaxations(i).threshold_time
Erelaxations(i).threshold_visit_count == 0
e la fine del veicolo è in posizionerelaxations(i).level
se soddisfa:vehicleEndTime >= relaxations(i).threshold_time
Eroute.visits_size() + 1 >= relaxations(i).threshold_visit_count
Per applicare un livello di relax se una visita soddisfa thresholdVisitCount
OPPURE thresholdTime
, aggiungi due relaxations
con lo stesso level
: uno con solo thresholdVisitCount
impostato e l'altro con solo thresholdTime
impostato. Se una visita soddisfa le condizioni di più relaxations
, si applica il livello più informale. Di conseguenza, dall'inizio del veicolo attraverso le visite al percorso per arrivare alla fine del veicolo, il livello di rilassamento diventa più rilassato: cioè, il livello di rilassamento non diminuisce con il progredire del percorso.
I tempi e la sequenza delle visite al percorso che non soddisfano le condizioni di soglia di qualsiasi relaxations
sono completamente limitati e nessuna visita può essere inserita in queste sequenze. Inoltre, se l'inizio o la fine di un veicolo non soddisfa le condizioni di rilassamento, l'ora è fissa, a meno che il veicolo non sia vuoto.
Rappresentazione JSON |
---|
{
"level": enum ( |
Campi | |
---|---|
level |
Il livello di allentamento del vincolo che si applica quando vengono soddisfatte le condizioni uguali o successive a |
thresholdTime |
L'ora a partire dal quale può essere applicato il rilassamento Un timestamp nel formato RFC3339 UTC "Zulu" con risoluzione in nanosecondi e fino a nove cifre frazionarie. Esempi: |
thresholdVisitCount |
Il numero di visite in corrispondenza delle quali o dopo le quali può essere applicato l'allentamento Se è |
Livello
Esprime i diversi livelli di relax del vincolo applicati a una visita e quelli che seguono quando soddisfa le condizioni di soglia.
L'elenco seguente è in ordine crescente.
Enum | |
---|---|
LEVEL_UNSPECIFIED |
Livello di rilassamento predefinito implicito: nessun vincolo è allentato, ossia tutte le visite sono completamente limitate. Questo valore non deve essere utilizzato esplicitamente in |
RELAX_VISIT_TIMES_AFTER_THRESHOLD |
Le ore di inizio delle visite e quelle dei veicoli saranno meno rigide, ma ciascuna visita rimarrà associata allo stesso veicolo ed è necessario osservare la sequenza delle visite: non è possibile inserire visite tra di loro o prima di queste. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Come RELAX_VISIT_TIMES_AFTER_THRESHOLD , ma anche la sequenza delle visite è più lineare: le visite rimangono semplicemente associate al veicolo. |
RELAX_ALL_AFTER_THRESHOLD |
Come RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD , ma allo stesso tempo il veicolo è più allentato: le visite sono completamente senza costi al momento della soglia o dopo questa soglia e possono potenzialmente non essere eseguite. |