1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajuda numa função recursiva em phyton

Discussão em 'Programação' iniciada por simjohn, 5 de Novembro de 2012. (Respostas: 4; Visualizações: 701)

  1. simjohn

    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)
     
  2. Geedunk

    Geedunk Power Member

    Andas a tirar inteligência artificial?
     
  3. simjohn

    simjohn Power Member

    Tenho uma cadeira de Inteligencia artificial, mas isto é para outra cadeira. mas os algoritmos são os mesmos
     
  4. Geedunk

    Geedunk Power Member

    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: 6 de Novembro de 2012
  5. simjohn

    simjohn Power Member

    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|
     

Partilhar esta Página