An SSBM player based on Deep Reinforcement Learning.
Tested on: Ubuntu >=14.04, OSX, Windows 7/8/10.
-
The dolphin emulator. Probably need to compile from source on Linux. On Windows you'll need to install a custom dolphin version - just unpack the zip somewhere.
-
The SSBM iso image. Must be NTSC 1.02.
-
Python 3.
-
Install phillip. This should pull in python dependencies like tensorflow.
pip3 install -e .
You will need to know where dolphin is located. On Mac the dolphin path will be ~/../../Applications/Dolphin.app/Contents/MacOS/Dolphin
. On Windows it will be the path to the .exe
you unzipped, and you will need the --tcp 1
option.
python3 phillip/run.py --gui --human --start 0 --load agents/FalconFalconBF --iso path/to/SSBM.iso --exe path/to/dolphin [--tcp 1]
Trained agents are stored in the agents
directory. Aside from FalconFalconBF
, the agents in agents/delay0/
are also fairly strong. Run with --help
to see all options.
Training is controlled by phillip/train.py
. See also runner.py
and launcher.py
for training massively in parallel on slurm clusters. Phillip has been trained at the MGHPCC. It is recommended to train with a custom dolphin from https://github.com/vladfi1/dolphin
- the below commands will likely fail otherwise.
Local training is also possible. First, edit runner.py
with your desired training params (advanced). Then do:
python3 runner.py # will output a path
python3 launcher.py saves/path/ --init --local [--agents number_of_agents] [--log_agents]
To view stats during training:
tensorboard --logdir logs/
The trainer and (optionally) agents redirect their stdout/err to slurm_logs/
. To end training:
kill $(cat saves/path/pids)
To resume training run launcher.py
again, but omit the --init
(it will overwrite your old network).
Come to the Discord!
I've been streaming practice play over at http://twitch.tv/x_pilot. There are also some recordings on my youtube channel.
Big thanks to https://github.com/altf4/SmashBot for getting me started, and to https://github.com/spxtr/p3 for a python memory watcher. Some code for dolphin interaction has been borrowed from both projects (mostly the latter now that I've switched to pure python).