In questa sezione vengono descritte alcune opzioni del risolutore di percorsi.
Limiti di ricerca
I limiti di ricerca determinano una soluzione il risolutore dopo aver raggiunto un limite specifico, ad esempio la durata massima o il numero di soluzioni trovate. Puoi impostare un limite di ricerca tramite i parametri di ricerca del risolutore. Per un esempio, consulta Limiti di tempo.
La tabella seguente descrive i limiti di ricerca più comuni.
Nome | Tipo | Predefinito | Descrizione |
---|---|---|---|
solution_limit
|
int64 | kint64max | Limita al numero di soluzioni generate durante la ricerca. |
time_limit.seconds
|
int64 | kint64max | Limite in secondi per il tempo trascorso: nella ricerca. |
lns_time_limit.seconds
|
int64 | 100 | Limite in secondi al tempo trascorso su: la ricerca di completamento per ogni vicino ricercatore locale. |
Strategia per la prima soluzione
La prima strategia per le soluzioni è il metodo utilizzato dal risolutore per trovare una soluzione
iniziale. La seguente tabella elenca le opzioni per first_solution_strategy
.
Opzione | Descrizione |
---|---|
AUTOMATIC
|
Consente al risolutore di rilevare la strategia da utilizzare in base al modello risolto. |
PATH_CHEAPEST_ARC
|
Partendo da un nodo di inizio route, collegalo al nodo che produce il segmento di route più economico, quindi estendi la route eseguendo l'iterazione sull'ultimo nodo aggiunto alla route. |
PATH_MOST_CONSTRAINED_ARC
|
Analogamente a PATH_CHEAPEST_ARC , ma gli archi vengono
valutati con un selettore basato su confronto, che favorirà per primo
l'arco più limitato. Per assegnare un selettore al modello di routing, utilizza il metodo ArcIsMoreConstrainedThanArc() . |
EVALUATOR_STRATEGY
|
Simile a PATH_CHEAPEST_ARC , tranne per il fatto che i costi dell'arco vengono valutati utilizzando la funzione trasmessa a SetFirstSolutionEvaluator() . |
SAVINGS
|
Algoritmo di risparmio (Clarke e Wright). Riferimento Clarke, G. & Wright, J.W. "Scheduling of Vehicles from a Central Depot to a Number of Delivery Point", Research Research, Vol. 12, 1964, pp. 568-581. |
SWEEP
|
Algoritmo Sweep (Wren & Holliday). Fare riferimento ad Anthony Wren e Alan Holliday Pianificazione computerizzata dei veicoli da uno o più depositi a un certo numero di punti di consegna Ricerca operativa trimestrale (1970-1977), Vol. 23, n. 3 (sett., 1972), pp. 333-344. |
CHRISTOFIDES
|
Algoritmo Christofides (in realtà una variante dell'algoritmo Christofides che utilizza una corrispondenza massima anziché una corrispondenza massima, che non garantisce il fattore 3/2 dell'approssimazione di un commerciale viaggiatore della metrica). Funziona con i modelli di routing generici dei veicoli estendendo un percorso finché non è possibile inserire nodi. Riferimento a Nicos Christofides, analisi peggiore di una nuova euristica per il problema del venditore di viaggi, Report 388, Graduate School of Industrial Administration, CMU, 1976. |
ALL_UNPERFORMED
|
Rendi inattivi tutti i nodi. Trova una soluzione solo se i nodi sono facoltativi (sono elementi di un vincolo di disgiunzione con un costo della sanzione limitato). |
BEST_INSERTION
|
Crea una soluzione in modo iterativo inserendo il nodo più economico nella posizione più economica. Il costo di inserzione si basa sulla funzione di costo globale del modello di routing. A partire dal 2/2012, funziona solo su modelli con nodi facoltativi (con costi di sanzione limitati). |
PARALLEL_CHEAPEST_INSERTION
|
Crea una soluzione in modo iterativo inserendo il nodo più economico nella posizione più economica; il costo di inserzione si basa sulla funzione di costo dell'arco. È più veloce di BEST_INSERTION . |
LOCAL_CHEAPEST_INSERTION
|
Crea una soluzione in modo iterativo inserendo ogni nodo nella posizione più economica; il costo di inserzione si basa sulla funzione di costo dell'arco. Differenza da PARALLEL_CHEAPEST_INSERTION per il nodo selezionato per l'inserimento; qui i nodi sono considerati nel loro ordine di creazione. È più veloce di PARALLEL_CHEAPEST_INSERTION . |
GLOBAL_CHEAPEST_ARC
|
Collega in modo iterativo due nodi che generano il segmento di percorso più economico. |
LOCAL_CHEAPEST_ARC
|
Seleziona il primo nodo con un successore non associato e collegalo al nodo che produce il segmento di route più economico. |
FIRST_UNBOUND_MIN_VALUE
|
Seleziona il primo nodo con un successore non associato e collegalo al primo nodo disponibile. Equivale alla strategia CHOOSE_FIRST_UNBOUND combinata con ASSIGN_MIN_VALUE (cfr. constraint_solver.h). |
Stato ricerca
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())
Verrà stampato 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
dopo aver chiamato RoutingModel.Solve() , tranne per il fatto che non è stato raggiunto
un obiettivo locale. Lasciando più tempo sarebbe possibile migliorare la soluzione. |
3 |
ROUTING_FAIL : non è stata trovata alcuna soluzione al problema. |
4 |
ROUTING_FAIL_TIMEOUT : limite di tempo raggiunto prima di trovare una soluzione. |
5 |
ROUTING_INVALID : modello, parametri o flag modello non validi. |
6 |
ROUTING_INFEASIBLE : problema dimostrato impossibili. |
Opzioni di ricerca locale
La tabella seguente elenca le opzioni per le strategie di ricerca locale (chiamate anche metaeuristiche). Consulta Modificare la strategia di ricerca per alcuni esempi di impostazione di queste opzioni.
Opzione | Descrizione |
---|---|
AUTOMATIC |
Consente al risolutore di selezionare la metaeuristica. |
GREEDY_DESCENT |
Accetta di migliorare (ridurre i costi) i vicini di ricerca locali fino al raggiungimento di un minimo locale. |
GUIDED_LOCAL_SEARCH |
Utilizza la ricerca locale guidata per eseguire l'escape dei minimi locali. (cfr. Ricerca locale guidata). In genere, si tratta della metaeuristica più efficiente per gli itinerari in auto. |
SIMULATED_ANNEALING |
Utilizza la ricottura simulata per evitare i minimi locali (cfr. ricordatura simulata). |
TABU_SEARCH |
Utilizza la ricerca tabu per eseguire l'escape dei valori minimi locali (cfr. Ricerca Tabu). |
GENERIC_TABU_SEARCH |
Utilizza la ricerca tabu sul valore obiettivo della soluzione per evitare i minimi locali. |
Controllo della propagazione
Nome | Tipo | Predefinito | Descrizione |
---|---|---|---|
use_full_propagation
|
bool | true | Utilizza vincoli con propagazione completa nel modello di routing (anziché solo la propagazione light). La propagazione completa è necessaria solo quando si utilizza la ricerca incentrata sulla profondità o per i modelli che richiedono una propagazione elevata per finalizzare il valore delle variabili secondarie. Se imposti questa opzione su True, la ricerca verrà rallentata nella maggior parte dei casi e verrà aumentato il consumo di memoria in tutti i casi. |