InjectedSolutionConstraint

Soluzione inserita nella richiesta, comprese informazioni su quali visite devono essere vincolate e come devono essere vincolate.

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

object (ShipmentRoute)

Route della soluzione da inserire. Alcuni percorsi potrebbero essere omessi dalla soluzione originale. I percorsi e le spedizioni saltate devono soddisfare i presupposti di validità di base elencati per injectedFirstSolutionRoutes.

skippedShipments[]

object (SkippedShipment)

Sono state saltate le spedizioni della soluzione da inserire. Alcune potrebbero essere omesse dalla soluzione originale. Visualizza 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 non vuoti dei veicoli sono completamente vincolati.

ConstraintRelaxation

Per un gruppo di veicoli, specifica le soglie da cui applicare i vincoli per le visite e a quale livello. Le spedizioni elencate nel campo skipped_shipment sono limitate a essere ignorate. ovvero non possono essere eseguite.

Rappresentazione JSON
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
Campi
relaxations[]

object (Relaxation)

Tutti gli allentamenti dei vincoli di visita che verranno applicati alle visite sui percorsi con veicoli nel seguente periodo: vehicleIndices.

vehicleIndices[]

integer

Specifica gli indici dei veicoli a cui si applica il vincolo di visita relaxations. Se vuoto, questo valore è considerato il valore predefinito e i relaxations si applicano a tutti i veicoli non specificati negli altri constraintRelaxations. Può esistere al massimo un valore predefinito, ovvero al massimo un campo all'allentamento del vincolo è consentito vuoto vehicleIndices. Un indice di un veicolo può essere elencato una sola volta, anche entro diversi constraintRelaxations.

Un indice di veicoli viene 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 in data 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 limitata, a meno che il veicolo non sia vuoto (ovvero non ha visite e ha usedIfRouteIsEmpty impostato su false nel modello).

relaxations(i).level specifica il livello di riduzione 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

Allo stesso modo, l'avvio del veicolo viene spostato su relaxations(i).level se soddisfa:

  • vehicleStartTime >= relaxations(i).threshold_time E
  • relaxations(i).threshold_visit_count == 0 e la fine del veicolo è in posizione 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 relax se una visita soddisfa thresholdVisitCount OPPURE 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 attraverso le visite al percorso per arrivare alla fine del veicolo, il livello di rilassamento diventa più rilassato: cioè, il livello di rilassamento non diminuisce con il progredire del percorso.

I tempi e la sequenza delle visite al percorso che non soddisfano le condizioni di soglia di qualsiasi relaxations sono completamente limitati e nessuna visita può essere inserita in queste sequenze. Inoltre, se l'inizio o la fine di un veicolo non soddisfa le condizioni di rilassamento, 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 allentamento del vincolo che si applica quando vengono soddisfatte le condizioni uguali o successive a thresholdTime E almeno thresholdVisitCount.

thresholdTime

string (Timestamp format)

L'ora a partire dal quale può essere applicato il rilassamento level.

Un timestamp nel formato RFC3339 UTC "Zulu" 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 in corrispondenza delle quali o dopo le quali può essere applicato l'allentamento level. Se thresholdVisitCount è 0 (o non viene configurato), il valore level può essere applicato 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 per il percorso.

Livello

Esprime i diversi livelli di relax del vincolo applicati a una visita e quelli che seguono quando soddisfa le condizioni di soglia.

L'elenco seguente è in ordine crescente.

Enum
LEVEL_UNSPECIFIED

Livello di rilassamento predefinito implicito: nessun vincolo è allentato, ossia tutte le visite sono completamente limitate.

Questo valore non deve essere utilizzato esplicitamente in level.

RELAX_VISIT_TIMES_AFTER_THRESHOLD Le ore di inizio delle visite e quelle dei veicoli saranno meno rigide, ma ciascuna visita rimarrà associata allo stesso veicolo ed è necessario osservare la sequenza delle visite: non è possibile inserire visite tra di loro o prima di queste.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Come RELAX_VISIT_TIMES_AFTER_THRESHOLD, ma anche la sequenza delle visite è più lineare: le visite rimangono semplicemente associate al veicolo.
RELAX_ALL_AFTER_THRESHOLD Come RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, ma allo stesso tempo il veicolo è più allentato: le visite sono completamente senza costi al momento della soglia o dopo questa soglia e possono potenzialmente non essere eseguite.