Finora, dato un insieme di vincoli si cercava una soluzione
Se non esiste, ha senso considerare una valutazione che soddisfa più vincoli possibili
In generale, i vincoli possono avere importanza diversa:
Anche tra i vincoli soft alcuni vincoli possono essere più importanti di altri
Per questo, si assegnano pesi ai vincoli
Data una soluzione ai vincoli hard, il suo costo è la somma dei pesi dei vincoli violati da essa
Si tratta quindi di trovare una soluzione a costo minimo
Si può usare il backtracking per trovare la soluzione ottima
Si mantiene il la soluzione migliore trovata finora e il suo costo
Quando si trova una soluzione, non ci si ferma ma:
Simile alla variante di backtracking vista prima, ma con una aggiunta che riduce la ricerca
Data una valutazione parziale, si può valutare un limite inferiore al costo di ogni valutazione totale che la estende
Infatti, se la valutazione parziale viola dei vincoli, questi sono violati anche da tutte le valutazioni totali che la estendono
Riduzione ricerca:
Rispetto al backtracking, le varianti sono
Alla fine, la soluzione memorizzata è una di quelle ottime
Invece di usare il costo di una soluzione parziale, posso usare una limite inferiore al costo delle soluzioni che la estendono
Questo limite funziona se:
La prima condizione deve essere rispettata per forza, altrimenti il metodo non funziona
Rispettando la prima condizione, va scelto un limite che sia il puù alto possibile
Fornisce un limite al costo delle valutazioni parziali che può essere più alto di quello visto prima
Guarda anche i vincoli che hanno variabili non assegnate
Il sistema precedente "assumeva" che i vincoli non valutabili si potevano soddisfare
Il sistema della prima scelta va a vedere se questi vincoli presi uno per volta, sono in effetti soddisfabili
Vincoli x<y e y<z con peso uno, domini tutti uguali ad {0,1}, valutazione x=0,z=0,
Con il metodo di prima, il costo era zero, dato che la valutazione non viola nessun vincolo
Con questo metodo
La valutazione parziale ha quindi peso uno invece di zero
Si va a guardare un vincolo per volta
I valori delle variabili non valutate potrebbero quindi essere diversi per i vari vincoli
Esempio: x<y, y<z con valutazione x=0,y=1
Non importa se questi valori di y sono diversi: nel valutare il peso si fa come se i due vincoli fossero soddisfatti
Motivo: cercare valori uguali per i vincoli è come risolvere il problema, mentre qui voglio una stima rapida da poter effettuare in ogni nodo dell'albero
È un meccanismo ancora più complicato
Si fa backtracking in ordine fisso
Sia x1,...,xn questo ordine
Si risolvono nell'ordine i sottoproblemi su variabili xi,...,xn per i che va da n ad 1
In altre parole: ogni sottoproblema si ottiene eliminando le variabili x1,...,xi-1 e tutti i vincoli che le contengono
Per risolvere un qualsiasi sottoproblema sulle variabili xi,...,xn, serve un limite per le valutazioni sulle variabili xi,...,xj
Come limite si usa la somma di:
Rispetto all'algoritmo base, qui si migliora la soluzione usando l'ottimo del sottoproblema, che è stato già trovato in precedenza
Notare che il sottoproblema non include le variabili xi,...,xj
Comunque serve una approssimazione