Advertisement
Guest User

Untitled

a guest
Aug 21st, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. import gym
  2. import universe
  3. import random
  4.  
  5.  
  6. #reinforcement learning step
  7. def determine_turn(turn, observation_n, j, total_sum, prev_total_sum, reward_n):
  8. #for every 15 iterations, sum the total observations, and take the average
  9. #if lower than 0, change the direction
  10. #
  11. #
  12.  
  13. if(j >= 15):
  14. if(total_sum/ j) == 0:
  15. turn = True
  16. else:
  17. turn = False
  18.  
  19. #reset vars
  20. prev_total_sum = total_sum
  21. total_sum = 0
  22. j = 0
  23.  
  24. else:
  25. turn = False
  26. if(observation_n != None):
  27. #increment the counter and reward sum
  28. j+=1
  29. total_sum += reward_n
  30. return(turn, j, total_sum, prev_total_sum)
  31.  
  32.  
  33.  
  34.  
  35. def main():
  36.  
  37. env = gym.make('flashgames.CoasterRacer-v0')
  38. observation_n = env.reset()
  39.  
  40. #num of game iterations
  41. n = 0
  42. j = 0
  43.  
  44. #sum of observations
  45. total_sum = 0
  46. prev_total_sum = 0
  47.  
  48. #define our turns or keuboard actions
  49. left = [('KeyEvent', 'ArrowUp', True), ('KeyEvent', 'ArrowLeft', True), ('KeyEvent', 'ArrowRight', False)
  50. right = [('KeyEvent', 'ArrowUp', True), ('KeyEvent', 'ArrowLeft', False), ('KeyEvent', 'ArrowRight', True)
  51. forward = [('KeyEvent', 'ArrowUp', True), ('KeyEvent', 'ArrowLeft', False), ('KeyEvent', 'ArrowRight', False)
  52.  
  53. #main logic
  54. while True:
  55. #increment a counter for number of iterations
  56. n+=1
  57.  
  58. #if atleast one iteration is made, check if turn is needed
  59. if(n > 1):
  60.  
  61. #if atleast one iteration, check if a turn
  62. if(observation_n[0] != None):
  63. #store the reward in the previous score
  64. prev_score = reward_n[0]
  65.  
  66. #should we turn?
  67. if(turn):
  68. #pick a random event
  69. event = random.choice([left,right])
  70.  
  71. #preform an action
  72. action_n = [event for ob in observation_n]
  73.  
  74. #set turn to false
  75. turn = False
  76.  
  77. elif(~turn):
  78. #if no turn is needed, go straight
  79. action_n = [forward for ob in observation_n]
  80.  
  81. #if there is an observation, game has started, check if turn is needed
  82. if(observation_n[0] != None):
  83. turn, j, total_sum, prev_total_sum = determine_turn(turn, observation_n[0], j, total_sum, prev_total_sum, reward_n[0])
  84.  
  85. #save new variables for each iteration
  86. observation_n, reward_n, done_n, info = env.step(action_n)
  87.  
  88. env.render()
  89.  
  90. if __name__ == '__main__':
  91. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement