DEPARTMENT OF COMPUTING

lunar_lander_1.py [download]


#!/usr/bin/env python3

import gymnasium as gym
import random
import math

#
# Documentation
# https://gymnasium.farama.org/environments/classic_control/mountain_car/
#

ACTION_NOOP = 0
ACTION_FIRE_LEFT = 1
ACTION_FIRE_MAIN = 2
ACTION_FIRE_RIGHT = 3
ACTIONS_ALL = [ACTION_NOOP, ACTION_FIRE_LEFT, ACTION_FIRE_MAIN, ACTION_FIRE_RIGHT]

def unpack_observation(observation):
    # the coordinates of the lander in x & y, its linear velocities in x & y, its angle, its angular velocity, and two booleans that represent whether each leg is in contact with the ground or not
    x, y, dx, dy, angle, d_angle, left, right = observation
    print(x, y, dx, dy, angle, d_angle, left, right)
    return x, y, dx, dy, angle, d_angle, left, right

def agent_function(observation):
    """This agent's strategy is to randomly choose an action.
    """
    unpack_observation(observation)
    action = random.choice(ACTIONS_ALL)
    return action

def create_environment():
    env = gym.make('LunarLander-v2', render_mode="human")
    return env

def run_one_episode(env, agent_function):
    observation, info = env.reset()
    terminated = False
    truncated = False
    total_reward = 0
    while not (terminated or truncated):
        action = agent_function(observation)
        observation, reward, terminated, truncated, info = env.step(action)
        total_reward += reward
    return total_reward

def destroy_environment(env):
    env.close()
    return

def main():
    env = create_environment()
    reward = run_one_episode(env, agent_function)
    destroy_environment(env)
    print(f"Reward: {reward}")
    return

if __name__ == "__main__":
    main()

Last Updated 08/29/2024