Intelligenza Artificiale Risoluzione dei Problemi
Ricerca con avversari
I Giochi I giochi sono stati uno dei primi campi in cui è stata applicata l IA. La presenza di un avversario rende più complicato il problema della ricerca dato che l avversario introduce incertezza. La caratteristica che spesso li distingue è il grandissimo spazio di ricerca.
I Giochi L'intelligenza artificiale considera giochi con le seguenti proprietà: 1) Sono giochi a due giocatori in cui le mosse sono alternate; 2) Sono giochi con conoscenza perfetta in cui i giocatori hanno la stessa informazione (non tipicamente i giochi di carte quali poker, bridge ecc). Giochi tipici sono la dama, gli scacchi ecc... Lo svolgersi del gioco si può interpretare come un albero in cui la radice è la posizione di partenza e le foglie le posizioni finali.
I Giochi Allora nell IA i giochi sono chiamati a somma zero e con informazione perfetta, a turni e a due giocatori. Ciò significa: ambiente deterministico e osservabile Presenza di 2 agenti le cui azioni si devono alternare e le cui funzioni di utilità alla fine della partita sono sempre uguali ma di segno opposto (es, +1 chi vince e -1 chi perde)
I Giochi
I Giochi Un gioco per due persone può essere definito come un problema di ricerca con le seguenti componenti: Lo stato iniziale. Gli operatori, le mosse legali. Un test di terminazione. Una funzione di utilità (utility or payoff function) indicante il risultato della partita. Lo stato iniziale e le mosse legali di ogni giocatore definiscono l albero di gioco
Il Gioco del Filetto 1 2 3 4 5 6 7 8 9
Il Gioco del Filetto: Albero di gioco
Strategie Partendo dallo stato iniziale MAX ha 9 possibili mosse Il gioco si alterna fa MAX e MIN fino a che non si raggiunge uno stato terminale Stati buoni per MIN sono stati cattivi per MAX MAX deve quindi trovare delle strategie contingenti che specifichino le sua mosse iniziali ed in seguito quelle da fare dopo le mosse dell avversario Una strategia ottima porta ad un risultato che è almeno pari a quello di qualsiasi altra strategia presumendo che si sta giocando contro un avversario infallibile.
Soluzione 1 Struttura dati int Quadro[9] dove: Quadro[i] = 0 se vuoto Quadro[i] = 1 se riempito con X Quadro[i] = 2 se riempito con O Quadro Mosse[19683] Algoritmo Si considera il vettore Quadro come se fosse un numero in base 3 e si converte in decimale. Si usa questo numero per accedere ad un elemento del vettore Mosse. Il valore dell elemento è il nuovo valore di Quadro
Soluzione 2 Strutture dati int Quadro[9] dove: Quadro[i] = 2 se vuoto Quadro[i] = 3 se riempito con X Quadro[i] = 5 se riempito con O int Turno Funzioni Vai(n) Esegue Quadro[n] = 3 se Turno è dispari Esegue Quadro[n] = 5 se Turno è pari Fai2() Ritorna il primo quadro vuoto tra i quadri: 5,2,4,6,8 Vincente(p) Ritorna 0 se il giocatore p non può vincere alla prossima mossa Altrimenti ritorna il quadro vincente
Soluzione 2 Algoritmo se Turno = 1 allora Vai(1) se Turno = 2 e Quadro[5] = 2 allora Vai(5) altrimenti Vai(1) se Turno = 3 e Quadro[9] = 2 allora Vai(9) altrimenti Vai(3) se Turno = 4 e Vincente(x) > 0 allora Vai(Vincente(x)) altrimenti Vai(Fai2()) se Turno = 5 e Vincente(x) > 0 allora Vai(Vincente(x)) altrimenti se Vincente(o) > 0 allora Vai(Vincente(o)) altrimenti se quadro[7] = 2 allora Vai(7) altrimenti Vai(3) se Turno = 6 e Vincente(o) > 0 allora Vai(Vincente(o)) altrimenti se Vincente(x) > 0 allora Vai(Vincente(x)) altrimenti Vai(Fai2()) se Turno = 7 e Vincente(x) > 0 allora Vai(Vincente(x)) altrimenti se Vincente(o) > 0 allora Vai(Vincente(o)) altrimenti Vai(i) tale che Quadro[i] = 2 se Turno = 8 e Vincente(o) > 0 allora Vai(Vincente(o)) altrimenti se Vincente(x) > 0 allora Vai(Vincente(x)) altrimenti Vai(i) tale che Quadro[i] = 2 se Turno = 9 e Vincente(x) > 0 allora Vai(Vincente(x)) altrimenti se Vincente(o) > 0 allora Vai(Vincente(o)) altrimenti Vai(i) tale che Quadro[i] = 2
Soluzione 3 Strutture Dati Struct PosizioneQuadro { int Quadro[9] PosizioneQuadro ProssimaPosizione[] int Valore } Algoritmo Si generano tutte le configurazioni raggiungibili in una mossa e si sceglie la migliore: Se una configurazione è vincente allora è la migliore. Altrimenti si considerano tutte le mosse che l avversario può compiere da quella configurazione. Si determina la peggiore posizione e si assegna il suo valore alla configurazione che stiamo considerando. La configurazione migliore ha il valore più alto.
Soluzione 1 Pregi Efficiente in termini di tempo. Capace di giocare in modo ottimale. Difetti Poco efficiente in termini di spazio. Occorre molto tempo per definire i valori del vettore Mosse. Sono probabili errori nell inserimento dei valori del vettore Mosse. La soluzione è difficilmente estensibile ad altri giochi. Non soddisfa nessun requisito di una buona tecnica di IA.
Soluzione 2 Pregi Efficiente in termini di spazio. Capace di giocare in modo ottimale. La strategia di gioco è più comprensibile. Difetti Meno efficiente in termini di tempo. La soluzione è difficilmente estensibile ad altri giochi. Non soddisfa nessun requisito di una buona tecnica di IA.
Soluzione 3 Pregi Capace di essere efficiente in termini di spazio. Capace di giocare in modo ottimale. La soluzione è estensibile ad altri giochi. Difetti Poco efficiente in termini di tempo. È un buon esempio di tecnica di IA.
L Algoritmo Minimax L algoritmo minmax è progettato per determinare la strategia ottimale per Max e per suggerirgli, di conseguenza, la prima mossa migliore da compiere; per fare questo, ipotizza che Min faccia la scelta a lui più favorevole.
L Algoritmo Minimax L algoritmo è composto da 4 passi: Genera l albero completo del gioco. Applica la funzione di utilità (funzione euristica) a tutti gli stati terminali (foglie). Partendo dalle foglie assegna ricorsivamente agli stati intermedi: Il massimo della funzione di utilità degli stati figli se i figli corrispondono a una mossa di Max. Il minimo della funzione di utilità degli stati figli se i figli corrispondono a una mossa di Min. L algoritmo termina con l assegnazione a Max della prima mossa, che corrisponde al massimo della funzione di utilità al primo livello. Questa mossa è quella che il giocatore dovrebbe fare per minimizzare la massima possibile funzione di perdita.
L Algoritmo Minimax 1 Max -1 1 Min 1-1 1 1 1 Max 1-1 1 1-1
L Algoritmo Minimax Sono etichettate con 1 e -1. Un giocatore cerca di arrivare a -1 (minimizzatore), l'altro a +1 (massimizzatore).
L Algoritmo Minimax Per i quadri tocca muovere al max, per i cerchi al min. Consideriamo il nodo o. Deve muovere il max. Il gioco termina comunque. Può muovere p ed r e perdere, oppure q e vincere. Supponiamo che muova q. o è quindi una posizione vincente. (+1) Consideriamo il nodo k. Comunque muova min, perde. Quindi l'etichetta è (+1). Consideriamo il nodo i. Min ha un'opzione vincente dunque (- 1). Quindi: n nodo con max che deve muovere ha come label il massimo delle labels dei figli. Viceversa per min
L Algoritmo Minimax Assegna un valore di utilità ad ogni possibile foglia-conclusione della partita Assicura la migliore scelta possibile, assumendo che l avversario giochi in modo ottimale l avversario farà sempre la mossa peggiore per l agente Quindi attraversa l albero completo di gioco aggiornando ricorsivamente all indietro la funzione di utilità
L Algoritmo Minimax MAX (player) MIN (opponent) 3 12 8 2 4 6 14 5 2
L Algoritmo Minimax 3 MAX (player) 3 2 2 MIN (opponent) 3 12 8 2 4 6 14 5 2
L Algoritmo Minimax Possiamo definire l algoritmo Minimax come segue: function DECISIONE_MINIMAX(stato) returns un azione Inputs stato, lo stato corrente del gioco v VALORE_MAX(stato) return l azione in SUCCESSORI(stato) con valore v function VALORE_MAX(stato) returns un valore di utilità if TEST-TERMINALE(stato) then return UTILITA (stato) v - for a,s in SUCCESSORI(stato) do v MAX(v,VALORE_MIN(s)) returns v function VALORE_MIN(stato) returns un valore di utilità if TEST-TERMINALE(stato) then return UTILITA (stato) v - for a,s in SUCCESSORI(stato) do v MAX(v,VALORE_MAX(s)) returns v
L Algoritmo Minimax L algoritmo Minimax calcola la mossa ottima per il primo giocatore (Max) supponendo che l avversario (Min) giochi una partita perfetta. Questo algoritmo fornisce la base per un analisi matematica dei giochi e per sviluppare algoritmi più pratici
L Algoritmo Minimax L algoritmo Minimax si basa sull ipotesi che sia possibile generare tutti gli stati terminali. Questo è di solito impraticabile, anche per giochi non molto complicati.
Decisioni imperfette in tempo reale Condurre la ricerca della soluzione su tutto lo spazio degli stati non è efficiente. Ragionevolmente non si può impiegare più di qualche minuto per dare la risposta Inoltre vi sono giochi molto più complessi de filetto
Gli scacchi Ad esempio gli scacchi hanno un fattore di ramificazione circa uguale a 35 e le partite spesso arrivano a 50 mosse per giocatore. Quindi per il gioco degli scacchi abbiamo uno spazio di ricerca di 35 100 (in realtà le posizioni legali sono solo 10 40 ).
L Algoritmo Minimax E necessario un criterio che faccia generare una mossa all algoritmo Minimax o a qualsiasi altro senza dover esplorare tutto l albero di ricerca. Questo si può ottenere introducendo una funzione euristica di valutazione, che valuterà la bontà anche di stati non terminali, e un test di terminazione (Cutoff-Test) per decidere a che livello di mosse terminare la ricerca.
Min-max con decisione imperfetta Strategia: guardare avanti k mosse (Shannon, 1949) Si espande l albero di ricerca un certo numero di livelli k (compatibile col tempo e lo spazio disponibili) si valutano gli stati ottenuti e si propaga indietro il risultato con la regola del MAX e MIN: f(n) se n è uno stato sul livello k Valore-Minimax(n) = max s succ(n) ValoreMinimax(s) se n =MAX min s succ(n) ValoreMinimax(s) se n =MIN
Funzione di Valutazione Una funzione di valutazione in genere si basa sull importanza dei pezzi, ma l importanza di un pezzo non è costante, ma varia in base alla posizione e alla fase della partita. Ad esempio per un cavallo: Le posizioni centrali pesano di più di quelle agli angoli. Le posizioni a distanza due da un pezzo nemico pesano di più. La posizione favorevoli rispetto ai pedoni nemici pesano di più. La distanza dal re pesa in modo negativo. Il peso del cavallo diminuisce con l avanzamento della partita.
L Algoritmo Minimax La funzione di valutazione dà una stima della bontà della mossa. Ad esempio negli scacchi la stima può essere data in base al valore dei pezzi in possesso dei due giocatori. Il test di terminazione cerca di interrompere la ricerca ad un livello d tale che sia rispettato il limite di tempo fissato per il gioco. Tuttavia un test di terminazione così semplice può fornire pessimi risultati se associato a una funzione di valutazione non molto sofisticata.
La funzione di valutazione La funzione di valutazione f è una stima della utilità attesa a partire da una certa posizione nel gioco. es. il vantaggio in materiale negli scacchi: pedoni 1, cavallo o alfiere 3, torre 5, regina 9 Determinante la qualità della f: deve essere consistente con l utilità se applicata a stati terminali (indurre lo stesso ordinamento). deve essere efficiente da calcolare; deve riflettere le probabilità effettive di vittoria (maggiore valore ad A piuttosto che a B se da A ci sono più probabilità di vittoria che da B)
L algoritmo Minimax Per superare questi problemi bisogna arrestare la ricerca in configurazioni quiescenti, cioè in cui le prime mosse successive (quelle entro l orizzonte di valutazione) non cambiano sensibilmente il valore della funzione di valutazione. Un problema difficilmente superabile è il problema dell orizzonte, cioè la previsione di mosse avversarie di grande rilevanza che per il limite spaziale dello spazio di ricerca non sono raggiungibili e quindi sono invisibili all algoritmo.
Alpha-Beta Pruning L associazione di una buona funzione di valutazione e un buon test per decidere dove interrompere l espansione dell albero di ricerca può non essere sufficiente a realizzare un programma Minimax che possa giocare entro limiti temporali accettabili. Soluzione: a volte conviene fare una ricerca secondaria, mirata sulla mossa scelta.
Alpha-Beta Pruning Infatti fino ad ora risulta che i computer che giocano semplicemente cercano in alberi secondo certe proprietà matematiche. Perciò considerano anche mosse e nodi che non si verificheranno mai. È tuttavia possibile decidere una mossa corretta senza dover controllare tutti i nodi che l algoritmo Minimax controlla. Questo viene fatto usando la tecnica della potatura alpha-beta: se un giocatore può muoversi in un nodo n, ma ha una migliore scelta m in un nodo di livello più elevato nell albero, allora il nodo n non sarà mai raggiunto.
Alpha-Beta Pruning giocatore avversario giocatore m se un giocatore può muoversi in un nodo n, ma ha una migliore scelta m in un nodo di livello più elevato nell albero, allora il nodo n non sarà mai raggiunto. avversario n Quando ho scoperto che la mossa verso c è vincente, non mi interessa espandere i nodi di b e d. I nodi sotto b non andranno mai ad influenzare la scelta.
Si consideri un nodo N nell albero. Il giocatore si muoverà verso quel nodo? Se c è una scelta migliore a livello del nodo padre o di qualunque nodo precedente allora N non sarà mai raggiunto in tutta la partita Alpha-Beta Pruning 0,8 0,8 0,7 Max Min 0,9 0,8 0,7 0,8 0,8 Max 0,1 0,8 0,5 0,1 0,7 0,8 0,7 Min 0,6 0,1 Max
Alpha-Beta Pruning Se il giocatore ha una scelta migliore M a livello del nodo genitore od in un qualunque punto di scelta precedente, N non sarà mai selezionato. Se raggiungiamo questa conclusione possiamo eliminare N dai nostri nodi da valutare.
Alpha-Beta Pruning: Esempio MAX (player) MIN (opponent) 3 12 8 2
Alpha-Beta Pruning: Esempi MAX (player) MIN (opponent) 3 12 8 2 3 3 Ci si può fermare quì nel valutare questo nodo infatti: l avversario prende il minimo di questi nodi che almeno sarà 2, ma il giocatore prenderà il massimo tra I valori dei nodi azurri che almeno sarà 3
Alpha-Beta Pruning Possiamo trovare in modo automatico dove potare perché a monte c è una scelta migliore? Lo facciamo trovando i valori ALFA e BETA Per ogni nodo dell albero sia ALFA il valore della scelta migliore trovata sulla strada di MAX e BETA il valore della scelta migliore trovata sulla strada di MIN. L algoritmo di Alpha-Beta Pruning aggiorna i valori di ALFA e BETA e taglia quando trova delle contraddizioni
Alpha-Beta Pruning Più precisamente, se A è il giocatore massimizzante (player)e B il giocatore minimizzante (opponent): α è il punteggio minimo che A può raggiungere, a partire dalla posizione in esame; all'inizio dell'algoritmo viene posto a -. Durante il calcolo, α coincide con il valore della peggiore mossa possibile attualmente calcolata per A. β è il punteggio massimo che B può raggiungere a partire dalla stessa posizione; all'inizio dell'algoritmo viene posto a +. Durante il calcolo, β coincide con il valore della miglior mossa possibile attualmente calcolata per B.
Alpha-Beta Pruning La ricerca procede come una normale ricerca minimax, in cui però i valori di α e β per ogni nodo vengono aggiornati man mano che la ricerca si approfondisce. Come la ricerca minimax è una ricerca in profondità cioè si devono considerare solo i nodi lungo un singolo cammino dell albero e i parametri α e β vengono calcolati in un qualsiasi punto del cammino
Alpha-Beta Pruning Per un nodo foglia a = b = funzione di utilità Ad un nodo di MAX a = il valore di utilità più grande dei figli b = b del genitore Ad un nodo di MIN a = a del genitore b = il valore di utilità più piccolo dei figli Per ogni nodo dovrebbe essere: a <= funzione di utilità <= b Oppure si taglia
Alpha-Beta Pruning La ricerca alfa-beta aggiorna così i valori per α e β per i nodi E pota i rami (ovvero fa terminare le chiamate ricorsive) non appena determina che il valore del nodo corrente è peggio di quello di α per Max o, rispettivamente, di β per Min
Alfa-Beta pruning Calcolando MAX si pota il sottoramo di un nodo se un suo figlio ha valore inferiore ad α; se invece tutti i figli hanno valore maggiore il minimo diventa α Calcolando MIN si pota il sottoramo di un nodo se un suo figlio ha valore maggiore a ß; se invece tutti i figli hanno valore minore il massimo diventa ß Così α è usato per potare nei nodi MIN, ed è assegnato nei nodi MAX. ß è usato per potare nei nodi MAX, ed è assegnato nei nodi MIN
With alpha-beta pruning (view presentation for animation) Minimax with Alpha-Beta pruning Max Min beta=3 3 alpha=3 0 < alpha, so prune 3 2 < alpha, so prune No more branches, so this is the value My turn Opp turn Max 3 5 > beta, so prune 0 2 My turn Min 2 3 5 0 2 1
Alpha-Beta Pruning: esempi
Alpha-Beta Pruning: esempi
Alpha-Beta Pruning Possiamo definire l algoritmo di ricerca alpha-beta con le funzioni Max-Value e Min-Value. Max-Value ha la forma: function Max-Value(state, game, alpha, beta) { if Cutoff-test(state) return Eval(state); for each s in Successor(state) { alpha = Max(alpha, Min-Value(s, game, alpha, beta)); if (alpha >= beta) return beta; } return alpha; } Se si trova un alpha maggiore o uguale a beta si può uscire perché sicuramente Min potrà eseguire almeno una mossa di valore beta.
Alpha-Beta Pruning Min-Value ha la forma: function Min-Value(state, game, alpha, beta) { if Cutoff-Test(state) return Eval(state); for each s in Successor(state) { beta = Min(beta, Max-Value(s, game, alpha, beta)); if (beta <= alpha) return alpha; } return beta; } Se si trova un beta minore di alpha si può uscire perché sicuramente Max potrà eseguire almeno una mossa di valore alpha.
Alpha-Beta Pruning L efficienza della potatura alpha-beta dipende fortemente dall ordine in cui i nodi sono esaminati. Ossia cerchiamo di esaminare prima i sucessori più promettenti in modo da evitare di generare per primi, quando non ho confronto, i successori peggiori Se i nodi fossero bene ordinati il numero di nodi da esaminare sarebbe O(b d/2 ) invece di O(b d ). Questa riduzione di nodi corrisponde a passare da una complessità d alla sua radice quadrata. Questo, in giochi simili agli scacchi, permette ad esempio di esplorare sequenze di mosse lunghe il doppio.
Discussione Dal momento che il calcolo delle decisioni ottime ha una complessità computazionale intrattabile nella maggior parte dei giochi gi algoritmi devono adottare ipotesi restrittive e accontentarsi di risultati approssimati Un buon algoritmo di ricerca dovrebbe selezionare e analizzare le espansioni di maggior utilità di un nodo ovvero quelle che porterebbero più probabilmente alla scoperta di una mossa sensibilmente migliore
Discussione Questo tipo di ragionamento riguardante la computazione stessa prende il nome di metaragionamento e non si applica solo ai giochi Tutti i calcoli hanno un costo, sono eseguiti al fine di ottenere decisioni valide ed ognuno ha una certa probabilità di fornire un miglioramento alla qualità della decisione
Costo computazionale Discussione Costo totale Costo della ricerca Costo della strategia Quantità di informazione posseduta
Discussione Ancora gli algoritmi per la ricerca euristica e per i giochi funzionano generando sequenze di stati concreti partendo da uno stato iniziale e applicando una funzione di valutazione Non è così che giocano gli esseri umani Spesso il giocatore sceglie un particolare obiettivo e genera selettivamente piani plausibili per ottenerlo Parliamo di ragionamento guidato dagli obiettivi o pianificazione che permette talvolta di eliminare completamente la ricerca combinatoria
Discussione Cosi: La vera sfida è competere con l uomo ad armi pari. L uomo non usa la ricerca come metodo principale: Prima parte dai GOAL (non ben definiti) A ritroso costruisce SOTTOGOAL Pianifica: azioni " subgoal " goal Usa la ricerca per raggiungere obiettivi locali Ha capacità istintive di escludere le scelte inutili: riduce enormemente il branching factor Come interfacciare ragionamento goal-oriented e search?
Esempio gioco scacchi La dimensione del problema è enorme. Solo all'inizio partita le mosse possibili sono 400, diventano più di 144.000 alla seconda... In particolare, gli scacchi hanno un fattore di ramificazione ~ 35 e ~ 50 mosse per ciascun giocatore. Quindi avremmo 35100 nodi. (in realtà le mosse lecite sono 1040). Occorre quindi una funzione di valutazione. In particolare, si darà un peso a ciascun pezzo, ma questo non è sufficiente. Si deve tener conto anche della posizione relativa dei pezzi (due torri incolonnate valgono a volte più della stessa regina).
Esempio gioco scacchi Valutazione di un cavallo Il valore materiale di un cavallo è 350 punti. Il principale aggiustamento a tale valore base è dato da un bonus che premia le posizioni centrali, da 0 punti negli angoli, a 100 punti al centro. Anche il momento della partita è importante. Ad esempio i cavalli sono importanti nel centro partita ma non lo sono in un finale di partita con pochi pezzi. Dare un peso a tutte queste componenti non è sufficiente,occorre anche una funzione che leghi al meglio tutti questi parametri. L'altra scelta è di quanto scendere in profondità nell'albero delle soluzioni. Ci si aspetta che la macchina risponda in un tempo paragonabile a quello di un giocatore umano. Un computer medio elabora circa 1000 posizioni al secondo (ma può arrivare anche a 2.500). Ogni mossa richiede al massimo 150 secondi. Quindi un computer elabora circa 150.000 mosse possibili che corrispondono a circa 3-4 livelli giocando ad un livello da principiante).
Esempio gioco scacchi TAGLI ALFA BETA: diventano essenziali Gli attuali programmi scendono circa di 7 livelli ed elaborano circa 250.000 posizioni per volta ma in particolari condizioni possono arrivare fino a 20 livelli e 700.000 posizioni Inoltre quasi tutti i programmi utilizzano il tempo che il giocatore umano impiega per scegliere la sua mossa per esplorare altre strade. Il giocatore umano, in realtà sembra non scenda mai per più di 5 livelli, e con tagli notevoli. Non utilizza poi una funzione di valutazione definita in modo metodico (usa il "colpo d'occhio").
Esempio gioco scacchi Il computer non è in grado di adottare una strategia globale, ma questa limitazione è spesso compensata da non commettere sviste o dimenticanze. Mentre il computer è fortissimo nel centro partita, il giocatore umano è più abile nel finale, dove la strategia posizionale è meno importante. Ma oggi i programmi di scacchi, proprio per ovviare a questo inconveniente, tendono a utilizzare librerie ed algoritmi specializzati per il finale.
Deep Blue Il 10/5/1997, a New York, una macchina, Deep Blue, ha battuto in un match di sei partite (2-1 e tre patte) il campione del mondo Kasparov. In particolare, Deep Blue utilizza una macchina parallela general-purpose a 32 processori più 512 chip specializzati per la generazione di mosse e valutazione. Deep Blue arriva a esplorare alberi profondi 12/14 semimosse (~ 10 11 posizioni) in circa 3 minuti. Deep Blue consulta anche librerie di aperture (ci sono un centinaio di aperture ormai completamente esplorate e che possono condizionare tutta la partita).
Giocatore di scacchi
Teoria dei giochi Von Neumann & Morgenstern (1944) (Theory of Games and Economic conomic Behaviour ) Teoria della decisione Analizzare il comportamento individuale le cui azioni hanno effetto diretto Scommesse & mondo dei puzzle Teoria dei giochi Analizzare il comportamento individuale le cui azioni hanno effetto che dipende dalle scelte degli altri Mondo dei giochi a + giocatori
Teoria dei giochi M. Minsky (1968): i giochi non vengono scelti perché sono chiari e semplici, ma perché ci danno la massima complessità con le minime strutture iniziali Non solo in IA Matematica: teoria dei grafi e complessità Computer Science : database, calcolo parallelo, etc. Economia: teoria dei giochi, eco. cognitiva/sperim. Psicologia: fiducia, rischio, etc.
Tipologie di giochi Effetti della scelta Condizione di scelta Giochi deterministici Gli stati sono determinati unicamente dalle azioni degli agenti. Giochi stocastici Gli stati sono determinati anche da fattori esterni (es: dadi). Informazione perfetta Gli stati del gioco sono completamente espliciti per gli agenti. Scacchi, Dama, Forza 4, Backgammon, Monopoli, Informazione imperfetta Gli stati del gioco sono solo parzialmente esplicitati. MasterMind (gioco o puzzle?), Scarabeo, Bridge, Poker, Risiko,