Che cos'è il valore meno vincolante?


11

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?


AI: AMA (pp. 228) menziona che il valore euristico meno vincolante è stato proposto da Haralick ed Elliot (1980). L'articolo (che si trova qui ) utilizza un linguaggio molto diverso rispetto a quello utilizzato nell'IA: AMA e non riesco a determinare quale sezione si riferisce all'euristica LCV.
Ryan,

Risposte:


3

vedi questo link:

https://people.cs.pitt.edu/~wiebe/courses/CS2710/lectures/constraintSat.example.txt

Prima seleziona la variabile "O" e quindi verifica "O" con tutti i suoi valori legali "i" per vedere il numero di riduzioni sui vicini di "O" "N". Aggiunge tutti loro. e seleziona una "i" che provoca riduzioni minori:

   sums = {0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0}
   For i from 0 to 9:  
     plug "o=i" into the constraint formulas
     For each neighbor "N" of "o" in the constraint graph:
       sums[i] += the number of values remaining for "N"

Seleziona "i" in modo che:

sums[i] = MAX{sums[i] | for all "i" that is a member of "O",s valid values}

Spero che questo possa aiutarti a trovare la tua risposta!


1
Questo non rispondeexplain how that version of least-constraining-value would actually yield an improvement?
skrtbhtngr

1

Penso che la cosa principale qui sia che queste euristiche vengano applicate a seconda del compito per cui è scritto il solutore. E se c'è la possibilità che se il valore selezionato di una variabile non lascia un singolo valore nel dominio di un'altra variabile (diciamo che abbiamo un problema fortemente vincolato con una sola soluzione), allora la soluzione si fermerà . E una ricerca casuale può seguire la strada giusta che porta a una decisione e quella sbagliata. E se va storto, dovrai fare il backtracking (vedi backjumping diretto dal conflitto), e ci vorrà del tempo di calcolo. Ma l'algoritmo che utilizza l'euristica LCV ha maggiori probabilità di seguire un percorso più corretto e non sono richiesti rendimenti. Ma se c'è un problema limitato, penso che sarà molto simile alla ricerca casuale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.