SlideShare a Scribd company logo
1 of 3
Download to read offline
56 Numero 85 - Maggio 2001Dev. Developing Software & Solutions
Umano vs Computer
La sfida
(Parte 1)
Una delle tecniche utilizzate nei giochi a due avversari in cui uno è una macchina è quella del
min-max. Esaminiamola e costruiamone una implementazione object oriented in C++
Francesco
Sblendorio
è studente di
Informatica presso
l’Università degli Studi
di Bari. Si occupa di
programmazione in C/
C++, Visual Basic e di
problematiche legate
al Web. Può essere
contattato tramite e-
mail all’indirizzo
sblendorio@infomedia.it
Giovanni Vitiello
è studente di
Informatica presso
l’Università degli Studi
di Bari. I suoi interessi
principali sono le
tecnologie Object-
Oriented e lo sviluppo
di applicazioni web-
based. Può essere
contattato tramite e-
mail all’indirizzo
vitiello@infomedia.it
di Francesco Sblendorio e Giovanni Vitiello
hissà quante volte siamo stati battuti dal
“computer” in una partita a scacchi o
giochi simili e ci siamo chiesti come esso
è in grado di prendere delle decisioni. In que-
sta serie di articoli rispondiamo a questa do-
manda. Prima però diamo uno sguardo a delle
basi teoriche che ci permetteranno di capire a
fondo questi meccanismi.
SISTEMI GUIDATI DA PATTERN
Molte applicazioni dell’intelligenza artificia-
le, a differenza delle applicazioni tradizionali,
non seguono uno schema procedurale: in esse
non c’è bisogno di specificare passo dopo passo
le operazioni da compiere, ma piuttosto segui-
re una logica cosiddetta pattern-directed.
Tale logica consente, in base ad una situazio-
ne corrente ed alle regole conosciute, di ge-
nerare nuove situazioni finché non viene rag-
giunta una condizione di terminazione. Il ter-
mine pattern indica una classe di situazioni pos-
sibili che hanno qualcosa in comune.
Un sistema pattern-directed è formato da:
una serie di moduli (chiamati pdm) che pos-
sono essere attivati dai pattern;
lo stato (o situazione) corrente del sistema
(chiamato database globale);
una strategia di controllo (l’algoritmo) che
gestisce l’attivazione e la selezione dei pdm.
IL PROBLEMA DEL PATTERN MATCHING
L’operazione fondamentale per la risoluzione
di un problema di intelligenza artificiale è quel-
la denominata pattern matching. Questa, dati in
input una situazione ed un pattern, fornisce in
output:
1. una risposta booleana che dice se la situa-
zione data fa parte della classe di situazio-
ne rappresentata dal pattern;
2. una serie di sostituzioni da effettuare sul
pattern per renderlo uguale alla situazione
data.
Chiariamo il tutto con un esempio (usiamo
una rappresentazione a stringhe delle situazioni
e dei pattern e indichiamo con lettere maiusco-
le le variabili e con le minuscole le costanti):
Situazione: “abbcdebb”
Pattern 1: “XZYcdeYY”
Pattern 2: “aXXYdeXZ”
Pattern 3: “XYZcZebb”
In questo esempio i pattern 1 e 2 “matchano”
(ovvero sono confrontabili) con la situazione,
mentre il pattern 3 no.
Infatti applicando l’operatore di pattern ma-
tching alla situazione ed al pattern 1 ricaviamo
la sostituzione “X=a, Y=b, Z=b”, per il pat-
tern 2 ho “X=b, Y=c, Z=b”, mentre per il
pattern 3 avrei “Z=b” e contemporaneamente
“Z=d”, che è contraddittorio.
SISTEMI A PRODUZIONI
Un sistema a produzioni è un particolare tipo
di sistema pattern-directed in cui i pdm sono detti
regole e sono costituiti da coppie antecedente-conse-
guente ove l’antecedente è un pattern. Nei siste-
mi a produzioni separiamo la fase di esame dei
dati da quella di modifica. La prima fase ha luo-
go nell’antecedente (detto anche LHS ovvero Left
Hand Side, parte sinistra della regola) mentre
la seconda ha luogo nel conseguente (RHS, Right
Hand Side, parte destra delle regola). Il fun-
zionamento di questi sistemi si basa su un ciclo
denominato recognize-act che consiste in:
1. ricercare l’insieme delle regole applicabili allo sta-
to corrente;
2. scegliere quale applicare tramite la strategia di
controllo;
3. eseguire le azioni che la regola prevede nella
parte destra.
Chissà quante volte siamo stati
battuti dal “computer” in una
partita a scacchi o giochi simili
Linux_85.PM6 12/04/01, 16.1656
57 Numero 85 - Maggio 2001Dev. Developing Software & Solutions
La prima mossa migliore, selezionata
nell’albero di tutte quelle “possibili”
Ordinamento dei nodi in base al livello
(pari o dispari)
Procedere del valore retropropagato du-
rante l’esecuzione dell’algoritmo min-max
Facciamo un esempio. Supponiamo di avere le
seguenti regole (regole di produzione):
ABBAd -> BBAAh
ABBCd -> CBBBh
ArtBC -> chABC
Supponiamo anche che lo stato corrente sia rap-
presentato dalla stringa “ottod”. L’insieme delle re-
gole applicabili è costituito dalle prime due e sup-
poniamo che la strategia di controllo selezioni la
prima. Un’azione consiste nei seguenti passi:
1. pattern matching dello stato corrente con la parte
sinistra della regola;
2. applicazione della sostituzione ottenuta nel pas-
so precedente alla parte destra;
3. il nuovo stato corrente diventa la parte destra
con le sostituzioni appena effettuate.
Nel nostro caso eseguendo l’azione specificata
dalla regola selezionata (la prima) ottengo la strin-
ga “ttooh”.
STRATEGIA DI CONTROLLO:
ALGORITMO DEL MIN-MAX
Nei giochi a due avversari che utilizzano si-
stemi pattern-directed la strategia di controllo
principale è chiamata min-max; Questa strate-
gia fa uso di un altro concetto, quello di fun-
zione euristica. Tale funzione ha come argomento
uno stato del sistema e restituisce un valore
numerico che rappresenta la “bontà” dello sta-
to relativa al giocatore.
Per convenzione, tanto più grande è questo
valore, tanto più la situazione è vantaggiosa
per il “giocatore computer” (chiamato conven-
zionalmente max). Al contrario più la situazio-
ne è vantaggiosa per il “giocatore umano”
(chiamato min) tanto più piccolo è questo va-
lore. Nel caso in cui la situazione sia vincente
per max, la funzione varrà “+infinito”; in caso
contrario, se la situazione è vincente per min,
varrà “-infinito”.
(Faccio notare come per situazione vantag-
giosa non si intende che il giocatore abbia vin-
to. In tal caso, si dice appunto che la situazio-
ne è vincente.)
Lo scopo dell’algoritmo di min-max è quello
di fornire la migliore prima mossa successiva
avendo in input una certa configurazione di
gioco. (vedi Figura 1).
Questo algoritmo utilizza tutti i concetti pre-
cedentemente esposti: il database globale, che
rappresenta la situazione del gioco in un de-
terminato istante e le regole, che rappresentano
le mosse e la funzione euristica.
La strategia min-max, partendo da uno stato
iniziale, attiva tutte le regole ad esso applica-
bili generando nuovi stati-figli, per poi ripete-
re il procedimento ricorsivamente su tutti que-
sti stati così generati. Procedendo in questo
modo, viene prodotto un albero su cui viene
effettuata la ricerca della migliore prima mos-
sa. La crescita di quest’albero è esponenziale;
se non si ponesse un limite di profondità i co-
sti della generazione, sia in termini di spazio che
in termini di tempo, sarebbero insostenibili.
Per ovviare a questo problema si impone un
limite di profondità, detto depth bound.
Notiamo che ai livelli pari dell’albero corri-
spondono turni di gioco per max, mentre ai
livelli dispari turni di gioco per min (la radice
è compresa, in quanto è al livello 0).
Conseguentemente, i successori di uno stato
in cui il turno è di max saranno ordinati in modo
decrescente in base alla funzione euristica, in
modo tale che siano esaminati per primi gli
stati migliori; lo stesso avverrà per i turni di gioco
Scopo dell’algoritmo min-max
è quello di fornire la “migliore
prima mossa successiva”,
avendo in input una
certa configurazione di gioco
Linux_85.PM6 12/04/01, 16.1657
58 Numero 85 - Maggio 2001Dev. Developing Software & Solutions
di min, ovvero i livelli dispari del-
l’albero (vedi Figura 2) in cui
l’ordinamento viene effettuato in
modo crescente.
Non abbiamo però ancora spie-
gato come faccia l’algoritmo a
scegliere la migliore prima mos-
sa; viene effettuata un post-visi-
ta [1] dell’albero in questo modo
(vedi Figura 3):
1. Se il nodo esaminato è foglia
gli viene assegnato un valo-
re pari allafunzione euristica qui
calcolata; altrimenti...
2. ...se il nodo esaminato è un
nodo max, gli viene assegna-
to il valore massimo tra quelli
assegnati ai suoi figli; lo stes-
so vale per min (il valore mi-
nimo)
3. Tutto ciò va ripetuto ricorsi-
vamente finché non viene as-
segnato un valore alla radi-
ce. A questo punto la miglio-
re prima mossa è quella che
collega la radice con lo stato
che ha “retropropagato” il
suo valore alla radice
La massimizzazione del secon-
do punto si spiega col fatto che
max deve massimizzare l’euristi-
ca. Attenzione però: non si trat-
ta di un’euristica locale come quel-
la utilizzata durante la genera-
zione dell’albero (un’euristica
locale è relativa solo allo stato at-
tuale, non tenendo conto di nes-
sun altro fattore); si tratta inve-
ce di un’euristica che tiene con-
to di tutta una serie di mosse che
vengono simulate da un intero
percorso nell’albero (si noti che
la funzione euristica viene calcola-
ta solo sulle foglie).
CONCLUSIONI
Questa tecnica è abbastanza
generale per i giochi a due av-
versari, ma soffre di alcune li-
mitazioni: ad esempio in giochi
come gli scacchi è impensabile
esplodere tutte le configurazio-
ni di gioco possibili dato il loro
numero elevato (dell’ordine di
35100
). In questi casi si utilizzano
delle varianti dell’algoritmo che
operano una potatura euristica
dell’albero di ricerca; una di que-
ste è alpha-beta potato [2].
Dopo avervi annoiato con tut-
ta questa teoria nel prossimo ar-
ticolo vedremo dettagliatamen-
te una realizzazione pratica di
quanto detto, applicando il tutto
al famoso gioco del tris.
BIBLIOGRAFIA
[1] A.A.Bertossi, “Strutture, Al-
goritmi, Complessità”, ECIG,
ISBN 88-7545-370-5
[2] http://yoda.cis.temple.
edu:8080/UGAIWWW/lec-
tures96/search/minimax/al-
pha-beta.html
È fondamentale la
definizione della
“funzione euristica”
Questa tecnica è
abbastanza
generale per i
giochi a due
avversari, ma soffre
di alcune
limitazioni
Linux_85.PM6 12/04/01, 16.1758

