Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. class QLearning():
  2.  
  3. def __init__(self):
  4. self.self.matrizQ = [[0]*5 for x in range(5)]
  5. self.learningRate = 0.9
  6. self.discountRate = 0
  7. self.indiceAcaoAtual = 2
  8. self.indiceEstadoAtual = 0
  9.  
  10.  
  11. def calculaFatores():
  12. self.learningRate -= 0.1
  13. self.discountRate += 0.1
  14.  
  15. def calculaMelhorAcao():
  16. vetor = self.matrizQ[self.indiceEstadoAtual]
  17. valorDaAcaoAtual = vetor[0]
  18. indiceDaAcao = 0
  19. indiceAcaoEscolhida = 0
  20. for acao in vetor :
  21. if acao > valorDaAcaoAtual :
  22. indiceAcaoEscolhida = indiceDaAcao
  23. valorDaAcaoAtual = acao
  24. indiceDaAcao += 1
  25. #atualizando variável global de ação
  26. self.indiceAcaoAtual = indiceAcaoEscolhida
  27.  
  28. #atualizando variável global de estado
  29. def politicaDeAcoes():
  30. self.indiceEstadoAtual += 1
  31. if self.indiceEstadoAtual >= len(self.matrizQ):
  32. self.indiceEstadoAtual = 0
  33. calculaMelhorAcao()
  34. calculaFatores()
  35.  
  36. def maxQProximoEstado(proximoEstado):
  37. proximoEstado += 1
  38. if proximoEstado > len(self.matrizQ) :
  39. proximoEstado = 0
  40. vetor = self.matrizQ[proximoEstado]
  41. maiorRecompensa = max(vetor[0])
  42. return maiorRecompensa
  43.  
  44. def calculaNovoValorQ(reward):
  45. print(self.matrizQ)
  46. qAtual = self.matrizQ[self.indiceEstadoAtual][self.indiceAcaoAtual]
  47. novoValorQ = qAtual + self.learningRate*(reward + self.discountRate * maxQProximoEstado(self.indiceEstadoAtual) - qAtual)
  48. self.matrizQ = novoValorQ
  49. politicaDeAcoes()
  50.  
  51. def exibeMensagemDeAcaoAtual():
  52. if self.indiceAcaoAtual == 0 :
  53. print("Acao muito fácil")
  54. elif self.indiceAcaoAtual == 1:
  55. print("Acao fácil")
  56. elif self.indiceAcaoAtual == 2:
  57. print("Acao intermediária")
  58. elif self.indiceAcaoAtual == 3:
  59. print("Acao difícil")
  60. elif self.indiceAcaoAtual == 4:
  61. print("Acao muito difícil")
  62. else:
  63. print("valor inválido")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement