Nei problemi di soddisfazione dei vincoli, l'euristica può essere utilizzata per migliorare le prestazioni di un risolutore di bactracking. Tre euristiche comunemente indicate per semplici solutori di backtracking sono:
- Valori minimi rimanenti (quanti valori sono ancora validi per questa variabile)
- Grado euristico (quante altre variabili sono interessate da questa variabile)
- Valore minimo vincolante (quale valore lascerà il maggior numero di altri valori per altre variabili)
I primi due sono piuttosto ovvi e semplici da implementare. Per prima cosa scegli la variabile che ha il minor numero di valori rimasti nel suo dominio e, se ci sono legami, scegli quella che influenza la maggior parte delle altre variabili. In questo modo se un passaggio genitore nel solutore ha scelto una cattiva assegnazione, è probabile che lo scopriate prima e quindi risparmiate tempo se scegliete la variabile con il minor numero di valori rimasti che influisce sulla maggior parte delle altre cose.
Questi sono semplici, chiaramente definiti e facili da implementare.
Il valore meno vincolante non è chiaramente definito, ovunque io abbia guardato. Intelligenza artificiale: un approccio moderno (Russel & Norvig) dice solo:
Preferisce il valore che esclude il minor numero di scelte per le variabili vicine nel grafico del vincolo.
La ricerca del "valore meno vincolante" ha prodotto solo molte presentazioni universitarie basate su questo libro di testo, senza ulteriori informazioni su come questo sarebbe fatto algoritmicamente.
L'unico esempio fornito per questa euristica è un caso in cui una scelta di valore elimina tutte le scelte per una variabile vicina e l'altra no. Il problema con questo esempio è che si tratta di un caso banale, che verrebbe eliminato immediatamente quando la potenziale assegnazione viene verificata per coerenza con i vincoli del problema. Quindi, in tutti gli esempi che ho trovato, l'euristica dal valore meno vincolante in realtà non ha giovato in alcun modo alle prestazioni del solutore, ad eccezione di un piccolo effetto negativo derivante dall'aggiunta di un controllo ridondante.
L'unica altra cosa a cui riesco a pensare sarebbe quella di testare le possibili assegnazioni delle variabili vicine per ogni assegnazione e contare il numero di possibili assegnazioni dei vicini esistenti per ogni possibile assegnazione di questa variabile, quindi ordinare i valori per questa variabile in base al numero di incarichi vicini disponibili se viene scelto quel valore. Tuttavia, non vedo come ciò offrirebbe un miglioramento rispetto a un ordine casuale, poiché ciò richiede sia il test di numerose combinazioni di variabili sia l'ordinamento in base ai risultati del conteggio.
Qualcuno può dare una descrizione più utile del valore meno vincolante e spiegare in che modo tale versione del valore meno vincolante avrebbe effettivamente prodotto un miglioramento?