More Related Content

Similar to Umano vs Computer: La sfida

Equazioni [teoria ed esericizi][santi caltabiano]
Equazioni  [teoria ed esericizi][santi caltabiano]Equazioni  [teoria ed esericizi][santi caltabiano]
Equazioni [teoria ed esericizi][santi caltabiano]santi caltabiano
 
Algoritmi e complessità computazionale
Algoritmi e complessità computazionaleAlgoritmi e complessità computazionale
Algoritmi e complessità computazionaleMarco Liverani
 
Determinazione delle legge di Michaelis Menten con Minitab
Determinazione delle legge di Michaelis Menten con MinitabDeterminazione delle legge di Michaelis Menten con Minitab
Determinazione delle legge di Michaelis Menten con MinitabGMSL S.r.l.
 
Java Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine LeariningJava Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine LeariningAndrea Ciccotta
 
Modellazione tramite geometria frattale
Modellazione tramite geometria frattaleModellazione tramite geometria frattale
Modellazione tramite geometria frattaleMassimiliano Leone
 
Super risoluzione di immagini di volti con tecniche di deep learning a fini i...
Super risoluzione di immagini di volti con tecniche di deep learning a fini i...Super risoluzione di immagini di volti con tecniche di deep learning a fini i...
Super risoluzione di immagini di volti con tecniche di deep learning a fini i...ErikVelan
 
