Opzioni di routing

Questa sezione descrive alcune delle opzioni disponibili per il risolutore di routing.

Limiti per le ricerche

I limiti di ricerca fanno terminare il risolutore al raggiungimento di un limite specificato, ad esempio la durata massima o il numero di soluzioni trovate. Puoi impostare una ricerca limite tramite i parametri di ricerca del risolutore. Consulta I limiti di tempo, ad esempio.

La tabella seguente descrive i limiti più comuni per la ricerca.

Nome Tipo Predefinito Descrizione
solution_limit int64 kint64max Limitarsi al numero di soluzioni generati durante la ricerca.
time_limit.seconds int64 kint64max Limita il tempo in secondi al tempo trascorso : nella ricerca.
lns_time_limit.seconds int64 100 Limita il tempo in secondi al tempo trascorso tra : la ricerca di completamento di ogni vicino di ricerca locale.

Strategia della prima soluzione

La prima strategia di soluzione è il metodo utilizzato dal risolutore per trovare soluzione. Nella tabella seguente sono elencate le opzioni per first_solution_strategy.

Opzione Descrizione
AUTOMATIC Consente al risolutore di individuare la strategia da usare in base alla del modello in fase di risoluzione.
PATH_CHEAPEST_ARC Partendo da una route "start" collegalo al nodo, nodo che produce il segmento di percorso più economico, quindi estendi il percorso di eseguendo l'iterazione sull'ultimo nodo aggiunto alla route.
PATH_MOST_CONSTRAINED_ARC Simile a PATH_CHEAPEST_ARC, ma gli archi sono viene valutato con un selettore basato sul confronto che favorisce con arco vincolato. Per assegnare un selettore al modello di routing, utilizza la classe ArcIsMoreConstrainedThanArc().
EVALUATOR_STRATEGY Simile a PATH_CHEAPEST_ARC, ad eccezione del fatto che i costi dell'arco vengono valutati utilizzando la funzione passata SetFirstSolutionEvaluator()
SAVINGS Algoritmo di risparmio (Clarke e Wright). Riferimento Clarke, G. & [Nome di persona], J.W. "Programmazione dei veicoli da un deposito centrale a un numero di punti di consegna" , Operations Research, vol. 12, 1964, pp. 568-581.
SWEEP Algoritmo di sweep (Wren e Holliday). Riferimento Anthony Wren e Alan Holliday - Programmazione dei veicoli tramite computer da uno o più depositi a un numero di punti di consegna operativi Research Quarterly (1970-1977), vol. 23, n. 3 (Set., 1972), pp. 333-344.
CHRISTOFIDES L'algoritmo di Christofides (in realtà una variante del Algoritmo di Christofides che utilizza una corrispondenza massima anziché un valore massimo il che non garantisce il fattore 3/2 dell'approssimazione su una commerciale di viaggio del sistema metrico). Compatibile con modelli generici di percorsi per veicoli di Estendere una route fino a quando non è possibile inserire nodi al suo interno. Ci riferiamo a Nicos Christofides, l'analisi peggiore di una nuova euristica per il problema del venditore viaggiante, Report 388, Graduate School of Industrial Amministrazione, CMU, 1976.
ALL_UNPERFORMED Rendi inattivi tutti i nodi. Trova una soluzione solo se i nodi sono opzionali (sono elementi di un vincolo di disgiunzione con un costo di penalità finito).
BEST_INSERTION Crea una soluzione in modo iterativo inserendo la soluzione più economica il nodo nella posizione più economica. Il costo di inserimento si basa sul prezzo funzione di costo del modello di routing. A partire dal 2/2012, funziona solo su modelli con nodi facoltativi (con costi di penalizzazione limitati).
PARALLEL_CHEAPEST_INSERTION Crea una soluzione in modo iterativo inserendo il nodo più economico nella posizione più economica. il costo di inserimento si basa su la funzione di costo arco. È più veloce di BEST_INSERTION.
LOCAL_CHEAPEST_INSERTION Crea una soluzione in modo iterativo inserendo ogni il nodo nella posizione più economica. il costo di inserimento è basato sull'arco funzione di costo. È diverso da PARALLEL_CHEAPEST_INSERTION per nodo selezionato per l'inserimento; qui i nodi sono considerati nel loro ordine per la creazione di contenuti. È più veloce di PARALLEL_CHEAPEST_INSERTION.
GLOBAL_CHEAPEST_ARC Collegare iterativamente due nodi che producono la tratta più economica.
LOCAL_CHEAPEST_ARC Seleziona il primo nodo con un successore non associato e collegarlo al nodo che produce il segmento di percorso più economico.
FIRST_UNBOUND_MIN_VALUE Seleziona il primo nodo con un successore non associato e connetterlo al primo nodo disponibile. Equivale al Strategia CHOOSE_FIRST_UNBOUND combinata con ASSIGN_MIN_VALUE (cfr. constraint_solver.h).

