InjectedSolutionConstraint

Soluzione iniettata nella richiesta, incluse informazioni sulle visite che devono essere limitate e su come devono essere limitate.

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

object (ShipmentRoute)

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

skippedShipments[]

object (SkippedShipment)

Caricamenti della soluzione da inserire ignorati. Alcuni potrebbero essere omessi dalla soluzione originale. Consulta il campo routes.

constraintRelaxations[]

object (ConstraintRelaxation)

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

object (Relaxation)

Tutti gli allentamento dei vincoli di visita che verranno applicati alle visite sui percorsi con veicoli in vehicleIndices.

vehicleIndices[]

integer

Specifica gli indici dei veicoli a cui si applica la limitazione di visita relaxations. Se è vuoto, viene considerato predefinito e relaxations si applica a tutti i veicoli non specificati in altri constraintRelaxations. Può essere presente al massimo un valore predefinito, ovvero è consentito un solo campo di rilassamento dei vincoli vuoto vehicleIndices. Un indice del veicolo può essere elencato una sola volta, anche all'interno di più constraintRelaxations.

Un indice del veicolo viene mappato come ShipmentRoute.vehicle_index, se interpretInjectedSolutionsUsingLabels è true (vedi il commento fields).

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 E
  • j + 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 E
  • relaxations(i).threshold_visit_count == 0 e l'estremità del veicolo è allentata 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 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 (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
Campi
level

enum (Level)

Il livello di rilassamento delle limitazioni che si applica quando le condizioni a partire da thresholdTime E almeno thresholdVisitCount sono soddisfatte.

thresholdTime

string (Timestamp format)

L'ora a partire dalla quale è possibile applicare il rilassamento level.

Un timestamp in formato "Zulu" UTC RFC3339, con risoluzione a livello di nanosecondo 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 a partire dal quale è possibile applicare il rilassamento level. Se thresholdVisitCount è 0 (o non impostato), level può essere applicato direttamente all'avvio del veicolo.

Se è route.visits_size() + 1, il level può essere applicato solo al veicolo. Se è superiore a route.visits_size() + 1, level non viene applicato per quel percorso.

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

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.