From cnn to capsule_Matteo_Alberti
From cnn to capsule_Matteo_AlbertiFrom cnn to capsule_Matteo_Alberti
From cnn to capsule_Matteo_AlbertiDeep Learning Italia
 
Syntactical errors detection 1
Syntactical errors detection 1Syntactical errors detection 1
Syntactical errors detection 1LucaPostiglione2
 
Minimax regret solution to linear programming problems with an interval obje...
Minimax regret solution to linear programming problems with  an interval obje...Minimax regret solution to linear programming problems with  an interval obje...
Minimax regret solution to linear programming problems with an interval obje...NicolasTortora
 
Capire il DoE con Minitab
Capire il DoE con MinitabCapire il DoE con Minitab
Capire il DoE con MinitabGMSL S.r.l.
 

Similar to Umano vs Computer: La sfida (11)

Equazioni [teoria ed esericizi][santi caltabiano]
Equazioni  [teoria ed esericizi][santi caltabiano]Equazioni  [teoria ed esericizi][santi caltabiano]
Equazioni [teoria ed esericizi][santi caltabiano]
 
Il Gioco Delle Capitali
Il Gioco Delle CapitaliIl Gioco Delle Capitali
Il Gioco Delle Capitali
 
Algoritmi e complessità computazionale
Algoritmi e complessità computazionaleAlgoritmi e complessità computazionale
Algoritmi e complessità computazionale
 