Cerca stato

Puoi restituire lo stato di una ricerca utilizzando il metodo status del modello di routing. Ecco il codice Python per stampare lo stato di una ricerca:

print("Solver status: ", solver.status())

Viene visualizzato un numero intero con i seguenti significati:

Valore Descrizione
0 ROUTING_NOT_SOLVED: problema non ancora risolto.
1 ROUTING_SUCCESS: problema risolto.
2 ROUTING_PARTIAL_SUCCESS_LOCAL_OPTIMUM_NOT_REACHED: problema risolto correttamente dopo aver chiamato RoutingModel.Solve(), ad eccezione del fatto che non sia stato raggiunto il valore ottimale. Lasciare più tempo consente di migliorare soluzione.
3 ROUTING_FAIL: non è stata trovata alcuna soluzione al problema.
4 ROUTING_FAIL_TIMEOUT: è stato raggiunto il limite di tempo prima di trovare una soluzione.
5 ROUTING_INVALID: il modello, i parametri del modello o i flag non sono validi.
6 ROUTING_INFEASIBLE: il problema è stato dimostrato non fattibile.

Opzioni di ricerca locale

La seguente tabella elenca le opzioni per le strategie di ricerca locale (chiamate anche metaeuristica). Consulta Modifica della strategia di ricerca. per vedere alcuni esempi di impostazione di queste opzioni.

Opzione Descrizione
AUTOMATIC Lascia che sia il risolutore a selezionare il metaeuristico.
GREEDY_DESCENT Accetta il miglioramento (riduzione dei costi) dei vicini di ricerca locale fino a quando viene raggiunto il valore minimo.
GUIDED_LOCAL_SEARCH Utilizza la ricerca locale guidata per evitare i minimi locali. (cfr. Ricerca locale guidata) questo è generalmente il metaeuristico più efficiente per il calcolo di percorsi dei veicoli.
SIMULATED_ANNEALING Utilizza l'annealing simulato per sfuggire ai minimi locali (cfr. annealing simulato).
TABU_SEARCH Utilizza la ricerca tabu per evitare i minimi locali (cfr. Ricerca Tabu).
GENERIC_TABU_SEARCH Utilizza la ricerca tabu sul valore obiettivo della soluzione per eseguire l'escape dei caratteri locali minimi.

Controllo della propagazione

Nome Tipo Predefinito Descrizione
use_full_propagation bool true Usa i vincoli con la propagazione completa nel modello di routing (anziché solo la propagazione della luce). Completo la propagazione è necessaria solo quando si utilizza la ricerca depth-first o per i modelli che richiedono una forte propagazione per finalizzare il valore di come la codifica one-hot delle variabili categoriche. Se si modifica questa impostazione su true, la ricerca verrà rallentata in nella maggior parte dei casi e aumentare l'utilizzo della memoria in tutti i casi.