Mark
/
celeste-ai
Archived
1
0
Fork 0
A project for UCLA's Math 156
This repository has been archived on 2023-11-28. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
 
 
Go to file
Mark 5242c7443c Added report (filesystem cleanup) 2023-11-28 09:28:24 -08:00
celeste_ai Cleanup 2023-03-08 16:08:24 -08:00
report Added report (filesystem cleanup) 2023-11-28 09:28:24 -08:00
resources Added demo gif 2023-04-02 11:10:12 -07:00
.editorconfig added editorconfig 2023-02-15 22:24:05 -08:00
.gitignore Updated gitignore 2023-02-19 20:56:52 -08:00
README.md Added demo gif 2023-04-02 11:10:12 -07:00
ffmpeg.sh Cleanup 2023-03-08 16:08:24 -08:00
plot.py Cleanup 2023-03-08 16:08:24 -08:00
pyproject.toml Cleanup 2023-03-08 16:08:24 -08:00

README.md

Celeste-AI: A Celeste Classic DQL Agent

This is an attempt to create a deep Q-learning agent that automatically solves the first stage of Celeste Classic.

A gif of the result is below. This took 4000 episodes, which amounts to about 30 hours of training time.

Demo

Contents

  • ./resources: contains files this script requires. Notably, we have an (old) version of PICO-8 that's known to work with this script, and a version of Celeste Classic with telementery and delays called hackcel.p8.
  • ffmpeg.sh: uses game screenshots to make real-time video of the agent's attempts. Read the script, it's pretty simple.
  • plot.py: generates plots from model snapshots. These are placed in model_data/current/plots/.

Setup

Before you set up Celeste-AI, you need to prepare PICO-8. See resources/README.md

This is designed to work on Linux. You will need xdotool to send keypresses to the game.

  1. cd into this directory
  2. Make and enter a venv
  3. pip install -e .

Once you're set up, you can...

  • python celeste_ai/train.py to train a model
  • python plot.py to make prediction plots
  • python test.py to test a model

Before running, be aware of the following:

  • Only one instance of PICO-8 can be running at a time. See celeste.py.
  • hackcel.p8 captures a screenshot of every frame. PICO-8 will probably place these on your desktop. Since this repo contains a rather old version of PICO-8, there is no way to change where it places screenshots. train.py will delete, move, and rename screenshots automatically during training, but you should tell it where your desktop is first.
  • When you start training, a model_data directory will be created. It contains the following:
    • model_archive: history of the model. Save interval is configured inside train.py
    • screenshots: contains subdirectories. Each subdirectory contains the frames of one episode. Use ffmpeg.sh to turn these into a video.
    • plots: generated by plot.py. Contains pretty plots.