Linear Function Approximation in Mountain Car Environment

[1]:
import numpy as np
import matplotlib.pyplot as plt

import gymnasium as gym

from rlforge.experiments import ExperimentRunner
from rlforge.agents.semi_gradient import LinearQAgent
[2]:
env = gym.make("MountainCar-v0")
agent = LinearQAgent(step_size=0.5/8,
                     discount=1,
                     num_actions=env.action_space.n,
                     dims_ranges=((-1.2,0.6),(-0.07,0.07)),
                     epsilon=0.1,
                     iht_size=4096,
                     num_tilings=8,
                     num_tiles=8)
[3]:
runner = ExperimentRunner(env, agent)

results = runner.run_episodic(
    num_runs=10,
    num_episodes=500,
    max_steps_per_episode=500
)

runner.summary(last_n=10)

============================================================
 Experiment Summary (Episodic)
============================================================
Runs: 10
Average runtime per run: 5.919 seconds
Episodes per run: 500
First episode mean reward: -500.000
Last episode mean reward: -149.200
Overall mean reward: -159.885
Mean reward (last 10 episodes): -143.650
First episode mean steps: 500.0
Last episode mean steps: 149.2
Overall mean steps: 159.9
============================================================

[4]:
plt.plot(results['mean_rewards'])
plt.grid()
../_images/examples_linearFunctionApproximation_4_0.png
[5]:
plt.plot(results['mean_steps'])
plt.grid()
../_images/examples_linearFunctionApproximation_5_0.png