diff --git a/policy gradient/mountaincar.py b/policy gradient/mountaincar.py new file mode 100644 index 0000000..5995d63 --- /dev/null +++ b/policy gradient/mountaincar.py @@ -0,0 +1,62 @@ + + +import gym +from RL_brain import PolicyGradient +import matplotlib.pyplot as plt + +DISPLAY_REWARD_THRESHOLD = -2000 # renders environment if total episode reward is greater then this threshold + +RENDER = False # rendering wastes time + +env = gym.make('MountainCar-v0') +env.seed(1) +env = env.unwrapped + +print(env.action_space) +print(env.observation_space) +print(env.observation_space.high) +print(env.observation_space.low) + +RL = PolicyGradient( + n_actions=env.action_space.n, + n_features=env.observation_space.shape[0], + learning_rate=0.02, + reward_decay=0.995, + # output_graph=True, +) + +for i_episode in range(1000): + + observation = env.reset() + + while True: + if RENDER: env.render() + + action = RL.choose_action(observation) + + observation_, reward, done, info = env.step(action) # reward = -1 in all cases + + RL.store_transition(observation, action, reward) + + if done: + # calculate running reward + ep_rs_sum = sum(RL.ep_rs) + if 'running_reward' not in globals(): + running_reward = ep_rs_sum + else: + running_reward = running_reward * 0.99 + ep_rs_sum * 0.01 + if running_reward > DISPLAY_REWARD_THRESHOLD: RENDER = True # rendering + + print("episode:", i_episode, " reward:", int(running_reward)) + + vt = RL.learn() # train + + if i_episode == 30: + plt.plot(vt) # plot the episode vt + plt.xlabel('episode steps') + plt.ylabel('normalized state-action value') + plt.show() + + break + + observation = observation_