Esercizio - Policy iteration sul mondo 4x3 (slide del corso)
Teoria: Processi decisionali di Markov - utilità, equazione di Bellman, value e policy iterationUn MDP (processo decisionale di Markov) modella un problema decisionale sequenziale in ambiente stocastico e completamente osservabile con stati S, azioni A(s), modello di transizione P(s'|s,a) e ricompensa R(s,a,s'). La soluzione è una politica pi(s). L'utilità U(s) è il ritorno scontato atteso e soddisfa l'equazione di Bellman U(s)=max_a sum_s' P(s'|s,a)[R(s,a,s')+gamma U(s')]; la quantità tra parentesi quadre sommata su s' è la funzione azione-utilità Q(s,a). Value iteration parte da U=0, applica Bellman a tutti gli stati insieme e si ferma quando delta <= eps(1-gamma)/gamma; la politica è argmax_a Q(s,a). Policy iteration alterna valutazione (sistema lineare, senza max) e miglioramento greedy, e termina quando la politica non cambia. Nei POMDP lo stato è nascosto: si lavora sullo stato di credenza b aggiornato come nel filtraggio, b'(s')=alpha P(e|s') sum_s P(s'|s,a)b(s).Processi decisionali di Markov - utilità, equazione di Bellman, value e policy iteration →, sezione 7. Il mondo è lo stesso di Esercizio - Value iteration sul mondo 4x3 (slide del corso) (muro in , terminali con e con , , azione voluta con e laterali , urto = si resta, ): le funzioni costruisci_mdp, stampa, STATI, IDX, NOMI, TERMINALI si riusano tali e quali.
Testo (dalle slide). Si consideri la politica delle slide: , , , e così via (riga 3 tutta Destra, colonna 1 Su, Su in ; per le celle in basso l'immagine delle slide non è leggibile con certezza e si sceglie Sinistra, Su, Sinistra).
(a) Scrivere e risolvere le equazioni di valutazione. (b) Eseguire il passo di miglioramento. (c) Iterare fino alla politica stabile e confrontarla con value iteration. (d) Partendo da "Su ovunque", in quante iterazioni converge?
Soluzione
(a) Valutazione
Con l'azione fissa il sparisce e le 9 equazioni sono lineari. Si indicano , , , , , , , , , con e . Per ogni cella, 0,8 per la direzione voluta e 0,1 per ciascuna perpendicolare (un esito contro il muro o il bordo ricade nella stessa cella):
| cella, azione | equazione |
|---|---|
| Su | |
| Sx | (su: muro, giù: bordo) |
| Su | |
| Sx | (su: entra nel ) |
| Su | (sinistra: bordo, destra: muro) |
| Su | (sinistra: muro, destra: ) |
| Dx | |
| Dx | (su: bordo, giù: muro) |
| Dx |
(Le equazioni di , e coincidono con quelle mostrate nelle slide.) Sistema , risolto con np.linalg.solve:
Verifica di una equazione, quella di : .
(b) Miglioramento
Con queste utilità si calcola per ogni azione. Quasi ovunque l'azione corrente è già la migliore. Fa eccezione :
| azione in | |
|---|---|
| Su (corrente) | |
| Giù | |
| Sinistra | |
| Destra |
( coincide con , come deve: è l'azione della politica; Sinistra la supera.) In : Sinistra (corrente), Giù , Destra , Su : nessun cambio. Nuova politica : la stessa, con = Sinistra.
(c) Seconda iterazione
Nuova valutazione con : cambia solo , e di conseguenza : mentre le altre sette utilità restano uguali. Il miglioramento non cambia nessuna azione: la politica è stabile, e le utilità sono esattamente quelle di value iteration ( e per e ). Value iteration e policy iteration trovano la stessa politica, come previsto.
(d) Da "Su ovunque"
| iter. | azioni che cambiano nel miglioramento | ||
|---|---|---|---|
| 1 | SuDx, SuDx, SuSx, , , SuDx | ||
| 2 | DxSu | ||
| 3 | DxSx | ||
| 4 | SuSx | ||
| 5 | nessuna: fine |
Servono 5 iterazioni, ciascuna con un sistema lineare da risolvere. Con la politica "Su ovunque" l'utilità è negativa (il robot sbatte contro i bordi), ma già alla seconda valutazione passa da a . Value iteration, sullo stesso problema, ne richiede 40 (più semplici): è il confronto della teoria. Una politica intermedia di policy iteration è già usabile; un intermedio di value iteration no.
Il codice
def valuta(pi):
"""Valutazione: risolve (I - gamma P_pi) U = R_pi (nei terminali il futuro e' nullo)."""
n = len(STATI)
P_pi = np.array([P[pi[i], i] for i in range(n)])
R_pi = np.array([R[i, pi[i]] for i in range(n)])
for t in TERMINALI: P_pi[IDX[t], :] = 0
return np.linalg.solve(np.eye(n) - gamma * P_pi, R_pi)
def migliora(U, pi):
Q = R.T + gamma * P @ U # Q[a,s]
nuova = Q.argmax(axis=0)
for i in range(len(STATI)): # a parita' di Q si tiene l'azione corrente
if np.isclose(Q[pi[i], i], Q[:, i].max()): nuova[i] = pi[i]
return nuova, Q
P, R = costruisci_mdp(-0.04); gamma = 1.0
pi = np.array([NOMI.index("Su")] * len(STATI)) # politica iniziale: Su ovunque
for it in range(1, 10):
U = valuta(pi)
nuova, Q = migliora(U, pi)
print(it, "U(1,1) = %.4f" % U[IDX[(1, 1)]], "U(3,1) = %.4f" % U[IDX[(3, 1)]])
if (nuova == pi).all(): break
pi = nuovaOutput atteso:
1 U(1,1) = -1.4262 U(3,1) = -0.4854
2 U(1,1) = 0.5482 U(3,1) = 0.6166
3 U(1,1) = 0.7310 U(3,1) = 0.6166
4 U(1,1) = 0.7453 U(3,1) = 0.6307
5 U(1,1) = 0.7453 U(3,1) = 0.6514La riga if np.isclose(...) evita oscillazioni quando due azioni hanno lo stesso : si tiene quella corrente, e il test "la politica non è cambiata" è affidabile.
Versione ripasso
Teoria: Processi decisionali di Markov - utilità, equazione di Bellman, value e policy iterationUn MDP (processo decisionale di Markov) modella un problema decisionale sequenziale in ambiente stocastico e completamente osservabile con stati S, azioni A(s), modello di transizione P(s'|s,a) e ricompensa R(s,a,s'). La soluzione è una politica pi(s). L'utilità U(s) è il ritorno scontato atteso e soddisfa l'equazione di Bellman U(s)=max_a sum_s' P(s'|s,a)[R(s,a,s')+gamma U(s')]; la quantità tra parentesi quadre sommata su s' è la funzione azione-utilità Q(s,a). Value iteration parte da U=0, applica Bellman a tutti gli stati insieme e si ferma quando delta <= eps(1-gamma)/gamma; la politica è argmax_a Q(s,a). Policy iteration alterna valutazione (sistema lineare, senza max) e miglioramento greedy, e termina quando la politica non cambia. Nei POMDP lo stato è nascosto: si lavora sullo stato di credenza b aggiornato come nel filtraggio, b'(s')=alpha P(e|s') sum_s P(s'|s,a)b(s).Processi decisionali di Markov - utilità, equazione di Bellman, value e policy iteration →; mondo e funzioni di Esercizio - Value iteration sul mondo 4x3 (slide del corso).
Algoritmo. Valutazione: con fissa, sistema lineare (niente max). Miglioramento: . Stop se la politica non cambia.
Politica delle slide (riga 3 Dx; colonna 1 Su; Su; Sx, Su, Sx). Equazioni (con ): ; ; ; ; ; ; ; ; .
Soluzione: , , , , , , , , .
Miglioramento. In : Su , Giù , Sinistra , Destra : cambia in Sinistra. Altrove nessun cambio (in Sinistra resta la migliore).
Seconda valutazione: , , resto invariato. Nessun cambio: politica stabile, uguale a value iteration.
Da "Su ovunque": , cioè 5 iterazioni (contro 40 di value iteration).
U = valuta(pi); nuova, Q = migliora(U, pi)Errori tipici: lasciare il max nella valutazione; dimenticare di azzerare il futuro nei terminali (matrice singolare); non tenere l'azione corrente a parità di (oscillazioni).