La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Lezione n°16 Prof.ssa Rossella Petreschi

Presentazioni simili


Presentazione sul tema: "Lezione n°16 Prof.ssa Rossella Petreschi"— Transcript della presentazione:

1 Lezione n°16 Prof.ssa Rossella Petreschi
Lezione del 28/11/2014 del Corso di Algoritmica

2 Forza Bruta vs Backtrack
Genera tutte le t-ple m1,m2,…mk Per ogni t-pla verifica se soddisfa la funzione P (x1,x2,…xn) Salva le t-ple che rappresentano la soluzione ottima Backtrack: Costruisce i vettori soluzione una componente alla volta All’i-esimo passo, confronta il sottovettore v= (x1,x2,…xi) con la funzione parziale P (x1,x2,…xi) per vedere se c’è una possibilità che v diventi sottovettore di una soluzione ottima.Se questa possibilità non c’è interrompi la costruzione di quell’ipotesi di soluzione. Backtrack riduce il numero di test da fare per trovare le soluzioni ottime. 2

3 Il metodo in generale Un algoritmo di backtracking è un metodo di analisi esaustiva, ma controllata, applicabile ad una classe di problemi di ricerca le cui soluzioni sono vettori (x1 x2 … xi …xf), 1≤f≤n, soddisfacenti alcuni vincoli predefiniti. Ogni xi appartiene ad un insieme finito linearmente ordinato Xi. Un algoritmo di backtracking genera, esplicitamente o implicitamente, un albero i cui nodi rappresentano t-ple parzialmente costruite durante i vari passi dell’algoritmo. La radice contiene la t-pla vuota. 3

4 Il metodo Quando si applica: Ricercare un insieme di soluzioni
in genere la soluzione è esprimibile come t-pla (x1,x2,…xn) con xi in un insieme finito Si Ricercare una soluzione ottima soddisfacente alcuni vincoli ovvero massimizare (o minimizzare) una funzione P (x1,x2,…xn) Esempio: Problema: ordinare un vettore a di n interi Soluzione: esprimibile come t-pla (xi è l’indice in a dell’i-esimo elemento più piccolo) La funzione P è la diseguaglianza a(xi) ≤ a(xi+1), 1≤i<n L’ordinamento non è un problema che si risolve normalmente con il backtracking, ma è un tipico problema la cui soluzione è una t-pla.

5 Vincoli Vincoli espiciti:
Sono regole che restringono xi a prendere valori in un intervallo limitato e dipendono dalla particolare istanza I del problema considerato. Lo spazio delle soluzioni per I è costituito da tutte le t-ple che soddisfano i vincoli espliciti Esempi: xi ≤ 0; li ≤ xi≤ ri ; xi in Si ={0.1} Vincoli impliciti: Sono regole che stabiliscono quali fra le t-ple nello spazio delle soluzioni di I soddisfano la funzione P; un vincolo implicito esprime il modo in cui le variabili xidebbono correlarsi. 5

6 Dalla t-pla j-esima alla j+1-esima
A partire dalla t-pla j-esima w = (x1 x2 … xj) , si genera la t-pla (j+1)-esima v = (x1 x2 … xj+1) con xj+1 primo elemento in Xj+1 non ancora considerato. Si ha: v è una soluzione finale del problema: la soluzione viene memorizzata (termina se una soluzione è sufficiente) v è una soluzione parziale del problema: l’algoritmo passa dalla t-pla j+1-esima alla t-pla j+2-esima v non è né soluzione finale né soluzione parziale: - se vi sono ancora elementi da scegliere in Xj+1, si prende il primo disponibile come nuovo xj+1 e si torna al passo 1; - se non vi sono più elementi da scegliere in Xj+1, ,si torna alla t-pla j-esima, si sostituisce xj con il primo elemento elegibile in Xj e si torna al passo 1. Se ancora non vi sono più elementi da scegliere, si torna alla t-pla (j-1)-esima e si sostituisce xj-1, se possibile. 6

7 Il problema delle 8 regine
Come disporre otto regine su una scacchiera (8×8) in modo tale che nessuna possa mangiarne un’altra? REGOLE: la regina si può muovere in orizzontale, in verticale e in diagonale di un qualunque numero di caselle, di conseguenza ogni regina deve avere la propria riga, la propria colonna e le proprie diagonali libere. Le dodici soluzioni base del problema delle 8 regine da cui, per riflessione e rotazione, si ottengono tutte le 92 soluzioni (1874, Gleisher e Gunther) 7

8 Una soluzione 8

9 Caso (4x4) 9

10 Caso (4x4) 10

11 Backtrack per le 8 regine
Vincoli espliciti: Si ={1,2,3,4,5,6,7,8} 1 ≤ i ≤ 8 Conseguentemente lo spazio delle soluzioni è di 88 8-ple Vincoli impliciti: Tutte le regine debbono essere in colonne differenti Conseguentemente lo spazio delle soluzioni è costituito da tutte le permutazioni delle 8-ple {1,2,3,4,5,6,7,8} e quindi è ridotto da 88 a 8! Tutte le regine debbono essere in diagonali differenti 11

