Soluzione inserita nella richiesta, che include informazioni sulle visite che devono essere limitate e sulle relative modalità di limitazione.
Rappresentazione JSON |
---|
{ "routes": [ { object ( |
Campi | |
---|---|
routes[] |
Percorsi della soluzione da iniettare. Alcune route potrebbero essere omesse dalla soluzione originale. I percorsi e le spedizioni saltate devono soddisfare le ipotesi di validità di base elencate per |
skippedShipments[] |
Saltate spedizioni della soluzione da iniettare. Alcuni potrebbero essere omessi dalla soluzione originale. Controlla il campo |
constraintRelaxations[] |
Per zero o più gruppi di veicoli, specifica quando e quanto allentare i vincoli. Se questo campo è vuoto, tutti i percorsi dei veicoli non vuoti sono completamente limitati. |
ConstraintRelaxation
Per un gruppo di veicoli, specifica a quali soglie i vincoli sulle visite saranno allentati e a quale livello. Le spedizioni elencate nel campo skipped_shipment
sono vincolate a essere ignorate, ossia non possono essere eseguite.
Rappresentazione JSON |
---|
{
"relaxations": [
{
object ( |
Campi | |
---|---|
relaxations[] |
Tutti gli allungamenti ai vincoli di visita che si applicheranno alle visite su percorsi con veicoli in |
vehicleIndices[] |
Specifica gli indici dei veicoli a cui si applica il vincolo di visite Un indice di veicoli è mappato come |
Relax
Se il campo relaxations
è vuoto, l'ora di inizio e la sequenza di tutte le visite il giorno 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 vincolata, a meno che il veicolo non sia vuoto (ovvero non abbia visite e abbia usedIfRouteIsEmpty
impostato su false nel modello).
relaxations(i).level
specifica il livello di rilassamento 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
Analogamente, l'avvio del veicolo è rilassato fino a relaxations(i).level
se soddisfa:
vehicleStartTime >= relaxations(i).threshold_time
Erelaxations(i).threshold_visit_count == 0
e l'estremità del veicolo è rilassata fino arelaxations(i).level
se soddisfa:vehicleEndTime >= relaxations(i).threshold_time
Eroute.visits_size() + 1 >= relaxations(i).threshold_visit_count
Per applicare un livello di rilassamento se una visita soddisfa thresholdVisitCount
OPPURE i 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 fino alla fine del percorso, il livello di rilassamento diventa più rilassato: in altre parole, il livello di rilassamento non diminuisce man mano che il percorso progredisce.
La tempistica e la sequenza delle visite al percorso che non soddisfano le condizioni di soglia di qualsiasi relaxations
sono completamente vincolate e non è possibile inserire visite in queste sequenze. Inoltre, se l'inizio o la fine di un veicolo non soddisfa le condizioni di rilassamento, l'orario è fisso, a meno che il veicolo non sia vuoto.
Rappresentazione JSON |
---|
{
"level": enum ( |
Campi | |
---|---|
level |
Il livello di rilassamento del vincolo che si applica quando sono soddisfatte le condizioni pari o successive a |
thresholdTime |
L'ora alla quale o dopo la quale può essere applicato il rilassamento Un timestamp in formato "Zulu" RFC3339 UTC, con risoluzione in nanosecondi e fino a nove cifre frazionarie. Esempi: |
thresholdVisitCount |
Il numero di visite durante o dopo le quali può essere applicato il Se è |
Livello
Esprime i diversi livelli di rilassamento del vincolo, che vengono applicati a una visita e quelli che seguono quando soddisfa le condizioni di soglia.
L'elenco riportato di seguito è in ordine crescente.
Enum | |
---|---|
LEVEL_UNSPECIFIED |
Livello di rilassamento predefinito implicito: nessun vincolo è allentato, ossia tutte le visite sono completamente vincolate. Questo valore non deve essere utilizzato esplicitamente in |
RELAX_VISIT_TIMES_AFTER_THRESHOLD |
Gli orari di inizio e di fine delle visite saranno ridotti, ma ogni visita rimane vincolata allo stesso veicolo e la sequenza delle visite deve essere osservata: non è possibile inserire visite tra di loro o prima. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Come RELAX_VISIT_TIMES_AFTER_THRESHOLD , ma anche la sequenza di visite è semplice: le visite rimangono semplicemente legate al veicolo. |
RELAX_ALL_AFTER_THRESHOLD |
Come per RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD , ma il veicolo è anche a riposo: le visite sono completamente senza costi a partire dall'orario della soglia e potrebbero potenzialmente avere un rendimento inferiore. |