Ajuda numa função recursiva em phyton

simjohn

Power Member
Boas, estou a resolver um problema em phyton, e tenho de utilizar o algoritmo de iteração de valor.
o algoritmo é qql coisa assim:
U'(S)= R(S)+FD*P(S,a,S')U(S')
em que R(S) é a recompesa de estar no estado S, FD é o fator de desconto P(S,a,S')U(S') em que isto é a probabilidade de estar no estado S* a utilidade do estado S + probabilidade de ir para o estado S' * a utilidade do estado S'
o codigo que tenho é este mas isto está a dar erro quando chega +PAndar*U(idx+1) pois o U(idx+1) ainda não foi calculado.

o espaco é uma lista com as recompensas de cada estado.

Código:
while d<(E*((1-FD)/FD)):       for idx, val in enumerate(espaco):
              
              def U(idx):
                if idx < len(espaco):
                 valor = espaco[idx]+ FD *(PParado*espaco[idx]+PAndar*U(idx+1)+PSeguirOutra*U(idx-1))
                 print valor
                 return valor
              
              if (U(idx)-U(idx+1))>d:
               d=(U(idx)-U(idx+1))
 return U(idx)
 
O que apresentaste é um MDP, por isso é que questionei sobre o assunto... :)
Sobre o código, não percebo o que esteja mal aí... Talvez fosse mais simples pores o código todo no pastebin ou algo do género e por aqui o link...

Edit. Já agora porque chamas de função recursiva a isso?
 
Última edição:
http://pastebin.com/Gm4T0Wvh

t
ens aqui o codigo todo, eu chamo a isto uma função recursiva porque para calcular o estado S eu preciso da utilidade do proximo estado. Mas eu também não percebo muito de phyton. se souberes um modo melhor de fazer isto, sou todo ouvidos.
Ja agora a lista espaco é onde eu tenho as recompensas de estar em cada estado.
o espaço é mais ou menos assim, onde os x são casas onde não posso ir ( no codigo que pus, esta com zeros, mas foi porque ainda não pensei em como resolver isso) e os outros numeros a recompensa de estar nessa casa.
|0|6|1|0|2|2|
|3|x|x|x|1|3|
|1|x|x|x|4|2|
|2|5|0|1|1|0|
 
Back
Topo