BabySnake's tabular Q-learning exercise needs a small discrete state, not the flattened board encoding retro_gamer normally produces. Define get_state(game) in babysnake_env.py, returning a plain (agent_x, agent_y, food_x, food_y) tuple, and point babysnake's observation_function at it instead of declaring a character_set. Disable the on-screen state overlay so it doesn't clutter the terminal watch view.
14 lines
497 B
Python
14 lines
497 B
Python
"""BabySnake's observation_function: maps a game to its tabular Q-learning state.
|
|
|
|
Referenced from babysnake/pyproject.toml's [tool.retro-gamer] section, and
|
|
used directly by train_babysnake.py via GameEnvironment.
|
|
"""
|
|
|
|
ACTIONS = ["KEY_RIGHT", "KEY_DOWN", "KEY_LEFT", "KEY_UP"]
|
|
|
|
|
|
def get_state(game):
|
|
"""Return BabySnake's state as a hashable (agent_x, agent_y, food_x, food_y) tuple."""
|
|
s = game.state
|
|
return (int(s['agent_x']), int(s['agent_y']), int(s['food_x']), int(s['food_y']))
|