In classe sto imparando problemi di iterazione del valore e decisione markov, stiamo facendo attraverso il progetto UC Berkley pac-man, quindi sto cercando di scrivere il valore iteratore per esso e, a quanto ho capito, l'iterazione del valore è quella per ogni iterazione si sta visitando ogni stato, e quindi il monitoraggio di uno stato terminale per ottenere il suo valore.
Ho la sensazione che non abbia ragione, perché quando provo che in python ho una profondità ricorsiva superiore. Così torno allo pseudo-codice, e c'è un Vk[s]
e Vk-1[s']
, che avevo pensato significasse valore di stato, e valore di newState
, ma mi manca qualcosa.
Quindi qual è il significato di k
e k-1
?
Il mio codice:
def val(i, state):
if mdp.isTerminal(state) or i == 0:
return 0.0
actionCost = {}
for action in mdp.getPossibleActions(state):
actionCost[action] = 0
for (nextState, probability) in mdp.getTransitionStatesAndProbs(state, action):
reward = mdp.getReward(state, action, nextState)
actionCost[action] += probability * reward + discount * val(i - 1, nextState)
return actionCost[max(actionCost, key=actionCost.get)]
for i in range(iterations):
for state in mdp.getStates():
self.values[state] = val(i, state)
Pseudo codice:
k ←0
repeat
k ←k+1
for each state s do
Vk[s] = maxa ∑s' P(s'|s,a) (R(s,a,s')+ γVk-1[s'])
until ∀s |Vk[s]-Vk-1[s]| < θ