È una variante del backtracking
Principio: prima riesco a dimostrare inconsistenza, più sottoalberi evito di visitare
Durante la visita, creo nuovi vincoli
Mi trovo in questa situazione
(parti dell'albero sono state omesse)
Mi accorgo che le due inconsistenze richedono soltanto i valori x1=1 e x4=2
Creo un nuovo vincolo:
Durante il resto della ricerca, si potrebbe incontrare un nodo cosí:
In questo caso, il nuovo vincolo permette di tagliare subito la ricerca
Se dopo aver scelto x4=2 scegliessi x5 come variabile da assegnare, otterrei lo stesso risultato
Però:
Ci sono due fattori contrastanti da tenere in considerazione:
Quindi, vanno creati vincoli solo se si ritiene che la loro utilità superi il costo di doverli verificare tutte le volte
I vincoli che vengono creati sono del tipo: una singola tupla di valori non è ammessa
Se un vincolo è più corto, allora:
La cosa importante è la 1. La 2 è del tutto secondaria
Si creano solo i vincoli con un massimo numero di variabili
Esempio: se si sceglie 3, si ha il 3-bounded learning
Si memorizzano solo vincoli che hanno al più tre variabili
Si scartano vincoli appresi che non sembrano più utili
In particolare, se un vincolo vieta un assegnamento che è molto diverso dall'assegnamento parziale, allora è difficile che possa servire ancora
relevance bounded learning di ordine i=si scartano i vincoli appresi il cui assegnamento vietato differisce dall'assegnamento parziale per al massimo i valutazioni
Distanza=valori assegnati ma diversi
I sistemi di backjumping visti producono insiemi di variabili i cui valori attuali bastano a garantire l'inconsistenza
Si possono usare i vincoli associati a questi assegnamenti
Primo sistema visto: in ogni nodo ho un insieme di variabili al di sopra del nodo che bastano a garantire l'inconsistenza di tutte le foglie al di sotto
I valori attuali di queste variabili sono quindi inconsistenti con i vincoli
Si può aggiungere il vincolo che corrisponde a questo assegnamento parziale