12 Regine sulle stesse diagonali
La scacchiera S è rappresentata da una matrice quadrata di dimensioni nxn. Le righe e le colonne sono numerate da 1ad n. si considerino due regine nelle posizioni (i,j) e (k,l), rispettivamente. Tutte le diagonali dall’alto a sinistra verso in basso a destra mantengono costante numero colonna - numero riga per esempio S[2,1], S[3,2], S[4,3] hanno 1 quale valore costante pari alla differenza fra numero di riga e numero di colonna. Tutte le diagonali dall’alto a destra verso in basso a sinistra mantengono costante numero colonna + numero riga per esempio S[2,4], S[3,3], S[4,2] hanno 6 quale valore costante pari alla somma fra numero di riga e numero di colonna. Quindi due regine sono sulla stessa diagonale sess j-l =i-k Dato che vale o (1) i-j = k-l o (2) i+j = k+l Dalla (1) si ha j-l = i-k e dalla (2) si ha j-l = k-i 12

13 Procedura n-regine Procedura N-regine(k,n) stampa tutte i possibili posizionamenti senza conflitto di n regine su una scacchiera nxn (si inizia con k=1) procedura N-regine(k,n) For i=1 to n do if PLACE(k,i) then x[k] = i; if k=n then write x[1…n]; else N-regine(k+1,n); 13

14 Controllo del posizionamento
PLACE(k,i) ritorna vero se la k-esima regina può essere posizionata nella k-esima riga e i-esima colonna della matrice rappresentativa della scacchiera; la regina in posizione (k,i) non si trovi sulla stessa diagonale con le regine in posizione (j, x(j)); ritorna falso, altrimenti. PLACE(k,i) For j=1 to k-1 do l = x[j] if l = i or j-k=i-l then return false; return true; 14

15 Somma di sottoinsiemi INPUT: m>0 , W =(w1w2 … wn), wi>0 (1≤i≤n)
PROBLEMA: trovare tutti i sottoinsiemi di W la cui somma sia uguale ad m ESEMPIO: dati (w1w2 w3 w4 ) = (11,13,24,7) e m =31, i sottoinsiemi cercati sono (11,13,7) e (24,7) Queste due soluzioni si possono indicare come t-ple: xi = indici dei wi scelti (1,2,4) e (3,4), ovvero con t-ple di diversa dimensione; xi = 1 / 0 a seconda che wi sia stato selezionato o no (1,1,0,1) e (0,0,1,1), in questo caso le t-ple sono di dimensione fissata uguale ad n. VINCOLI ESPLICITI: xi in j/ j intero, 1≤j≤k e 1≤k≤n xi in 0,1 VINCOLI IMPLICITI: xi ≠ xj e xi ≤ xi+1 per 1≤ i <k e 1≤j≤k ∑wixi ≤ m 1≤ i <k, 1≤k≤n SPAZIO DELLE SOLUZIONI: 2n t-ple distinte 15

16 La tecnica del Branch and Bound
E’ usata per problemi di ottimizzazione. Rispetto al Backtracking richiede in più per ogni nodo: di poter calcolare un limite superiore (o inferiore) rispetto al valore delle soluzioni ammissibili raggiungibili da quel nodo; di conoscere il valore della migliore soluzione calcolata fino a quel momento. Una soluzione ottima è una soluzione ammissibile che raggiunge il miglior valore per la funzione obiettivo. 16

17 L’albero degli stati Nell’albero degli stati classifichiamo i nodi in tre tipi a seconda che rappresentino genericamente uno stato del problema, uno stato soluzione o uno stato risposta. Uno stato soluzione è uno stato s del problema per il quale il cammino da dalla radice ad s definisce una t-pla nello spazio delle soluzioni (spazio delle soluzioni:tutti i cammini dalla radice agli altri nodi). Uno stato risposta è uno stato soluzione la cui t-pla appartiene all’insieme delle soluzioni. Una volta che si è stabilita la natura dell’albero degli stati, il problema si risolve generando sistematicamente gli stati del problema, determinando quali di questi siano stati soluzione e infine quali siano stati risposta 17

18 Come generare l’albero degli stati
NodoE: Nodo vivo o da espandere, ovvero nodo i cui figli debbono ancora essere generati. Nodo morto: nodo che non può più essere espanso perché non ha figli da generare o perché una qualche funzione soglia lo ha ucciso. Backtracking: generazione dell’albero tramite DFS con funzione soglia. Branch and Bound: tutti i figli di un nodoE sono generati prima che un altro nodo sia considerato da espandere. La lista dei nodi da espandere può essere memorizzata tramite struttura FIFO (BFS) o tramite struttura LIFO(DS) 18

19 Criteri di terminazione
L’espansione dell’albero su un ramo termina quando: il valore del limite in quel nodo non è migliore di quello della migliore soluzione ottenuta fino a quel momento; la soluzione rappresentata dal nodo viola i vincoli (non è ammissibile); il nodo non ha più figli verso cui espandersi. 19


Scaricare ppt "Lezione n°16 Prof.ssa Rossella Petreschi"

Presentazioni simili


Annunci Google