InjectedSolutionConstraint

Soluzione inserita nella richiesta, che include informazioni sulle visite che devono essere limitate e sulle relative modalità di limitazione.

Rappresentazione JSON
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
Campi
routes[]

object (ShipmentRoute)

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 injectedFirstSolutionRoutes.

skippedShipments[]

object (SkippedShipment)

Saltate spedizioni della soluzione da iniettare. Alcuni potrebbero essere omessi dalla soluzione originale. Controlla il campo routes.

constraintRelaxations[]

object (ConstraintRelaxation)

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 (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
Campi
relaxations[]

object (Relaxation)

Tutti gli allungamenti ai vincoli di visita che si applicheranno alle visite su percorsi con veicoli in vehicleIndices.

vehicleIndices[]

integer

Specifica gli indici dei veicoli a cui si applica il vincolo di visite relaxations. Se vuoto, viene considerato il valore predefinito e il relaxations si applica a tutti i veicoli non specificati in altre constraintRelaxations. Può esistere al massimo un valore predefinito, ad esempio un campo di rilassamento del vincolo è consentito vuoto vehicleIndices. Un indice di veicoli può essere elencato una sola volta, anche all'interno di più constraintRelaxations.

Un indice di veicoli è mappato come ShipmentRoute.vehicle_index, se interpretInjectedSolutionsUsingLabels è vero (vedi il commento fields).

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 E
  • j + 1 >= relaxations(i).threshold_visit_count

Analogamente, l'avvio del veicolo è rilassato fino a relaxations(i).level se soddisfa:

  • vehicleStartTime >= relaxations(i).threshold_time E
  • relaxations(i).threshold_visit_count == 0 e l'estremità del veicolo è rilassata fino a relaxations(i).level se soddisfa:
  • vehicleEndTime >= relaxations(i).threshold_time E
  • route.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 (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
Campi
level

enum (Level)

Il livello di rilassamento del vincolo che si applica quando sono soddisfatte le condizioni pari o successive a thresholdTime E ad almeno thresholdVisitCount.

thresholdTime

string (Timestamp format)

L'ora alla quale o dopo la quale può essere applicato il rilassamento level.

Un timestamp in formato "Zulu" RFC3339 UTC, con risoluzione in nanosecondi e fino a nove cifre frazionarie. Esempi: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

thresholdVisitCount

integer

Il numero di visite durante o dopo le quali può essere applicato il level di rilassamento. Se thresholdVisitCount è 0 (o non viene configurato), la level può essere applicata direttamente all'avvio del veicolo.

Se è route.visits_size() + 1, level può essere applicato solo all'estremità del veicolo. Se è superiore a route.visits_size() + 1, level non viene applicato affatto per quel percorso.

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 level.

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.