La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Dallalgoritmo minimax allalgoritmo alfa-beta. MINIMAX int minimax(stato, livello) { if((livello == max_livello) || condizione_uscita(stato)) { CAMMINO.

Presentazioni simili


Presentazione sul tema: "Dallalgoritmo minimax allalgoritmo alfa-beta. MINIMAX int minimax(stato, livello) { if((livello == max_livello) || condizione_uscita(stato)) { CAMMINO."— Transcript della presentazione:

1 Dallalgoritmo minimax allalgoritmo alfa-beta

2 MINIMAX int minimax(stato, livello) { if((livello == max_livello) || condizione_uscita(stato)) { CAMMINO = NULL; return(statica(stato)); } else { lista_figli = genera_figli(stato); if(lista_figli == NULL)// Lista vuota, non ci sono figli { CAMMINO = NULL; return(VALORE_DI_FALLIMENTO); }

3 if((livello % 2) == 0)// livello e Giocatore sono in corrispondenza { max = - ; for each figlio in lista_figli { valutazione = minimax(figlio, livello + 1); if(valutazione > max) { max = valutazione; migliore = figlio; } inserisci(migliore, CAMMINO); return(max); }

4 else { min = + ; for each figlio in lista_figli { valutazione = minimax(figlio, livello + 1); if(valutazione < min) { min = valutazione; migliore = figlio; } inserisci(migliore, CAMMINO); return(min); }

5 Considerazioni Se a un livello superiore si sta minimizzando, a un livello inferiore in cui si massimizza è inutile continuare la ricerca se si è ottenuto un max provvisorio superiore o uguale ad una soglia_max, coincidente con il minimo del livello superiore. Se a un livello superiore si sta massimizzando, a un livello inferiore in cui si minimizza è inutile continuare la ricerca se si è ottenuto un min provvisorio inferiore o uguale ad una soglia_min, coincidente con il massimo del livello superiore.

6 ALFA-BETA provvisorio int minimax(stato, livello) { if((livello == max_livello) || condizione_uscita(stato)) { CAMMINO = NULL; return(statica(stato)); } else { lista_figli = genera_figli(stato); if(lista_figli == NULL)// Lista vuota, non ci sono figli { CAMMINO = NULL; return(VALORE_DI_FALLIMENTO); }

7 if((livello % 2) == 0)// livello e Giocatore sono in corrispondenza { max = - ; finito = FALSE; for each figlio in lista_figli && !finito { valutazione = minimax(figlio, livello + 1); if(valutazione > max) { max = valutazione; migliore = figlio; } if(max soglia_max)// a un livello superiore, si sta minimizzando e si è già raggiunto il valore soglia_max (coincide con ) { finito = TRUE; max = soglia_max; } inserisci(migliore, CAMMINO); return(max); }

8 else { min = + ; finito = FALSE; for each figlio in lista_figli && !finito { valutazione = minimax(figlio, livello + 1); if(valutazione < mim) { min = valutazione; migliore = figlio; } if(valutazione soglia_min)// a un livello superiore si sta massimizzando e si è già raggiunto il valore soglia_min (coincide con α) { finito = TRUE; min = soglia_min; } inserisci(migliore, CAMMINO); return(min); }

9 Ulteriori considerazioni soglia_min la chiamiamo alfa, soglia_max la chiamiamo beta: devono essere passate come parametri. La variabile max può essere inizializzata con alfa (che in fase di prima chiamata dovrà essere posta a - e che via via riflette il livello di minimo raggiunto). La variabile min può essere inizializzata con beta (che in fase di prima chiamata dovrà essere posta a + e che via via riflette il livello di massimo raggiunto).

10 ALFA-BETA seconda approssimazione int minimax(stato, livello, alfa, beta) { if((livello == max_livello) || condizione_uscita(stato)) { CAMMINO = NULL; return(statica(stato)); } else { lista_figli = genera_figli(stato); if(lista_figli == NULL)// Lista vuota, non ci sono figli { CAMMINO = NULL; return(VALORE_DI_FALLIMENTO); }

11 if((livello % 2) == 0)// livello e Giocatore sono in corrispondenza { max = alfa; finito = FALSE; for each figlio in lista_figli && !finito { valutazione = minimax(figlio, livello + 1, alfa, beta); if(valutazione > max) { max = valutazione; migliore = figlio; } if(max beta)// a un livello superiore, si sta minimizzando e si è già raggiunto il valore soglia_max (coincide con ) { finito = TRUE; max = beta; } inserisci(migliore, CAMMINO); return(max); }

12 else { min = beta; finito = FALSE; for each figlio in lista_figli && !finito { valutazione = minimax(figlio, livello + 1, alfa, beta); if(valutazione < mim) { min = valutazione; migliore = figlio; } if(min alfa)// a un livello superiore si sta massimizzando e si è già raggiunto il valore soglia_min (coincide con α) { finito = TRUE; min = alfa; } inserisci(migliore, CAMMINO); return(min); }

13 Considerazioni finali Visto luso che se ne fa e i valori assunti, la variabile max può essere chiamata direttamente alfa e min direttamente beta. Lalgoritmo finale è il seguente:

14 ALFA-BETA definitivo int alfa_beta(stato, livello, alfa, beta) { if((livello == max_livello) || condizione_uscita(stato)) { CAMMINO = NULL; return(statica(stato)); } else { lista_figli = genera_figli(stato); if(lista_figli == NULL)// Lista vuota, non ci sono figli { CAMMINO = NULL; return(VALORE_DI_FALLIMENTO); }

15 if((livello % 2) == 0)// livello e Giocatore sono in corrispondenza { finito = FALSE; for each figlio in lista_figli && !finito { valutazione = alfa_beta(figlio, livello + 1, alfa, beta); if(valutazione > alfa) { alfa = valutazione; migliore = figlio; } if(alfa beta)// a un livello superiore, si sta minimizzando e si è già raggiunto il valore soglia_max (coincide con ) { finito = TRUE; alfa = beta; } inserisci(migliore, CAMMINO); return(alfa); }

16 else { finito = FALSE; for each figlio in lista_figli && !finito { valutazione = alfa_beta(figlio, livello + 1, alfa, beta); if(valutazione < beta) { beta = valutazione; migliore = figlio; } if(beta alfa)// a un livello superiore si sta massimizzando e si è già raggiunto il valore soglia_min (coincide con α) { finito = TRUE; beta = alfa; } inserisci(migliore, CAMMINO); return(beta); }


Scaricare ppt "Dallalgoritmo minimax allalgoritmo alfa-beta. MINIMAX int minimax(stato, livello) { if((livello == max_livello) || condizione_uscita(stato)) { CAMMINO."

Presentazioni simili


Annunci Google