Determinazione delle legge di Michaelis Menten con Minitab
Determinazione delle legge di Michaelis Menten con MinitabDeterminazione delle legge di Michaelis Menten con Minitab
Determinazione delle legge di Michaelis Menten con Minitab
 
Java Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine LeariningJava Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine Learining
 
Modellazione tramite geometria frattale
Modellazione tramite geometria frattaleModellazione tramite geometria frattale
Modellazione tramite geometria frattale
 
Super risoluzione di immagini di volti con tecniche di deep learning a fini i...
Super risoluzione di immagini di volti con tecniche di deep learning a fini i...Super risoluzione di immagini di volti con tecniche di deep learning a fini i...
Super risoluzione di immagini di volti con tecniche di deep learning a fini i...
 
From cnn to capsule_Matteo_Alberti
From cnn to capsule_Matteo_AlbertiFrom cnn to capsule_Matteo_Alberti
From cnn to capsule_Matteo_Alberti
 
Syntactical errors detection 1
Syntactical errors detection 1Syntactical errors detection 1
Syntactical errors detection 1
 
Minimax regret solution to linear programming problems with an interval obje...
Minimax regret solution to linear programming problems with  an interval obje...Minimax regret solution to linear programming problems with  an interval obje...
Minimax regret solution to linear programming problems with an interval obje...
 
Capire il DoE con Minitab
Capire il DoE con MinitabCapire il DoE con Minitab
Capire il DoE con Minitab
 

