Soluzione iniettata nella richiesta, incluse informazioni sulle visite che devono essere limitate e su come devono essere limitate.
Rappresentazione JSON |
---|
{ "routes": [ { object ( |
Campi | |
---|---|
routes[] |
Percorsi della soluzione da iniettare. Alcuni percorsi potrebbero essere omessi dalla soluzione originale. I percorsi e le spedizioni saltate devono soddisfare le ipotesi di validità di base elencate per |
skipped |
Caricamenti della soluzione da inserire ignorati. Alcuni potrebbero essere omessi dalla soluzione originale. Consulta il campo |
constraint |
Per zero o più gruppi di veicoli, specifica quando e in che misura allentare i vincoli. Se questo campo è vuoto, tutti i percorsi dei veicoli non vuoti sono completamente vincolati. |
ConstraintRelaxation
Per un gruppo di veicoli, specifica a quali soglie verranno allentati i vincoli sulle visite e a quale livello. Le spedizioni elencate nel campo skipped_shipment
devono essere ignorate, ovvero non possono essere eseguite.
Rappresentazione JSON |
---|
{
"relaxations": [
{
object ( |
Campi | |
---|---|
relaxations[] |
Tutti gli allentamento dei vincoli di visita che verranno applicati alle visite sui percorsi con veicoli in |
vehicle |
Specifica gli indici dei veicoli a cui si applica la limitazione di visita Un indice del veicolo viene mappato come |
Relax
Se relaxations
è vuoto, l'ora di inizio e la sequenza di tutte le visite su relaxations
sono completamente vincolate e non è possibile inserire o aggiungere nuove visite a questi percorsi.routes
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 usedIfRouteIsEmpty
sia impostato su false nel modello).
relaxations(i).level
specifica il livello di rilassamento delle restrizioni 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 viene allentato a relaxations(i).level
se soddisfa i seguenti requisiti:
vehicleStartTime >= relaxations(i).threshold_time
Erelaxations(i).threshold_visit_count == 0
e l'estremità del veicolo è allentata 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 il thresholdVisitCount
OPPURE il 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
, viene applicato il livello più flessibile. Di conseguenza, dal punto di partenza del veicolo fino alle visite del percorso fino al punto di arrivo del veicolo, il livello di rilassamento diventa più rilassato: in altre parole, il livello di rilassamento non diminuisce man mano che il percorso procede.
La tempistica e la sequenza delle visite del 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 alcun allentamento, l'ora è fissa, a meno che il veicolo non sia vuoto.
Rappresentazione JSON |
---|
{
"level": enum ( |
Campi | |
---|---|
level |
Il livello di rilassamento delle limitazioni che si applica quando le condizioni a partire da |
threshold |
L'ora a partire dalla quale è possibile applicare il rilassamento Un timestamp in formato "Zulu" UTC RFC3339, con risoluzione a livello di nanosecondo e fino a nove cifre frazionarie. Esempi: |
threshold |
Il numero di visite a partire dal quale è possibile applicare il rilassamento Se è |
Livello
Esprime i diversi livelli di rilassamento dei vincoli, che vengono applicati per una visita e quelli che seguono quando soddisfa le condizioni di soglia.
L'enumerazione riportata di seguito è in ordine di rilassamento crescente.
Enum | |
---|---|
LEVEL_UNSPECIFIED |
Livello di rilassamento predefinito implicito: non vengono applicati rilassamenti, ovvero tutte le visite sono completamente vincolate. Questo valore non deve essere utilizzato esplicitamente in |
RELAX_VISIT_TIMES_AFTER_THRESHOLD |
Gli orari di inizio e fine delle visite e dei veicoli saranno meno rigidi, ma ogni visita rimane associata allo stesso veicolo e la sequenza delle visite deve essere rispettata: non è possibile inserire visite tra una visita e l'altra o prima di una visita. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Come per RELAX_VISIT_TIMES_AFTER_THRESHOLD , ma la sequenza delle visite è meno rigida: le visite possono essere eseguite solo da questo veicolo, ma possono potenzialmente non essere eseguite. |
RELAX_ALL_AFTER_THRESHOLD |
Come per RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD , ma il veicolo è anche rilassato: le visite sono completamente senza costi all'ora di soglia o dopo e possono potenzialmente non essere eseguite. |