Fehu_envs.Mountain_carSourceMountain car environment - drive up a steep hill using momentum.
ID: MountainCar-v0
Observation Space: Fehu.Space.Box with shape [2]:
Action Space: Fehu.Space.Discrete with 3 choices:
0: Push left (accelerate to the left)1: No push (coast)2: Push right (accelerate to the right)Rewards: -1.0 for each step until the goal is reached
Episode Termination:
Initial State: Random position in [-0.6, -0.4] with velocity 0.0
Rendering: ASCII visualization showing car position ('C') and goal ('G') on a track
Train an agent to reach the goal by building momentum:
let rng = Rune.Rng.create () in
let env = Fehu_envs.Mountain_car.make ~rng () in
let obs, _ = Fehu.Env.reset env () in
let rec run_episode steps =
let action = (* policy decision based on position and velocity *) in
let t = Fehu.Env.step env action in
if t.terminated then
Printf.printf "Goal reached in %d steps!\n" steps
else if t.truncated then
Printf.printf "Failed to reach goal in 200 steps\n"
else
run_episode (steps + 1)
in
run_episode 0type state = {mutable position : float;mutable velocity : float;mutable steps : int;rng : Rune.Rng.key ref;}val reset :
'a ->
?options:'b ->
unit ->
state ->
(float, Rune.float32_elt) Rune.t * Fehu.Info.tval step :
'a ->
(Int32.t, 'b) Rune.t ->
state ->
((float, Rune.float32_elt) Rune.t, 'c, 'd) Fehu.Env.transitionval make :
rng:Rune.Rng.key ->
unit ->
(Fehu.Space.Box.element, Fehu.Space.Discrete.element, string) Fehu.Env.t