Umano vs Computer: La sfida

  • 1. 56 Numero 85 - Maggio 2001Dev. Developing Software & Solutions Umano vs Computer La sfida (Parte 1) Una delle tecniche utilizzate nei giochi a due avversari in cui uno è una macchina è quella del min-max. Esaminiamola e costruiamone una implementazione object oriented in C++ Francesco Sblendorio è studente di Informatica presso l’Università degli Studi di Bari. Si occupa di programmazione in C/ C++, Visual Basic e di problematiche legate al Web. Può essere contattato tramite e- mail all’indirizzo sblendorio@infomedia.it Giovanni Vitiello è studente di Informatica presso l’Università degli Studi di Bari. I suoi interessi principali sono le tecnologie Object- Oriented e lo sviluppo di applicazioni web- based. Può essere contattato tramite e- mail all’indirizzo vitiello@infomedia.it di Francesco Sblendorio e Giovanni Vitiello hissà quante volte siamo stati battuti dal “computer” in una partita a scacchi o giochi simili e ci siamo chiesti come esso è in grado di prendere delle decisioni. In que- sta serie di articoli rispondiamo a questa do- manda. Prima però diamo uno sguardo a delle basi teoriche che ci permetteranno di capire a fondo questi meccanismi. SISTEMI GUIDATI DA PATTERN Molte applicazioni dell’intelligenza artificia- le, a differenza delle applicazioni tradizionali, non seguono uno schema procedurale: in esse non c’è bisogno di specificare passo dopo passo le operazioni da compiere, ma piuttosto segui- re una logica cosiddetta pattern-directed. Tale logica consente, in base ad una situazio- ne corrente ed alle regole conosciute, di ge- nerare nuove situazioni finché non viene rag- giunta una condizione di terminazione. Il ter- mine pattern indica una classe di situazioni pos- sibili che hanno qualcosa in comune. Un sistema pattern-directed è formato da: una serie di moduli (chiamati pdm) che pos- sono essere attivati dai pattern; lo stato (o situazione) corrente del sistema (chiamato database globale); una strategia di controllo (l’algoritmo) che gestisce l’attivazione e la selezione dei pdm. IL PROBLEMA DEL PATTERN MATCHING L’operazione fondamentale per la risoluzione di un problema di intelligenza artificiale è quel- la denominata pattern matching. Questa, dati in input una situazione ed un pattern, fornisce in output: 1. una risposta booleana che dice se la situa- zione data fa parte della classe di situazio- ne rappresentata dal pattern; 2. una serie di sostituzioni da effettuare sul pattern per renderlo uguale alla situazione data. Chiariamo il tutto con un esempio (usiamo una rappresentazione a stringhe delle situazioni e dei pattern e indichiamo con lettere maiusco- le le variabili e con le minuscole le costanti): Situazione: “abbcdebb” Pattern 1: “XZYcdeYY” Pattern 2: “aXXYdeXZ” Pattern 3: “XYZcZebb” In questo esempio i pattern 1 e 2 “matchano” (ovvero sono confrontabili) con la situazione, mentre il pattern 3 no. Infatti applicando l’operatore di pattern ma- tching alla situazione ed al pattern 1 ricaviamo la sostituzione “X=a, Y=b, Z=b”, per il pat- tern 2 ho “X=b, Y=c, Z=b”, mentre per il pattern 3 avrei “Z=b” e contemporaneamente “Z=d”, che è contraddittorio. SISTEMI A PRODUZIONI Un sistema a produzioni è un particolare tipo di sistema pattern-directed in cui i pdm sono detti regole e sono costituiti da coppie antecedente-conse- guente ove l’antecedente è un pattern. Nei siste- mi a produzioni separiamo la fase di esame dei dati da quella di modifica. La prima fase ha luo- go nell’antecedente (detto anche LHS ovvero Left Hand Side, parte sinistra della regola) mentre la seconda ha luogo nel conseguente (RHS, Right Hand Side, parte destra delle regola). Il fun- zionamento di questi sistemi si basa su un ciclo denominato recognize-act che consiste in: 1. ricercare l’insieme delle regole applicabili allo sta- to corrente; 2. scegliere quale applicare tramite la strategia di controllo; 3. eseguire le azioni che la regola prevede nella parte destra. Chissà quante volte siamo stati battuti dal “computer” in una partita a scacchi o giochi simili Linux_85.PM6 12/04/01, 16.1656
  • 2. 57 Numero 85 - Maggio 2001Dev. Developing Software & Solutions La prima mossa migliore, selezionata nell’albero di tutte quelle “possibili” Ordinamento dei nodi in base al livello (pari o dispari) Procedere del valore retropropagato du- rante l’esecuzione dell’algoritmo min-max Facciamo un esempio. Supponiamo di avere le seguenti regole (regole di produzione): ABBAd -> BBAAh ABBCd -> CBBBh ArtBC -> chABC Supponiamo anche che lo stato corrente sia rap- presentato dalla stringa “ottod”. L’insieme delle re- gole applicabili è costituito dalle prime due e sup- poniamo che la strategia di controllo selezioni la prima. Un’azione consiste nei seguenti passi: 1. pattern matching dello stato corrente con la parte sinistra della regola; 2. applicazione della sostituzione ottenuta nel pas- so precedente alla parte destra; 3. il nuovo stato corrente diventa la parte destra con le sostituzioni appena effettuate. Nel nostro caso eseguendo l’azione specificata dalla regola selezionata (la prima) ottengo la strin- ga “ttooh”. STRATEGIA DI CONTROLLO: ALGORITMO DEL MIN-MAX Nei giochi a due avversari che utilizzano si- stemi pattern-directed la strategia di controllo principale è chiamata min-max; Questa strate- gia fa uso di un altro concetto, quello di fun- zione euristica. Tale funzione ha come argomento uno stato del sistema e restituisce un valore numerico che rappresenta la “bontà” dello sta- to relativa al giocatore. Per convenzione, tanto più grande è questo valore, tanto più la situazione è vantaggiosa per il “giocatore computer” (chiamato conven- zionalmente max). Al contrario più la situazio- ne è vantaggiosa per il “giocatore umano” (chiamato min) tanto più piccolo è questo va- lore. Nel caso in cui la situazione sia vincente per max, la funzione varrà “+infinito”; in caso contrario, se la situazione è vincente per min, varrà “-infinito”. (Faccio notare come per situazione vantag- giosa non si intende che il giocatore abbia vin- to. In tal caso, si dice appunto che la situazio- ne è vincente.) Lo scopo dell’algoritmo di min-max è quello di fornire la migliore prima mossa successiva avendo in input una certa configurazione di gioco. (vedi Figura 1). Questo algoritmo utilizza tutti i concetti pre- cedentemente esposti: il database globale, che rappresenta la situazione del gioco in un de- terminato istante e le regole, che rappresentano le mosse e la funzione euristica. La strategia min-max, partendo da uno stato iniziale, attiva tutte le regole ad esso applica- bili generando nuovi stati-figli, per poi ripete- re il procedimento ricorsivamente su tutti que- sti stati così generati. Procedendo in questo modo, viene prodotto un albero su cui viene effettuata la ricerca della migliore prima mos- sa. La crescita di quest’albero è esponenziale; se non si ponesse un limite di profondità i co- sti della generazione, sia in termini di spazio che in termini di tempo, sarebbero insostenibili. Per ovviare a questo problema si impone un limite di profondità, detto depth bound. Notiamo che ai livelli pari dell’albero corri- spondono turni di gioco per max, mentre ai livelli dispari turni di gioco per min (la radice è compresa, in quanto è al livello 0). Conseguentemente, i successori di uno stato in cui il turno è di max saranno ordinati in modo decrescente in base alla funzione euristica, in modo tale che siano esaminati per primi gli stati migliori; lo stesso avverrà per i turni di gioco Scopo dell’algoritmo min-max è quello di fornire la “migliore prima mossa successiva”, avendo in input una certa configurazione di gioco Linux_85.PM6 12/04/01, 16.1657
  • 3. 58 Numero 85 - Maggio 2001Dev. Developing Software & Solutions di min, ovvero i livelli dispari del- l’albero (vedi Figura 2) in cui l’ordinamento viene effettuato in modo crescente. Non abbiamo però ancora spie- gato come faccia l’algoritmo a scegliere la migliore prima mos- sa; viene effettuata un post-visi- ta [1] dell’albero in questo modo (vedi Figura 3): 1. Se il nodo esaminato è foglia gli viene assegnato un valo- re pari allafunzione euristica qui calcolata; altrimenti... 2. ...se il nodo esaminato è un nodo max, gli viene assegna- to il valore massimo tra quelli assegnati ai suoi figli; lo stes- so vale per min (il valore mi- nimo) 3. Tutto ciò va ripetuto ricorsi- vamente finché non viene as- segnato un valore alla radi- ce. A questo punto la miglio- re prima mossa è quella che collega la radice con lo stato che ha “retropropagato” il suo valore alla radice La massimizzazione del secon- do punto si spiega col fatto che max deve massimizzare l’euristi- ca. Attenzione però: non si trat- ta di un’euristica locale come quel- la utilizzata durante la genera- zione dell’albero (un’euristica locale è relativa solo allo stato at- tuale, non tenendo conto di nes- sun altro fattore); si tratta inve- ce di un’euristica che tiene con- to di tutta una serie di mosse che vengono simulate da un intero percorso nell’albero (si noti che la funzione euristica viene calcola- ta solo sulle foglie). CONCLUSIONI Questa tecnica è abbastanza generale per i giochi a due av- versari, ma soffre di alcune li- mitazioni: ad esempio in giochi come gli scacchi è impensabile esplodere tutte le configurazio- ni di gioco possibili dato il loro numero elevato (dell’ordine di 35100 ). In questi casi si utilizzano delle varianti dell’algoritmo che operano una potatura euristica dell’albero di ricerca; una di que- ste è alpha-beta potato [2]. Dopo avervi annoiato con tut- ta questa teoria nel prossimo ar- ticolo vedremo dettagliatamen- te una realizzazione pratica di quanto detto, applicando il tutto al famoso gioco del tris. BIBLIOGRAFIA [1] A.A.Bertossi, “Strutture, Al- goritmi, Complessità”, ECIG, ISBN 88-7545-370-5 [2] http://yoda.cis.temple. edu:8080/UGAIWWW/lec- tures96/search/minimax/al- pha-beta.html È fondamentale la definizione della “funzione euristica” Questa tecnica è abbastanza generale per i giochi a due avversari, ma soffre di alcune limitazioni Linux_85.PM6 12/04/01, 16.1758