InjectedSolutionConstraint

Soluzione inserita nella richiesta, incluse informazioni su quali visite devono essere vincolate e in che modo.

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

object (ShipmentRoute)

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

skippedShipments[]

object (SkippedShipment)

Spedizioni saltate della soluzione da inserire. Alcuni potrebbero essere omessi dalla soluzione originale. Visualizza il campo routes.

constraintRelaxations[]

object (ConstraintRelaxation)

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

object (Relaxation)

Tutti gli allentamenti del vincolo di visita che verranno applicati alle visite sui percorsi con veicoli in vehicleIndices.

vehicleIndices[]

integer

Specifica gli indici dei veicoli a cui si applica il vincolo di visita relaxations. Se è vuoto, viene considerato il valore predefinito e relaxations si applica a tutti i veicoli non specificati in altri constraintRelaxations. Può esserci al massimo un valore predefinito, ovvero è consentito al massimo un campo di rilassamento del vincolo 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 commento fields).

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

enum (Level)

Il livello di rilassamento del vincolo che si applica quando le condizioni in corrispondenza o dopo thresholdTime E almeno thresholdVisitCount sono soddisfatte.

thresholdTime

string (Timestamp format)

L'ora a partire dalla quale può essere applicata la deroga level.

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: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" o "2014-10-02T15:01:23+05:30".

thresholdVisitCount

integer

Il numero di visite a partire dal quale può essere applicata la riduzione level. Se thresholdVisitCount è 0 (o non impostato), level potrebbe 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 questo percorso.

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

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.