Sei sulla pagina 1di 41

INTELLIGENZA ARTIFICIALE

Esistono due tipi di I.A:


1. Forte - si ricrea una mente artificiale
2. Debole - si ricrea un’intelligenza per certi domini

Inoltre esistono due approcci fondamentali per le I.A :


1. Simbolico - svolge un’attività elaborando dei simboli
2. Subsimbolico - vengono analizzati dei numeri, che verranno elaborati successivamente (deep
learning)

Ricerca degli stati: si hanno una serie di stati che devono essere visitati per ottenere una soluzione

Le “I.A” vengono suddivise in 4 categorie:


Ragionare in modo umano ( riprodurre Ragionare in modo razionale (Servono
il cervello) regole di pensiero giuste, per dedurre che
tutto quello che produce è giusto, tuttavia
ciò è impossibile da raggiungere, come i
sillogismi di Socrate. Si dovrebbero
gestire troppe eccezioni per le regole
“giuste”. Ma la logica non ammette
eccezioni.
Agire in modo umano ( idea di turing, Agire in modo razionale ( ci dice cosa
test di turinig) fare e si ha a mente il modo migliore
possibile per raggiungerlo)

Agenti Intelligenti: si vuole raggiungere un risultato con il minor costo possibile, quindi costruire un
agente, entità software che riceve degli stimoli (percept) e fornisce in output delle azioni (action).
f:P*->A
P*: sono tutte le azioni formate da A e P
A: è l’insieme delle possibili azioni

I percept possono arrivare da un enviroment e/o compiti specifici (task). Lo scopo di un agente è quello di
ottenere le migliori performance (un buon risultato di razionalità). Tuttavia a volte è impossibile
raggiungere la razionalità perfetta a causa delle performance.

AGENTS AND ENVIRONMENT


L’ambiente dà dei percept, catturati tramite i sensori ed
elaborati tramite gli attuatori, restituendo un’azione che
modificherà l’ambiente circostante.

es. Vacum Cleaner World


A e B rappresentano due stanze, in una delle due stanze si trova un
robot aspiratore. I granelli rappresentano la sporcizia (dirty). Gli
input sono del tipo [posizione, stato della stanza], esempio
[A,dirty] -> si trova nella stanza A ed essa è sporca.
Tuttavia questo percept non ci dice nulla per quanto riguarda la stanza B, basterebbe ampliare gli input.
Esistono due tipi di informazioni: parziali o complete.
Le azioni possibili possono essere di due categorie:
1. movimento (left, right)
2. aspirazione o meno (suck, noop)

Si vuole mappare una sequenza di percept per eseguire un’ azione.


Obiettivo per la figura (Goal): [suck, right, suck]

AGENTI RAZIONALI
Si vuole definire una misura di performance. Le prestazioni dipendono da cosa si vuole ottimizzare.
Nell’esempio dell’aspirapolvere si può tenere conto della quantità di polvere aspirata (massimizzare il
parametro) o il tempo impiegato (da minimizzare). Tuttavia i due parametri sono in contrasto, uno da
massimizzare e uno da minimizzare. Si cerca quindi di avere un tradeoff tra i due (bilanciamento). Altri
parametri potrebbero essere il consumo e il rumore. A volte bisogna controbilanciare il tutto.

Le misure di performance vengono usate per dire cos’è e cosa fa un agente attraverso la definizione del
PEAS (Performance Measure Enviroment Sensor). Esempio PEAS taxy:

TIPO DI AMBIENTE
Completamente osservabile: l’agente Parzialmente osservabile: non conosce
conosce tutto l’ambiente tutto l’ambienta ma solo alcune
informazioni
Deterministico: eseguo un’azione e Stocastico: non si ha sempre il 100% di
sono sicuro di quell’azione sicurezza nell’eseguire un’azione
Episodico: l’esecuzione dell’azione Sequenziale: una sequenza di azioni, in
viene fatto una sola volta questo caso le azioni hanno una “storia”
tra di loro.
Statico: l’ambiente non cambia mai Dinamico: Cambia sempre
Discreto: un certo numero di Continuo: n oggetti indefiniti e in
azioni/percept distinte continuo cambiamento
Singolo agente Più agenti

PROBLEM SOLVING – RICERCA NELLO SPAZIO DEGLI STATI

Ricerca di apposite configurazioni (stati) di un problema di cui si cerca la soluzione.

In un ambiente deterministico (le azioni hanno risultato certo), completamente osservabile, l’agente riceve in
input uno stato(stato iniziale) e ne restituisce un altro stato (l’agente conosce obbiettivo e azioni, quindi si
tratterà di confrontare lo stato iniziale con quello finale e eseguire le azioni che lo porteranno allo stato
finale).
es. azione deterministica : a:S->S a(S1) = S3
es. azione non deterministica : a:S->2s (in input uno stato iniziale, in output un insieme di stati possibilii)
x={x1,x2} 2x={0,{x1},{x2},{x1,x2}}
a(S1) = {S2,S3} significa che è un ambiente non deterministico.

AMBIENTE NON OSSERVABILE


L’agente non sa in che stato si trova. Tuttavia bisogna dare
una soluzione sempre valida, indipendentemente dallo stato
(Soluzione Conformante).

es. Vacuum Cleaner (senza sensori, con azioni


deterministiche)
 Stato Iniziale: Non si conosce, è uno dei possibili 8
stati, (con 3 variabili {dirty, stanza, pulita}.
 Soluzione Conformante: [right, suck, left, suck],
pulisce entrambe le stanze in tutti i casi, se si trova
già a destra sbatte ma pulisce la stanza. NB. esegue
delle azioni inutili.

Azioni condizionate:
[right, if dirty then suck], in questo caso si eliminano alcune
azioni inutili, grazie alla condizione if, questa permette di controllare lo stato della stanza ( cosi si hanno
informazioni aggiuntive).

GRAFO DELLO SPAZIO DEGLI STATI


In un ambiente osservabile, ogni nodo
rappresenta uno stato, gli archi sono le azioni
compiute per arrivare allo stato.

In un ambiente non completamente


osservabile, ogni nodo rappresenta un insieme
degli stati possibili (stato multiplo) a cui si
arriva applicando le azioni.
PROBLEMA NELLO SPAZIO DEGLI STATI
Un problema di ricerca è definito su 4 parametri:
1. Stato iniziale: da dove si parte S0
2. Azioni: o operatori possibili da applicare che trasformano lo stato
3. Obiettivo (goal test), test per sapere se si è raggiunto l’obiettivo, può essere:
◦ Esplicito: si vuole raggiungere uno stato finale Sg
◦ Implicito: lo stato finale deve soddisfare la condizione C
4. Costo operatori, il costo è una funzione additiva, positiva o nulla >= 0
C(x,a,y) -> costo per andare dallo stato x a y con l’azione a

Soluzione: sequenza di azioni per cui posso andare da uno stato iniziale allo stato di goal. Tra tutte le
soluzioni ci interessa quella con costo minimo (Soluzione ottimale)

Come risolvo i problemi di questi tipi?

Potrei applicare un qualsiasi algoritmom di cammino minimo, ma lo spazio degli stati potrebbe essere infinit
, per cui devo applicare delle strategie di ricerca, che mi permetto di costruire una parte dello spazio degli
cioè quello che mi consente di arrivare la soluzione.
STRATEGIA DI RICERCA
Lo spazio degli stati può essere enorme o infinito (non posso rappresentare il grafo). Una soluzione
alternativa è quella di costruire solo la parte dello spazio degli stati che serve. Per ogni azione applicata, si
generano stati da aggiungere al grafo.
 Ogni nodo (che rappresenta una stato) ha:
◦ un nodo genitore (stato che lo genera)
◦ più figli (applicando delle azioni si generano i figli)
◦ Informazioni aggiuntive quali:
▪ funzione di costo g(x)
▪ profondità d

Expand(): partendo dallo stato corrente, si generano tutti i nodi successivi (stati possibili), applicando delle
azioni.

La scelta del prossimo nodo a cui applicare expand() identifica la strategia di ricerca. Ogni strategia è
caratterizza da 4 parametri di efficienza:
1. Completezza: completa quando se esiste una soluzione, la ricerca la trova.
2. Complessità in tempo: n° di passi per arrivare alla soluzione
3. Complessità in spazio: n° di nodi memorizzati al massimo
4. Ottimalità: trova la soluzione con il minor costo
Per misurare questi parametri useremo:
 b: (Breanching Factor) fattore di diramazione massimo (massimo dei figli generabili da un nodo)
 d: profondità della soluzione ottimale
 m: massima profondità raggiunta dalla strategia

NB. A volte d può coincidere con m


 Nodi chiusi: nodi già espansi
 Nodi aperti: nodi ancora da espandere

BLIND SEARCH (Ricerche cieche o non informate)

ALGORITMO

n0 <- stato iniziale //nodo iniziale


frontier <- {n0}
s <- select(frontier)//si seleziona il nodo da espandere dalla frontiera
da espandere

while(s != goal){
frontier= frontier U expand(S) //si espande e si aggiunge alla
frontiera
s -<- select(frontier)
}
OutPut(path n0->s)

L’operazione principale che identifica la strategia è la select.

Strategie non informate: basate sul livello del nodo, utilizzate solo come confronto.

BFS
In una ricerca BFS i nodi di espandono usando l’ampiezza dell’albero che viene generato. Si usa FIFO.

Catatteristiche:
1. Completezza: Sì se il fattore di diramazione b è finito, esamina tutti i livelli e al livello k trova il
nodo, se esiste una soluzione
2. Tempo: 1 + b + b2 ... bd + b(bd-1) = O(bd+1) 1 al livello 0, b al livello 1, b2 al livello due e cosi via, bd
è la profondità della soluzione, mentre b(bd-1) sono i fratelli del nodo della soluzione.
3. Spazio: Si devono tenere in memoria i nodi che rappresentano la frontiera (esponenziale per livello)
O(bd+1)
4. Ottimalità: Se tutto costa 1 si, ma non è ottimale. Trova prima le soluzioni a livello più alto

DFS
In una ricerca DFS si espandono prima i nodi con profondità più elevata, si usa stack LIFO. Catatteristiche:
1. Completezza: Se lo spazio degli stati è finito sì, altrimenti in loop per spazio infinito
2. Tempo: O(bm) m è la profondità massima, per risalire deve arrivare in fondo
3. Spazio: O(b*m) il n° di nodi è lineare rispetto alla profondità
4. Ottimale: No, può esistere una soluzione a livello più alto in un ramo non esplorato.

IDS ( Iterative Deepening Search)

É una variante della DFS che combina l’ottimalità di BFS. L’IDS ripete una DFS fino al limite fissato detto
cutoff. Arrivato al cutoff, si ripete la visita aumentando il cutoff di 1 (backtracking). Ha la caratteristica
liberare lo spazio dai nodi superiori allo stato corrente, così da mantenere in memoria solo la frontiera.
Troverà quindi la soluzione al livello corretto d.

Caratteristiche:
1. Completezza: se esiste una soluzione al livello k, trova la soluzione quando cutoff = k
2. Tempo: (d+1)b0 + db1 +(d-1)b2 + ... + bd = O(bd). Come la BFS, ma evito di espandere l’ultimo
livello, che avrebbe dominato sulla complessità.
3. Spazio: O(b*d), mantiene le prestazioni della DFS, anche se più grande in tempo.
4. Ottimale: con il cutoff al livello d, esamino tutto d e trovo la soluzione.

RICERCHE EURISTICHE (O INFORMATE)

Si associa ad ogni nodo una valutazione di costo f: S ->R+ (f identifica il tipo di ricerca), cercando di
minimizzare il costo finale (ad ogni espansione è scelto il nodo con costo minimo, utilizzo di heap o coda di
priorità). Si sceglie quindi il nodo migliore: Best-First Search.

NB. se f rappresenta una utilità invece si cercherà di massimizzare.

UNIFORM COST

La funzione di costo indica il costo delle azioni per andare da S(sorgente) al nodo corrente.

{ 0 se n = n0 // il nodo inizial
g(n){
{ g(n’) + c(n’,n) // con n’ padre di n e c è il costo

La best first search utilizza questa strategia: algoritmo “a costo uniforme” perché tende a selezionare i nodi
in ampiezza (può degenerare in una BFS). Più scendiamo più il costo aumenta (funzione additiva). Quando
questo algoritmo arriva al nodo obiettivo, non si ferma, ma controlla tutti gli altri, potrebbe trovare un
percorso migliore. Si ferma solo quando si seleziona il nodo migliore.

Caratteristiche:
1. Completezza: è completo se il costo è positivo
2. Tempo: l’algoritmo tende ad andare in ampiezza, nel caso peggiore è uguale ad una ricerca in
ampiezza. Tuttavia è O(b[c*/epsilon]) nel caso medio (C* è il costo della soluzione ottimale).
3. Spazio: uguale al tempo, quindi vi è un problema di spazio esponenziale
4. Ottimalità: Sì, si ferma solo quando la soluzione è la migliore.

FUNZIONE EURISTICA
La funzione di valutazione prova a capire quanto ancora devo spendere per arrivare alla soluzione.
h(n) = c(n, ng) // stima del costo per andare da n a ng
Principio per le stime: la stima dev’essere una sottostima. Questo perché è possibile ottenerne una
attraverso il rilassamento del problema. Esso prevede di eliminare dal problema alcuni vincoli, rendendo il
problema più semplice fino a poterne calcolare facilmente la soluzione. La soluzione ad un problema minore
è appunto una sottostima. Si tende a scegliere la sottostima
calcolata sul problema rilassato al minimo, per ottenerne una più
vero-simile.
es. 8-puzzle

Si hanno due sottostime h1 = 7 e h2= 18 essendo h sempre una


sottostima, h2 è più preciso di h1.

Calcolo euristica nell’esempio:


 h1: n° di tessere fuoriposto, essendo 7 le tessere fuoriposti, bisogna fare almeno 7 movimenti. E’
stato rimosso di movimento (orizzontale/verticale) ed il vincolo di spostare la casella sul buco. In
questo modo posso spostare direttamente la tessera alla posizione desiderata.
 h2: è una situazione intermedia, si calcola il n° di spostamenti verticali e orizzontali per andare dallo
stato iniziale allo stato obiettivo senza tenere conto del buco. Anche questa è una sottostima ma più
precisa di h1 -> Distanza di Manhattan.

GREEDY SEARCH
Si tratta di una Best-first Search in cui la funzione di valutazione è solamente la funzione euristica. Ad ogni
iterazione si prende in considerazione il nodo che si pensa possa essere più vicino all’obiettivo. Più ci si
avvicina all’obiettivo, più i valori della funzione euristica diminuiscono (contrario della funzione di costo).

L’obiettivo è raggiunto quando generato (non si aspetta di selezionarlo).

Caratteristiche:
1. Completezza: No, potrebbe entrare in loop
2. Tempo: può degenerare in O(bm)
3. Spazio: può degenerare in O(bm)
4. Ottimalità: No, può restituire un’altra strada

STRATEGIA A*
Permette di guidare la ricerca sfruttando le informazioni di costo e quelle euristiche, funzione di valutazione:
f(n) = g(n) + h(n)

Ovvero la stima del costo dal nodo iniziale fino


all’obiettivo, essendo in n. Si cerca di prendere il nodo
con la funzione euristica minore.

Caratteristiche:
Non dà nessuna garanzia di degenerazione, nel caso
peggiore è come la BFS (visita tutti). Può essere
peggiore in spazio e tempo (si deve milgiorare
l’euristica, evitando di occupare tanta memoria).
1. Completezza: Sì, prima di andare oltre la frontiera espando tutti i nodi, quindi troverò la soluzione
2. Tempo: può degenerare in O(bd)
3. Spazio: può degenerare in O(bd)
4. Ottimalità: se l’euristica è ammissibile allora A* è ottimale (Teorema successivo)

 TEOREMA: Se un’euristica è una sottostima del valore reale, si


dice ammissibile (h(n) <= h*(n), con h*(n) valore reale). Se
l’euristica è ammissibile, A* è ottimale. (Meglio quando la
sottostima è più vicina al valore reale).

NB. La unifrom cost search è ottimale in quanto si tratta di una


strategia A* con funzione euristica h(n) = 0

 DIMOSTRAZIONE: Supponiamo G1 obiettivo ottimo, G2


obiettivo non-ottimo e N nodo sul cammino ottimo verso G1. Possiamo dire:

f(G2) = g(G2) //dato che h(G2) = 0 (obiettivo)


> g(G1) //G1 ottimale per ipotesi
>= f(N) //dev’essere minore del costo verso G1 (euristica ammissibile) quindi minore g(G1)

Allora f(G2) > f(N) e quindi selezionerò N al prossimo passo:


Euristica Ammissibile → A* ottimale

Proprietà di consistenza
Afferma che se un’euristica è consistente, allora è anche ammissibile (non è detto il contrario) e quindi A*
ottimale. Si basa sulla disuguaglianza triangolare per la quale:
h(n) <= h(n’) + c(n,a,n’)
Con G obiettivo, h(n’) = stima n’-G, h(n) = stima n-G.

E indica che in un triangolo, la lunghezza di un lato è minore o uguale alla


somma degli altri due.

Quindi se è consistente, la f(n) non decresce mai, con la h(n) sempre più
precisa e la g(n) in aumento, migliorando l’algoritmo ad ogni passo.
EQUAZIONE DI PATHMAX
Se si ha un’euristica non consistente, e non migliora la precisione, cioè se è ammissibile ma non
consistente, si può usare l’equazione di pathmax.
In questo esempio si nota come da n a n’ la f decresca.

La f(n) indica che per andare da S all’obiettivo


passando per n devo spendere almeno 9, 8 per n’.
L’euristica del padre è più precisa (possiede più
informazione).

In un caso del genere, si prende il massimo dei due,


ignorando l’altra per rendere consistente l’euristica e non farla decrescere.

ITERATIVE DEEPENING A* (IDA)

Si tratta di una ricerca in profondità iterata con cutoff sul valore di f di A*. Se non si riesce ad andare avanti,
il cutoff viene reimpostato con la più piccola f incontrata e si riparte da capo. Se l’euristica non è buona A*
tiene troppi nodi in memoria, mentre IDA tiene solo i nodi utili, migliorando la complessità in spazio.

__________________________________________________________
(Dopo n° mosse)

TREE SEARCH GENERICA


Si potrebbe gestire la struttura di ricerca,
evitando di ripetere gli stati. Tuttavia vi è uno
svantaggio della lista, si possono generare
percorsi simili. Cosi si gestiscono due liste
(aperti, chiusi).

Se si genera un nodo gia’ generato: si aggiorna


il riferimento al padre se il cammino da cui si
e’ generato l’ultima volta e’ migliore di quello
corrente e, nel caso fosse anche chiuso lo si
riapre

Vantaggio: non duplico nodi


Svantaggio: tengo comunque in memoria tutti i nodi generati nella ricerca (che siano aperti o chiusi)

GRAPH SEARCH
Se l’euristica è consistente si può applicare una graph search, quando un nodo viene inserito nella lista di
quelli chiusi, non verrà rigestito.

(A* con euristica consistente su grafo)

LOCAL SEARCH (ALGORITMI A MIGLIORAMENTO ITERATIVO)


Gli algoritmi precedenti restituivano come output una sequenza di azioni. Esistono altri problemi che
vogliono raggiungere uno stato obiettivo senza necessariamente conoscere come ci si è arrivati.
In alcune situazioni potrei non conoscere lo stato obbiettivo, per cui l’algoritmo potrebbe fermarsi a un certo
punto della sua esecuzione su un nodo e restituire quello come stato obbiettivo, oppure potrei conoscere i
requisiti che deve restituire lo stato obbiettivo, l’algoritmo potrebbe quindi cercare uno stato che soddisfi
quei requisiti e restituire quello. Anche in questi casi utilizzeremo una funzione di valutazione, spesso si da
un valore di valutazione quanto maggiore quanto l’informazione che produce è buona, quindi sceglieremo il
nodo con funzione di valutazione maggiore.
Sono algoritmi a spazio costante, quindi non ci interessa della loro complessità in spazio.
HILL-CLIMBING (ricerca a salita rapida, ascesa gradiente)
Si tratta di un algoritmo in cui massimizziamo l’utilità, ad ogni stato viene dato in input una funzione che
ne restituisce l’utilità. “Obiettivo: scalare una montagna con la nebbia soffrendo di amnesia”
L’algoritmo “scala la montagna”, tuttavia vede solo le strade vicine, che possono essere in salita, in discesa o
sullo stesso livello, visto che dobbiamo scalare la montagna tenderà a scegliera la strada in salità(con utilità
maggiore). Al passo successivo si dimentica tutto(soffrendo di amnesia) e si pone nuovamente la domanda
su quale strada intraprendere. L’algoritmo si ferma quando non si può più salire.

PROBLEMA:può bloccarsi in un massimo locale. Se


in questa montagna in 2D parto da sinistra, riesco ad
arrivare al massimo globale (goal). Mentre partendo da
destra l’algoritmo si bloccherà in un massimo locale.

Il parametro fondamentale è quindi lo stato iniziale.

Inoltre danno fastidio tanti stati con lo stesso valore di


utilità. Nel caso di “flat” local maximum ci sono due
alternative:
 mi fermo
 vado avanti ( potrebbe essere infinito, quindi
meglio fermarsi dopo un po’)

Esempi: 8 regine, MMMS (sulle slide).

RANDOM RESTARTING HILL-CLIMBING


Si vuole evitare il blocco locale, uno dei parametri fondamentali è quello di partenza. La strategia adottata
da questo algoritmo è quella di ripetere l’hillclimbing più volte, partendo da diversi stati casuali. Si
aumentano così le probabilità di ottenere la soluzione ottimale, ma l’algoritmo non diventa ottimale.
HILL-CLIMBING STOCASTICO
Nell’algoritmo classico ci si muove nello stato con utilità migliore, questa è una scelta mono deterministica.
Si possono fare delle scelte probabilistiche: ci si muove non verso l’utilità più alta, ma verso la probabilità
più alta di arrivare alla soluzione ottimale. Così da esplorare anche delle strade alternative.

Scelta stocastica: Si possono generare dei numeri pseudo casuali tra 0 e 1 in maniera uniforme.

Dove P1+P2 = 1

Se il random è nell’intervallo p1 vado in p1


altrimenti in p2. Si costruisce un intervallo per le
probabilità.

Ogni nodo possiede il valore di utilità, quindi, la probabilità deve essere in funzione dell’utilità. Si fa una
normalizzazione a 1. Si prende un numero e lo divido per la somma degli altri. Se S0 ha 5, S1 10 e S2 20. S2
deve avere il doppio delle probabilità. Calcolo probabilità di S1: 10/(10+20) = 1/2.

SIMULATED ANNEALING
Variante dell’HC: invece di andare sempre verso stati migliori, ogni tanto si va verso una “mossa cattiva”
cosi da esplorare più strade alternative. La mossa cattiva deve essere fatta con un certo criterio: tanto più la
mossa è cattiva minore dev’essere la probabilità di farla. L’algoritmo ha una fase iniziale ed una di regime.
Nella fase inziale dev’essere molto probabile eseguire una mossa cattiva: la riuscita dell’algoritmo dipende
molto dallo stato di partenza, cosi facendo cerco di ottenere un buono stato di partenza.

Probabilità di una mossa cattiva:


 S -> stato corrente
 S’-> stato successore
 Value(x) -> valore di utilità
 ΔE = Value(S) -Value(S’).

Se ΔE è > 0 è una mossa buona, con ΔE grande allora il salto è grande.


Uso p=eΔE per ottenere una probabilità tanto più piccola quanto è più grande |ΔE| Così:
 Se ΔE > 0 faccio la mossa
 Se ΔE < 0 genero un numero x random tra 0 e 1(che ha probabilità p di essere compreso tra 0 e p), e
passo a S’ con probabilità p.
 Se x<p eseguo la mossa, altrimento non la eseguo.

Temperatura: è un parametro inizialmente con valori molto alti, che


decresce (si raffredda) ad ogni passo dell’algoritmo. Possiamo così
usare una nuova probabilità p=eΔE/T

Inizialmente la T è molto alta (la frazione è molto piccola, così si tende


a fare molte mosse sbagliate). Il parametro T diminuisce, la frazione
diventa sempre più grande e p tenderà sempre di più a 0. Quando T=0 e
p=0 da SA si passerà a HC puro.
Gestire la temperatura: si costruisce un
vettore grande quanto i passi
dell’algoritmo che si vogliono gestire, e si
caricano i valori in ordine decrescente.

Riassumendo: se T=0 finisco, al massimo


continuo con l’HC. Altrimenti genero a
caso un successore e calcolo ΔE, se
maggiore di 0 mi sposto, se è minore di 0
calcolo probabilità della mossa con la
formula della temperatura e genero un
numero casuale per vedere se eseguire la
mossa cattiva.

Problema: la temperatura! Con T molto basso tende a diventare un HC, mentre se è troppo alta esplora
troppo. Bisogna bilanciare il parametro T. Solitamente si usa un T logaritmico (esponenziale troppo veloce,
lineare troppo lento) se T decresce piano l’algoritmo è ottimale.

LOCAL BEAM SEARCH


È una variante dell’HC, ( che tiene solo lo stato migliore), questo algoritmo tiene in memoria i k stati
migliori. Tuttavia non dà la garanzia di ottenere la soluzione, ne aumenta le probabilità:
Sono sempre restarting in parallelo, ma i restarting non sono indipendenti (se i k stati migliori sono generati
tutti dallo stato di partenza, tutti gli altri stati di partenza possibili non vengono considerati).

Variante: Stochastic beam search. Ad ogni passo tengo k stati selezionati casualmente con una probabilità
proporzionale alla loro funzione di valutazione.

Beam: raggio d’azione

ALGORITMI GENETICI
Si vogliono ottimizzare gli stati nel tempo, simulando l’evoluzione (riproducendo e selezionando gli
individui migliori). Gli stati successori sono generati da coppie di stati.
Gli stati sono rappresentati come stringhe di bit (o simboli) chiamati geni, i cui valori sono detti alleli e
mutuano casualmente. Uno stato è detto individuo(insieme di stati), un insieme di individui è una
popolazione.

Lo scopo è quello di far evolvere la popolazione di partenza in una popolazione migliore.

Ogni individuo ha associata una funzione di utilità(funzione di fitness), quindi si dovrà selezionare
l’individuo con la funzione di fitness maggiore. la popolazione finale avrà questo valore massimo.

Si fa evolvere la popolazione con tre opeazioni:


1. Selection: per la generazione successiva,
due individui sono selezionati con probabilità
pari alla funzione di utilità(/ numero individui).
Per N individui si fanno N selezioni. I più forti
vengono selezionati più volte, i più deboli si
estinguono.
2. Crossover: si prende la coppia, si prende
un punto di taglio casuale e si generano 2 figli
che sono le due stringhe invertite nel punto di
taglio (vedi figura).
3. Mutazione: ogni tanto, un gene cambia a
caso (rumore).

Si eseguono tali operazioni affinchè il numero della popolazione non sia ripristinato. Ad ogni generazione di
figli la fitness function aumenta, migliorando di generazione in generazione.

AGENTE CON AVVERSARIO


( GIOCHI A 2 CONCORRENTI)
Nei casi precedenti l’agente non aveva un avversario. La soluzione non è un elenco di azioni, ma una
strategia (azioni da fare in risposta a quelle dell’avversario). Serve la strategia per ogni contromossa, entro
dei limiti di tempo e spazio.

Imperfect information: l’informazione per ogni concorrente è parziale.


NB: non esistono giochi deterministici a informazione perfetta.

Deterministico A chance
Info perfetta Scacchi, go, othello Backgammon
Info imperfetta Bridge, poker

Tutti i giochi analizzati sono a somma 0, cioè quello che vince uno perde l’avversario (payoff).

Terminologia:
1. Utilità: ad ogni configurazione finale verrà associata un utilità(con il vincolo della somma 0, quindi se
un giocatore avrà un utilità u, il giocatore 2 avrà un utilità -u).
2. Strategia: sequenza di azioni condizionate dalle contromosse dell’avversario.
a) pura – scelta deterministica
b) mista – distribuzione di probabilità su scelte deterministiche pure
Consideriamo un gioco G con due concorrenti: max (che vuole massimizzare il payoff, agente), min
(minimizza il payoff, avversario). Max usa la strategia ‘s’ e min ‘t’, l’utilità che ne viene fuori è :
 U(s,t) → di max
 -U(s,t) → di min

TEOREMA DI MINMAX
Supponiamo di avere un gioco finito G a somma 0 con due giocatori. Quindi abbiamo due strategie: s*
(max) e t* (min). Inoltre abbiamo un numero Vg chiamato “valore di minmax di G”.

Vg → valore in cui convergono min e max se assumono valori ottimi.

1. Se min usa t* allora l’utilità attesa da Max sarà <= Vg cioè Vg → maxU(s,t*)(cioè il massimo delle
strategie s mi porta a Vg, qualsiasi altra strategia mi porta a un valore inferiore) → ottimale per min
2. Se max usa s* l’utilità attesa da Max sarà sempre >=Vg min non potrà mai scendere sotto Vg →
minU(s*,t) → ottimale per max

i due punti precedenti fanno in modo che ci sia una convergenza. Il teorema garantisce inoltre che se il
gioco è a informazione perfetta allora queste due strategie pure esistono.

Supponendo che l’ avversario usi la strategia ottimale(s* o t*), l’algoritmo deve trovare la strategia ottimale
che fa convergere l’utilità a Vg.
In questi casi conviene utilizzare delle rappresentazioni ad albero, cosi da poter alternare i livelli dell’albero
con le mosse dei giocatori(avendo 2 giocati, prima gioca Max o Min ecc...).

Nodi terminali: configurazione finale in cui


posso calcolare l’utilità :
(NB sono valori indicativi)
 Vittoria: +1 (max) -1(min)
 Sconfitta: -1 (max) +1(min)
 Pareggio: 0(max) 0(min)

NB: ad ogni mossa di max, si ha una


contromossa di min (insieme di contromosse).
Una strategia è rappresentata da un
sottoalbero(poichè ad ogni mossa di min deve
corrispondere una mossa di Max).

L’utilità dovrà essere tanto più alta quanto più la


vincità è di Max e tanto più bassa quanto la
Illustration 1: esempio gioco del tris vincita è di min

 branching factor – b : diminuisce ad ogni passo (si intende il numero di mosse che posso fare da una
determinata configurazione)(si usa quello medio, solitamente di max)
 altezza albero – h(massima profondità raggiungibile da una determinata configurazione)
Complessità strategia in tempo e spazio = O(bh) → numero di azioni e numero di configurazione che devo
gestire.

ALGORITMO DI MINMAX

Obiettivo: trovare il massimo quando l’altro cerca di trovare il minimo. Supponiamo di generare l’albero con
i valori di utilità (nei nodi terminali). Partendo dalle foglie(gli unici con dei valori di utilità), si guarda il
nodo padre:
1. se è min → viene sintetizzato il minore dei suoi figli
2. se è max → viene sintetizzato il massimo dei suoi figli

Il procedimento verrà ripetuto fino alla cima.

Caratteristiche:
 Correttezza: si (non dimostrato),
ottengo minmax
 Completezza: si se si hanno alberi
finiti.
 Complessità:
 Tempo – O(bh).
 Spazio – Si può limitare
generando l’albero seguendo un
solo cammino alla volta(DFS)
- O (b*h).

Problema: per gli scacchi, supponendo b = 35 e h = 100, l’albero avrebbe circa 10135 nodi!

È possibile applicarlo lo stesso, ma solo dopo aver eseguito un po’ di mosse ed aver eliminato alcune
strategie. Negli stati iniziale non si può decidere quale strada intraprendere dato che non si riesce ad arrivare
alla fine (troppi nodi). Non si riesce ad avere un valore di utilità. Quindi si cerca di fare una stima generando
l’albero fin dove si può, ma perdendo precisione. Più in basso riesco ad andare più precisa sarà la stima.

Look-Ahead → numero di mosse che si vogliono stimare simulando il gioco.

FUNZIONE DI VALUTAZIONE
Cambia da gioco a gioco, può essere una combinazione lineare (somma dei fattori) dei possibili attributi

Es. x1, x2 .., xk con un peso w1, w2 .., wk, allora si avrà -> x1*w1 + x2*w2 + .. + xk*wk

Si identificano una serie di caratteristiche e gli si assegna un peso, così si ha un idea di quanto può valere
uno stato rispetto ad un altro. Più alto è il valore più sarà favorevole per max, inversamente per min.

Negli scacchi consiste nel vedere il n° di pezzi:

Pesi:
Regina → 9
Pedone → 1

Ogni passo ha una sua importanza, così si può


applicare minmax e decidere il look-ahead.

Se posso esaminare bm nodi, dove m è il look-ahead,


con b = 35 e m=4 (genero moltissimi nodi),
considerando che il look-ahead di un ‘campione’ è di
8, non basta. A causa delle risorse limitate non riesco
ad avere un look-ahead elevato.

ALFA-BETA PRUNING
L’obiettivo è incrementare il cutoff. L’algoritmo elimina i rami inutili il più possibile. Si riesce così ad
aumentare il look-ahead utilizzando le risorse risparmiate. Tuttavia il numero di tagli dipende dall’ordine in
cui visito i nodi. Si tagliano i nodi più grandi del valore minimo (per min) e più piccoli per max.

NB: si genera l’albero in profondità. Per effettuare il


maggior numero di tagli, ordino i nodi in ordine di
valutazione:
→ min crescente
→ max decrescente

Proprietà:
 La potatura non ha effetti sul risultato finale
 Con l’ordine perfetto, la complessità in tempo diventa e O(bm/2)
 Raddoppia la profondità di ricerca

RAPPRESENTAZIONE DELLA CONOSCENZA


E RAGIONAMENTO
Si vuole fare in modo che un agente possa sfruttare la conoscenza di problemi passati per risolvere un nuovo
problema. Bisogna quindi avere una sorta di conoscenza: dopo che conosco, bisogna ragionarci sopra.

KRR: KNOWLEDGR REPRESENTATION AND REASONING

KB è una base di conoscenza che utilizza la logica. Un


agente usa una KB tramite il motore inferenziale che
esegue degli output.

Motore Inferenziale: meccanismo che usa la KB per


svolgere dei ragionamenti per rispondere a delle query
(percept), fornendo degli opportuni output. Se la KB è
basata sulla logica, un motore inferenziali potrebbe
essere il modus ponens.

Learner: modulo di apprendimento che


modifica la KB aggiungendo nuova conoscenza o
modificando ed eliminando quella obsoleta. Per la
logica si potrebbe usare l’induzione.

La logica permette di rappresentare concetti e


relazioni tra concetti e regole inferenziali, che
partendo da premesse permettono di arrivare a
conclusioni.
Tuttavia la logica è categorica non ammette eccezioni, ad esempio il sistema apprende che esistono solo
corvi neri, se dovesse capitare un corvo bianco l’informazione sarebbe sia vera che falsa e quindi il sistema
potrebbe diventare inconsistente. Questo perchè la logica classica e monotona.

Logica non monotona: concludo qualcosa temporamente, cosi in caso di negazione posso rimuoverla.

Due sistemi che risolvono questa problematica sono: CBR (imparano da esperienze passate, senza ricavare
una regola, poiché è spesso difficile da realizzare) e i modelli grafico probabilistici (modelli per la
conoscenza incerta).

CASE-BASE REASONING (CBR)

Il CBR mantiene l’esperienza accumulata. Si trova una metodologia


per risolvere nuovi problemi di cui non conosco la soluzione,
adattando le soluzioni dei vecchi casi. La KB diventa una memoria di
casi risolti.
Un esempio di CBR potrebbe essere “Un paziente va dal dottore
descrive i sintomi e il medico restituisce una diagnosi basandosi sulle
diagnosi passate”

Si cerca di recuperare un vecchio caso simile per adattare la vecchia soluzione al nuovo problema.

I sistemi di CBR sono composti da 4


passi fondamentali, che vengono
applicati quando arriva un nuovo
caso:

 Retrieve: recupero dalla


memoria dei casi simili al caso
corrente (caso target). I casi
recuperati faranno parte del
retrival set. Solitamente si
utilizzano dei meccanismi di
indicizzazione, per aumentare l’
efficienza.

 Reuse: verifica dell’applicabilità


della soluzione recuperata al caso
corrente, se esiste una soluzione
applicabile, si termina con un successo e si suggerisce tale soluzione per il caso corrente. In caso
contratrio si passa allo stato successivo Revise(ES “il nuovo paziente è compatibile con un vecchio
paziente curato per terapia antibiotica, ma il nuovo paziente è allergico all’antibiotico”).

 Revise: partendo dalla soluzione recuperata (e non direttamente applicabile al caso corrente), la si
modifica adattandola al caso corrente, utilizzando la conoscenza sul dominio.
 Retain: si decide se memorizzare o meno il caso corrente con la relativa soluzione (learning).
Normalmente va fatto quando:
1. la soluzione è stata prodotta con una fase di revise molto pesante
2. La soluzione è stata fornita dall’esterno perchè nemmeno Revise è riuscita a garantirla

Come rappresentiamo un caso?

Si può descrivere un caso come un insieme di attributi (key


features, insieme di attributi/valore che identificano il
problema). Bisogna inoltre descrivere il problema(inteso come
insieme di features) e la soluzione (che può essere un attributo,
come per esempio, qual’è il prezzo della macchina?).

Problema e Soluzione sono le minime informazioni che devono essere memorizzate.

Inoltre un caso può avere delle estensioni:


1. Contesti, in una diagnosi medica può essere l’eta/sesso.
2. Links ad altri casi.
3. Outcome, risultato dell’applicazione della soluzione (Sia che sia andata bene, Sia che sia andata
male). Ciò ci consente di evitare di riapplicare soluzioni che non hanno funzionato.
Si potrebbe utilizzare, per la memorizzazzione, anche un organizzazione gerarchica dei problemi (classi e
sottoclassi): gli attributi della superclasse vengono ereditati dalle sottoclassi, cosi non devono essere ripetuti
 Ogni attributo ha un
tipo.
 Un attributo è
discriminante se serve
per trovare la
somiglianza con un
altro caso
 É mandatory se può
assumere valori nulli
 Possiede un peso, per
determinare
l’importanza rispetto gli
altri attributi.

I dati in memoria si recuperano utilizzando il Case Indexing, che fornisce al sistema conoscenza anche su
come eseguire il match (si prendono in considerazione solo gli attributi discriminanti). Serve una memoria
per organizzare i vari casi:

 Memorie Piatte
 Memorie Strutturate
 Decision Tree
 K-D tree – utile per recuperare tante info da tanti attributi
 Database relazionali/oggetti (utilizzato attualmente, tuttavia non si possono usare le normali query sql,
essendo troppo rigide, non possono gestire le similarità)
 Ibrido tra DB e Decision tree

Per ognuno avremo diversi algoritmi di ricerca e diverse modalità di gestione della memoria.
MEMORIE PIATTE (associative)

I nostri casi saranno un insieme di attributi istanziati ES:


{f1(v2),f2(v2)};

Si associa ad ogni keyword (coppia feature-valore) un puntatore ai casi


che lo contengono (non gerarchico) (inverted index)

a questo punto quando mi arriva una query che contiene una


determinata feature con un determinato valore mi basta seguire i
puntatori.

DECISION TREE

Si tratta di un albero dove i nodi sono attributi e gli archi uscenti arrivano ad altri attributi e sono etichettati
con condizioni sui valori dell’attributo. Il nodo radice può essere ripetuto. Potrebbe esserci come caso finale
un insieme di stati con soluzioni diverse. Sono utilizzati per problemi di classificazione delle query, cioè
hanno associate delle classi che contengono delle soluzioni:
 Dataset (training set): <attributi descrittivi, classe>, nel machine learning si fanno vedere degli esempi
con la soluzione, sono l’insieme di allenamento, servono per fare apprendere il modello all’ia.
 Query<attributi descrittivi> solamente alcuni attributi, ma sicuramente non la classe poiché è la
soluzione
 Soluzione, determinare la classe della soluzione.

Le foglie indicizzano un insieme di casi (istanze) e tengono traccia di quanti casi ci sono nelle varie classi
(soluzioni). Ci sono vari algoritmi, in particolare C4.5 genera in output automaticamente un decision tree.

Esempio: L’algoritmo impara se è meglio giocare a tennis o no

Quando arriva un caso target:


 Se il caso è completo (tutti gli attributi sono completi, cioè hanno volori) è possibile attraversare il
decision tree, quindi recuperare la classe e ottenere i casi simili(ES una query completa potrebbe
essere(sunny,70,70,true)).
 Se il caso è incompleto, si percorre l’albero finché possibile e si prende tutto il sottoalbero. Dopo di che
recupero i casi associati (ES (sunny,70,?,true) percorro l’albero fino a Humidity, a questo punto visto
che non conosco questo parametro prenderò come retrival set (D1,D4,D5,D2,D3) che appartengono a
classi diverse, quale scelgo come classe soluzione? Quella che ha più casi associati, nel nostro caso P(Se
possibile, si sfoltisce il sottoalbero con gli attributi presenti))

In entrambi i casi si possono avere un insieme di casi con P ed N. Si sceglie a maggioranza P o N.

SIMILARITÀ: Nei decision tree si recuperano casi simili con una nozione implicita di similarità, data dalla
comunanza di valori rispetto ad una classe (distanza). Non sempre gli attributi sono generici, ci vuole una
nozione esplicita di similarità.

Il matching indica “quanto” due casi sono simili, per fare ciò si ricorre alla metrica (o distanza) tra punti
(X è molto simile a Y sse X è poco distante da Y). Un caso viene rappresentato con punti n-dimensionali,
dove ‘n’ è il numero di attributi del caso. Se ne calcolo la distanza con un altro caso, allora:
similarità = 1 - distanza

La distanza discreta è utilizzata per gli attributi


nominali, ovvero quegli attributi che non hanno
un valore specifico (es i colori).
KNN (K NEAREST NEIGHBORS)
Supponiamo tanti casi con ‘n’ attributi (n-
dimensioni), KNN prende i k casi più vicini all’input:
1. Si definisce una funzione di distanza per ogni
attributo (distanza locale). Alcuni attributi
potrebbero richiedere l’overlap.

2. Si calcolano le distanze tra il caso target e quelli in


memoria, combinando le distanze degli attributi
pesate in base all’importanza.

3. Si prendono i k casi più vicini al target (retrival) e


si usano le loro soluzioni come base per generare
la soluzione nei passi successivi nel processo dell
4R (reuse/revise)

KNN esegue una scansione lineare ottenendo i k casi simili, solitamente si usa k=1
NB: Se x e y hanno lo stesso peso incrementa come una circonferenza.

Tipologia di attributi:
 Nominali (o categorici): i valori non posseggono un ordinamento (es. colori), quindi non si possono
fare differenze.
 Lineari: i valori posseggono un ordinamento
 Discreti: mappabili su numeri naturali (es. Età (0,1,2,...), temperatura (bassa < media < alta))
 Continui: mappabili su numeri reali (es. Temperatura espressa in gradi)

la tipologia degli attributi influenza la metrica di distanza.

METRICA ETEROGENEA
(Hetereogeneous Euclidian Distance Metric - HEOM)

f = attributo
df = distanza su f
x,y sono i valori che può assumere.

Se f è lineare, la formula permette di


assumere solo valori tra 0 e 1 (divide per
il range)
L’overlap non è sempre ottimo, nel caso di attributi nominali si creano delle tabelle di similarità (1-distanza):
Righe e colonne rappresentano gli
attributi che da confrontare (la
diagonale è sempre 1, non vi è
differenza con sè stessi).

Si impostano dei valori di


similarità per i singoli casi.
Possono essere:
 Simmetrici (x è simile a y e
viceversa)
 Asimmetrici (x è simile a y
ma non è detto che valga il
contrario)

Se inserisco una metrica su un singolo attributo, come faccio ad applicarla su un caso che è composto da k
attributi? Devo applicare la similarità tra ogni attributo e poi combinarle insieme.

La combinazione delle distanze (aggregazione o distanza globale) è una media ponderata. Si sommano
tutte le distanze per il loro peso e si divide per la somma dei pesi. La similarità è data da S= 1-D(Ci,Cj)

Esempio calcolo
similarità
HETEROGENEOUS VALUE DISTANCE METRICE (HVDM)

In questo caso si utilizza la probabilità


condizionata: sapendo che f = x, si trova la
probabilità di essere nella classe Ci

IMPLEMENTAZIONE K-NN

Si esegue una scansione lineare, si calcolano le distanze con il caso target e si restituiscono i k risultati più
“vicini” (costo O(n))
Si utilizzano kd-trees (costo O(log n) per k=1), per recuperari i casi “vicini”. Sono alberi di ricerca dove un
nodo rappresenta un punto n-dimensionale(quindi un caso), su ognuno di essi si esegue uno split binario su
una dimensione(su un attributo). Necessità di costruzione (costo O(n log n)) e mantenimento (costo O(log
n)) della struttura.

Illustration 2: esempio a 2 dimensioni

IDEA: Si usa una coda di priorità (heap) dove ogni punto (caso) ha associato un valore che è una sottostima
della distanza del punto dalla query. Ad ogni nodo verifico la condizione rispetto alla query, cioè navigo
nell’albero rispetto alla query:

 Il nodo figlio sul ramo verificato è aggiunto alla heap con valore 0 (nel caso migliore in quel sotto-ramo
vi sono nodi a distanza 0 da query)
 Il nodo figlio sul ramo non verificato è aggiunto alla heap con valore pari alla differenza tra valore di
soglia della condizione e valore nel nodo query (nel caso migliore, da quel lato ci sono nodi ad almeno
quella distanza dalla query nella dimensione corrente)

Ad ogni passo si tengono il miglior nodo trovato (best) e la sua distanza dalla query (best_dist). L’algoritmo
termina (restituendo best e best_dist) se: l’heap si svuota o il migliore della heap è il peggio del best.

ADATTAMENTO (Revise)

Se il passo di Reuse trova una soluzione non applicabile nel nostro caso, bisogna adattare la soluzione
trovata per il caso query. Questa quindi va cambiata in qualche parte o anche solo per qualche parametro:
 Transformational adaption: riuso della soluzione recuperata, combinando i parametri o aggiungendo o
modificando le part. Si esegue modificando attributi della soluzione, oppure aggiunte modifiche o
cancellazione di parti della soluzione.

 Derivational adaption: si mantiene la traccia della soluzione, di come è stata generata, cosi da poterla
riapplicare al caso corrente. Particolarmente utile nei problemi di Case-Based Planning

Tipicamente vengono fatte delle regole ad-hoc per ogni sistema. In caso di fallimento dell’adattamento della
soluzione, potrebbe esserci un problema di apprendimento.
RETAIN
In questa fase si decide se tenere la nuova soluzione (learning)
oppure cancellare il caso (forgetting). Ci vogliono delle funzioni di
valutazione per decidere cosa fare in questi casi. Utility
problem(swamping problem): limite in cui diventa dannoso
aggiungere i casi, le performance peggiorano. Si vuole valutare la
performance del sistema tramite i seguenti parametri: tempo di
esecuzione, qualità delle soluzioni, competenza del sistema (capacità
di fornire soluzione). Queste caratteristiche dipendono dal numero
dei casi in memoria e dalla loro qualità.

Si tenderebbe a pensare che più casi in memoria corrispondano ad una migliore competenza, migliore
qualità della soluzione e peggior tempo di risposta. Mentre con meno casi: peggior competenza, peggiore
qualità e miglior tempo di risposta. L’utility problem ha lo scopo di massimizzare le performance:
 se arriva un problema e si risolve con reause -> non si inserisce
 se arriva un problema e si risolve con con l’adattamento -> non si inserisce
 se arriva un problema e si risolve con l’adattamento ed esso è pesante -> va inserito
 se il problema non è stato risolto, si cerca la soluzione -> si inserisce la soluzione

Il K-NN degenera all’aumentare delle dimensioni (numero di attributi) dello spazio considerato ( con D=1 ci
sono 2 NN, con D=2 ci sono 4 NN, con D=3 ve ne sono 6 e cosi via). Una soluzione al problema è quella di
usare solo gli attributi utili (features selection).

RAGIONAMENTO INCERTO
Ragionare in presenza di conoscenza incerta (mancanza di informazioni) -> Calcolo delle probabilità
Solo il calcolo delle probabilità si è dimostrato generale ed adeguato, in passato vi furono diverse altre
soluzioni. Una delle obbiezzioni che venne fatta era che il calcolo delle probabilità non è un formalismo
umano, nel caso dell’ AI vennè superato:

Descrittivo vs Normativo
 Descrittivo: Descrivo quello che vedo e cerco di riprodurlo.
 Normativo: si cerca di arrivare alla soluzione, tuttavia non ricostruisco esattamente l’obiettivo.

Per rappresentare il grado di certezza


utilizziamo 2 numeri (0,1)

Illustration 3: assunzioni di base per cui il


calcolo delle probabilità è l'unico adeguato

ELEMENTI DI PROBABILITÀ

con preposizione si indica un


evento che rappresenta la verità della proposizione.

ASSIOMI DI KOLIMOGOV

Assioma 1

P(Ω) = 1 -> quello che va oltre omega non è nel nostro modello

Assioma 2
per ogni X appartenente a 2^ Ω(sottoinsieme del sottoinsieme di omega) 0<=P(X)<=1

Assioma 3

Se l’intersezione è vuota basta sommare -> se x o y sono mutamente esclusivi.

INDIPENDENZA DI DUE EVENTI


Due eventi sono indipendenti quando:
P (X∩Y) = P(X)P(Y) oppure P(X) = P(X)P(X|Y) = P(Y)P(Y|
X)

PROBABILITÀ TOTALE

Se H1, ...Hn sono eventi mutuamente esclusivi ed esaustivi, allora un dato evento E:

NB. Mutua esclusione è l’opposto di indipendenza (se si verifica un evento NON si verifica l’altro)
RANDOM VARIABLES

In AI, invece di parlare di eventi si preferisce normalmente lavorare su random variables(variabili casuali o
aleatorie). Una r.v. è una variabile che può assumere valori in un dato dominio, su cui è definita una
distribuzione di probabilità (ossia una funzione che indica con che probabilità la variabile assume certi
valori). Se assumono solo un numero finito di valori si dicono variabili discrete. Distribuzione di variabili
aleatorie:

Illustration 4: probabilità che


la variabile X assuma il valore
xi

RETI BAYESIANE

Esistono due scuole di pensiero sull’interpretazione della probabilità:


 Frequentista: legato alla ripetizione di un evento, statistica classica. Se un evento è riproducibile
all’infinito, si ripete e si conta quante volte avviene e quante volte no (frequenza). Sia Sn(E) il numero di
volte che avviene l’evento su n ripetizioni. Si definisce come probabilità dell’evento E, la frequenza
limite con cui l’evento E avviene su infinite ripetizioni:
n
S (E
)
P
(E)lim
n n

 Soggettivista: reti Bayesiane. La probabilità è intesa come il grado di certezza assegnato ad un evento
soggettivamente, ma in modo coerente. La probabilità di un evento E è considerata essere la quantità di
utilità P(E) che un individuo è disposto a scabiare ricevendo in cambio: 1 se E avviene, 0 altrimenti.

TEOREMA DI BAYES

Siano h1, ...hn degli eventi mutuamente esclusivi ed esaustivi. Sia e un evento qualsiasi (evidenza). Allora:
Esempio applicazione Bayes

BAYES GENERALIZZATO (Naive Bayes)

Se ho più evidenze da considerare, è difficile generalizzare il T. Bayes. Però se per ipotesi le evidenze sono
indipendenti tra di loro, diventa:
RAPPRESENTAZIONE GRAFICA RETI BAYESIANE

Per semplicità siano H={h segnta,h} le ipotesi ed E = {e segnato,e} l’evento condizionante.


Si può considerare E come un evidenza dell’ipotesi H, se è vero questo si può rappresentare:

E quindi:

In generale:

Di base si può assumere che gli eventi siano


indipendenti tra loro (mancano degli archi tra le E)

RETI BAYESIANE IN PRATICA


Una Bayesian Network è una coppia <G,P> dove:
 G: è un DAG:
 i nodi rappresentano variabili casuali discrete
 un arco orientato X->Y indica una relazione di dipendenza (Y dipende da X).
 P: è una distribuzione di probabilità sulle variabili rappresentate dai nodi X1...Xn tale che:
n
P
(
X1 X
)
n
,...P
(
Xi|Pa
(
X)
i)re n t

i1

Parent(Xi) indica i genitori della variabile Xi in G.

Le BN sono quindi una notazione grafica per


rappresentare asserzioni di indipendenza
condizionata (due variabili sono indipendenti
tra loro quando avere un’informazione
(probabilità) su di una non cambia
l’informazione sull’altra).

Esempio

INDIPENDENZA CONDIZIONALE

GRAPH THEORETIC INDEPENDENCE

Dato un DAG con vertici V, siano u,v ⊆ V ed E ∈


V. Si dice che u è d-separato da v dato E se ogni
cammino indiretto tra u e v è bloccato da E ovvero:
 esiste un nodo z lineare o divergente
appartenente a E
 esiste un nodo z convergente tale che ne’ < ne’
un suo dicendente appartengono ad E

Se u è d-separato da v dato E, allora si considera u


indipendente da v dato E.

SEMANTICA GLOBALE (esempio)


Distribuzione di tutto il grafo per la probabilità
congiunta

SEMANTICA LOCALE

Ogni nodo è condizionatamente indipendentemente dai suoi non


discendenti, dati i suoi genitori. Dato x si possono suddividere i
nodi in tre categorie: genitori, figli e altri genitori dei figli (mate).
Si può stabilire che x è indipendente dai suoi non-discendenti se si
conoscono i suoi genitori.

COPERTA DI MARKOV

Ogni nodo è condizionatamente indipendente da ogni altro data la sua


coperta di markov: ( genitori + figli + altri genitori dei figli).

TIPOLOGIE DI RAGIONAMENTO

 Predittivo: cercare di predire una conseguenza


conoscendo una causa (probabilità di starnutire
sapendo di avere il raffreddore)
 Diagnostico: osservare degli effetti, e cercare di
capire le probabilità delle cause (sapendo che
starnutisco, si vuole sapere la probabilità di avere il
raffreddore)
 Intercausale: chiedersi dopo aver visto un effetto con tante cause, trovare la causa più probabile.
 Distribuzione condizionata compatta

Quando ci si concentra su una variabile, bisogna anche osservarnee i genitori: se questi sono tanti potrebbe
diventare un problema riuscire a rappresentare tutto in una CPT (condition probability table (TCP in
italiano)). Una soluzione a questo problema sono le distribuzioni canoniche. Esse sfruttano qualche
regolarità che permette una rappresentazione compatta. Ne esistono di due tipi:
 Nodi deterministici
 Noisy OR

NODI DETERMINISTICI
Sono il caso più semplice di rappresentazione canonica: X = f (Parents(X)) per qualche funzione f. Il valore
di un nodo è specificato in modo univoco dai valori dei nodi genitori tramite funzione che calcola il valore.

NOISY-OR
Sia X una variabile booleana con U1 ..Uk genitori booleani (si dovrebbero inserire 2k valori). Sia pi la
probabilità che X sia vera quando Ui è vera e tutti gli altri U sono falsi. Infine sia X falso quando tutti gli Ui
sono falsi. Nel Noisy-OR il nodo figlio è falso solo se tutti i genitori che valgono vero sono inibiti. La
probabilità di questa inibizione è il prodotto delle probabilità di inibizione di ciascun genitore. Quindi la
probabilità che il nodo figlio sia vero è 1- il prodotto delle probabilità di inibizione dei genitori che valgono
vero:

Leak: riassunto delle cause non modellate, probabilità che la variabile abbia uno stato in tutti gli altri casi
non in memoria.

ALGORITMI DI INFERENZA(in Reti Bayesiane)

Calcolo delle probabilità a posteriori tramite schemi computabili che utilizzano:


 E = e (insieme di istanze variabili osservate)
 Q = q (insieme di probabilità)
P(Q =q | E = e) = P(q,e) / P(e)

Ovvero: le probabilità sono la somma di tutte le probabilità congiunte con q ed e e tutte le occorrenze delle
altre variabili. (Marginalizzazione: tengo le variabili che mi interessano).

NB. La congiunta la ottengo moltiplicando tutte le probabilità delle variabili negli stati che interessano
(vero/falso o altri stati).

Il problema è rimanere nella rappresentazione implicita, se ritorno alla probabilità congiunta non risolvo
niente, perdo efficienza: non bisogna avere una joint esplicita!

Tipologia di algoritmi:
 Esatti: fornisce il valore esatto delle probabilità a posteriori fino a una precisione decisa. Si usa in reti
piccole o con cammino unico tra due nodi. (NB. Diventa NP-Hard nel caso di cammini multipli!)
 Approssimati: forniscono una stima, più precisa con più tempo a disposizione (simulazione
stocastica).

ALGORITMI ESATTI
Se le reti sono singly-connected, esiste un algoritmo a scambio di messaggi che trova le probabilità in tempo
polinomiale. Algoritmo di Kim-Pearl: ogni nodo indica ai vicini di essere stati osservati, prende
l’informazione, cambia le probabilità e ritrasmette il messaggio.

Se invece è multiply-connected, l’algoritmo va in loop. L’idea è di trasformare la rete m.c. in s.c., eseguire
l’algoritmo e ritrasformare i risultati sulla rete originaria
Due metodi di trasformazione: clustering e conditioning.

CLUSTERING
Si raggruppano dei nodi per trasformare la rete in singly-connected. Le probabilità del raggruppamento è la
combinazione vero/falso delle probabilità (prodotto cartesiano, posso farlo perché conosco il padre, quindi
Spr e Rain sono indipendenti).

NB. Funziona male con i grafi con tanti genitori, si creano tabelle di probabilità grandi. Una delle regole di
clustering è unire (moralizzare) i nodi che hanno un figlio in comune.

ALGORITMI DI ELIMINAZIONE VARIABILI


Schema di algoritmo esatto che non trasforma la rete, aiuta a sapere quali sono le variabili che interessano le
probabilità congiunte. Facendo la marginalizzazione infatti, alcune variabili non vengono usate.

Si stabilisce un ordinamento delle distribuzioni della rete e si calcola la query eliminando (con la
marginalizzazione) le variabili non richieste. Ordinamenti diversi danno luogo ad efficienza diversa.
L’Ordinamento ottimale (minor numero di operazioni da effettuare) e’ problema NP-hard. Si usano quindi
delle euristiche Altro nomi per l’algoritmo: Bucket Elimination, Factoring.

fx,y = fattore di Y ottenuto da XY eliminando X

ELIMINAZIONE VARIABILI ATTRAVERSO SOMMATORIE


Ad esempio, se volessi ricavare P(B|J,m), elimino le variabili mettendo le sommatorie dove c’è l’ultimo
utilizzo delle variabili (devo togliere A e E). Partendo da destra, quando non trovo più la variabile a sinistra
metto la sommatoria. Un sommatoria ∑A toglie A, sommando dove le altre variabili hanno lo stesso valore.
NB. Piazzare bene le sommatorie per non trovare di nuovo la variabile dopo averla tolta

α P(B|J,m) = α P(B) ∑E P(E) ∑A P(A|B,E) P(J,A) P(m, A)

α = fattore di normalizzazione per la somma a 1

Si scrive→ P(B|J,m) = α P(B) ∑E P(E) ∑A fA B E (A,B,E) fA J (A) fA M (A) *

* Il prodotto coinvolge tre variabili: fA B E J M (A,B,E) = fA,B,E (A,B,E) fA,J (A) fA,M (A)

= prodotto fra tutte le probabilità con tutte le combinazioni delle 3 variabili


= α P(B) ∑E P(E) fA B E J M(B,E)
= α P(B) fE(E) fA B E J M(B,E)
= α P(B) fA B E J M(B) = α fB(B) fA B E J M(B) (soluzione)
Cambiare l’ordinamento modifica il piazzamento delle sommatorie. Messe bene aiuta a portar dietro valori
più piccoli per conti più semplici.

VARIABILI IRRILEVANTI
Quando ho la sommatoria di una sola variabile, essendo una probabilità la somma vale 1 quindi posso
toglierla.

ALGORITMI DI APPROSSIMAZIONE (anytime algorithms)


Algoritmo approssimato di simulazione stocastica. Simulo il comportamento di un sistema,
campionando(sampling, campionamento) i valori valori secondo la sua distribuzione di probabilità.

Simulazione stocastica nelle reti:


 Run di simulazione: assegnamento di un valore ad ogni variabile della retea campionando dalla
distribuzione della rete
 Strima delle probabilità richiesta sulla base dei valori ottenuti nei vari run

CAMPIONAMENTO DI UNA RANDOM VARIABLES


Sia X = {x1/p1 .. xk/pk}, xi è un valore di X e pi=(X=xi). Si consideri l’intervallo [0,1] suddiviso in k parti,
ognuna di ampiezza pi. Successivamente si generi un valore α,
random e uniforme tra [0,1] se α cade nell’i-esima parta, allora si
assegna X=xi.

REJECTION SAMPILING / LOGICAL SAMPLING


Si inizia il sampling dai valori di root (i nodi senza genitori) questo perchè non posso avere la distribuzione
di probabilità se non conosco i genitori dei nodi. Iniziando dalle root, il sampling segue le frecce della BN
(fino alle foglie). Dopo aver campionato tutto finisco una run e ripeto il campionamento N volte (eliminando
gli scenari inconsistenti). Dopo aver eseguito N run
(salvando tutto in un opportuna tabella) posso
stimare la query (come se fosse un dataset):

Problema delle 100 run: se ne uso solo 27 non è detto che i run mi generino l’evidenza. Se imposto N, non
è detto che le uso tutte, solitamente si rigettano quelle che vanno in contrasto con l’evidenza. Purtroppo ciò
non si può sapere a priori. Quando genero l’evidenza ed essa ha una probabilità bassa viene scartata. Una
possibile soluzione è quella di non scartare nulla (ma ciò potrebbe essere troppo pesante uno 0.1% potrebbe
essere visto come un 100%).

LIKELYHOOD WEIGHTING
Il campionamento avviene come la Rejection Sampling però quando arrivo ad uno nodo evidenza, questo
non viene campionato, viene fissato al valore osservato. In questo caso la run non la conto come realistica,
ma assegno un peso in modo da poter pesare la probabilità. La LW permette quindi di selezionare tutti i run:

NB: se tutti i valori saranno uguali ad 1 sarà


come fare una Rejection Sampling.
MARKOV SAMPLING
La coperta di markov è data da Parent(X) + Children(X) + Mates(X). Se conosco tutti i nodi della coperta di
markov (MB) posso campionare X:
P(X | wx) = P ( X | MB(X)) = prodotto CPT di X e CPT dei figli di X

TEORIA DELLE DECISIONI


Combina il calcolo delle probabilità col
prendere una decisione.
 Preferenze: si fa un esperimento, i
risultati sono più o meno preferibili
 Lotteria: può avere più risultati,
associata ad ogni risultato vi è una
preferenza.
Se ho più decisioni posso modellare ogni decisione con una lotteria:

Quale delle due scegliere? Si combinano le due


lotteria guardandone non solo l’utilità ma anche
la probabilità.

Supponiamo che i risultati della lotteria abbiano


un utilità (funzione di utilità) ed una probabilità.

Utilità attesa
Data una variabile aleatoria X={x1/p1..xk/pk} la media probabilistica di X è data da E(X) = Σ(i=1 a k) pi*xi

L’utilità attesa di una lotteria L è la media probabilistica:

EU ( L)  p1U ( x1 )  p2U ( x2 )  ... pnU ( xn )


Si calcola l’utilità attesa di L1 e L2 e si prende quella maggiore.

DECISION TREES
 Decision nodes: possibili decisioni
 Chance nodes: variabili probabilistiche
 Value Nodes: scenario/outcome

Per calcolare l’utilità attesa bisogna dare un valore di utilità


agli outcome.

I risultati vengono messi in ordine di preferenza. Si dà 0


all’utilità peggiore e 1 a quella migliore. Una volta inserita
l’utilità è possibile calcolare quella attesa. Se si hanno tante
variabili ci saranno molti alberi ripetuti, una possibile
soluzione sono i diagrammi di influenza.

DIAGRAMMI DI INFLUENZA
Si tratta di dei DAG con tre tipi di nodi:
 chance nodes (rotondo): nodo probabilistico per ogni variabile
 decision nodes (quadrato): possibili azioni
 value node (esagonale): funzione di utilità espressa in forma tabellare (valore)
Caratteristiche:
 Se il nodo valore ha archi entrati sono i nodi che determinano la funzione di utilità.
 Se il nodo chance ha archi interni la probabilità è influenzata anche dagli altri nodi (simil Bayesian
Network).
 Nel nodo decisione se c’è un arco entrante bisogna conoscere il valore del genitore (gli archi in questo
caso vengono detti informazionali).

VALUTAZIONE INFLUENCE DIAGRAMS


Nel caso di unico nodo decisione senza archi informazionali:
1. Imposta le variabili osservate all’evidenza
2. Per ogni possibile valore del nodo decisione
a) Assegna tale valore al nodo
b) Calcola le probabilita’ a posteriori dei nodi genitori del nodo utilita’ (con qualsiasi algoritmo
per BN)
c) Calcola l’utilita’ attesa della decisione
3. Restituisci la decisione con utilità attesa massima

MULTI-ATTRIBUTE UTILITY
Spesso l’utilità è definita da molti attributi, ciò comporta che bisogna assegnare troppi valori

Con archi informazionali


Prima di prendere una decisione è richiesta un informazione. Si parla di policy (o strategia) (bisogna
trovarne una ottimale).

Quanto vale l’informazione in più ? Si può calcolare nel seguente modo:


EU(Miglior decisione con info) - EU(miglior decisione senza info)

Potrebbero piacerti anche