Soluzione inserita nella richiesta, incluse informazioni su quali visite devono essere vincolate e in che modo.
| Rappresentazione JSON |
|---|
{ "routes": [ { object ( |
| Campi | |
|---|---|
routes[] |
Percorsi della soluzione da iniettare. Alcuni itinerari potrebbero essere omessi dalla soluzione originale. I percorsi e le spedizioni saltate devono soddisfare i presupposti di validità di base elencati per |
skippedShipments[] |
Spedizioni saltate della soluzione da inserire. Alcuni potrebbero essere omessi dalla soluzione originale. Visualizza il campo |
constraintRelaxations[] |
Per zero o più gruppi di veicoli, specifica quando e di quanto 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 quale soglia o soglie verranno allentati i vincoli relativi alle visite e a quale livello. Le spedizioni elencate nel campo skipped_shipment sono vincolate a essere saltate, ovvero non possono essere eseguite.
| Rappresentazione JSON |
|---|
{
"relaxations": [
{
object ( |
| Campi | |
|---|---|
relaxations[] |
Tutti gli allentamenti del vincolo di visita che verranno applicati alle visite sui percorsi con veicoli in |
vehicleIndices[] |
Specifica gli indici dei veicoli a cui si applica il vincolo di visita Un indice del veicolo viene mappato come |
Relax
Se relaxations è vuoto, l'ora di inizio e la sequenza di tutte le visite in routes sono completamente vincolate e non è possibile inserire o aggiungere nuove visite a questi itinerari. 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 allentamento del vincolo applicato a una visita #j che soddisfa:
route.visits(j).start_time >= relaxations(i).threshold_timeEj + 1 >= relaxations(i).threshold_visit_count
Analogamente, l'avvio del veicolo viene posticipato a relaxations(i).level se soddisfa le seguenti condizioni:
vehicleStartTime >= relaxations(i).threshold_timeErelaxations(i).threshold_visit_count == 0e l'estremità del veicolo è rilassata arelaxations(i).levelse soddisfa:vehicleEndTime >= relaxations(i).threshold_timeEroute.visits_size() + 1 >= relaxations(i).threshold_visit_count
Per applicare un livello di rilassamento se una visita soddisfa la condizione thresholdVisitCount O la condizione 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ù permissivo. Di conseguenza, dall'inizio del viaggio in auto fino alla fine, passando per le visite del percorso in ordine, il livello di rilassamento aumenta, ovvero non diminuisce man mano che il percorso procede.
La tempistica e la sequenza delle visite all'itinerario che non soddisfano le condizioni di soglia di alcun relaxations sono completamente vincolate e non è possibile inserire visite in queste sequenze. Inoltre, se l'inizio o la fine di una corsa non soddisfa le condizioni di alcuna riduzione, 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 le condizioni in corrispondenza o dopo |
thresholdTime |
L'ora a partire dalla quale può essere applicata la deroga Utilizza RFC 3339, in cui l'output generato è sempre normalizzato in base al fuso orario UTC e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
thresholdVisitCount |
Il numero di visite a partire dal quale può essere applicata la riduzione Se è |
Livello
Esprime i diversi livelli di rilassamento dei vincoli, che vengono applicati per una visita e quelle successive quando soddisfano le condizioni di soglia.
L'elenco seguente è in ordine di rilassamento crescente.
| Enum | |
|---|---|
LEVEL_UNSPECIFIED |
Livello di rilassamento predefinito implicito: nessun vincolo viene rilassato, ovvero tutte le visite sono completamente vincolate. Questo valore non deve essere utilizzato esplicitamente in |
RELAX_VISIT_TIMES_AFTER_THRESHOLD |
Gli orari di inizio delle visite e di inizio/fine del veicolo saranno meno rigidi, ma ogni visita rimane associata allo stesso veicolo e la sequenza delle visite deve essere rispettata: non è possibile inserire una visita tra due visite o prima di una visita. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Come RELAX_VISIT_TIMES_AFTER_THRESHOLD, ma anche 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 RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, ma il veicolo è anche rilassato: le visite sono completamente senza costi alla data/ora della soglia e possono potenzialmente non essere eseguite. |