Need help with SnakeAI?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

164 Stars 59 Forks MIT License 36 Commits 2 Opened issues

Services available


Need anything else?

Contributors list

# 615,766
1 commit

Snake AI

Current Version 1.0

Licensed under MIT license - so you can use this however you please :)


There exist three dependencies:

  1. numpy
  2. pyqt5
  3. Python3.6+

To install dependencies, run

pip3 install -r requirements.txt

Getting started

  1. Clone the repo or download it in someway
    git clone
  2. The two places you will ever really need to change stuff unless you feel like going crazy are
    , which control the hyperparameters of the Neural Network and Genetic Algorithm and
    , which is the graphics and GA.
  3. Pick some things you would like to test with under
    . If you change the
    drastically you will probably want to change
    . The current settings when you first clone are the settings I used for training a snake to solve 10x10 and the 50x50 grids. Play around with this stuff if you want, you can always create another population in a new command window that use different settings.
  4. Head over to
    and adjust
    show=True, fps=200
    if you would like.
    controls whether or not to display the snakes learning. FPS in the case of show is capped at your monitor refresh. Definitely faster to train with
    show=False, fps=1000
  5. Go to the area of
    # Next generation
    and you can print out the fitness if you would like. This is also where you can
    the snake. Well you can save anywhere I guess, but this is where I saved the best snake from each generation. This can be done with
    save_snake('path/to/population/folder', 'snake_name (i.e. best_snake_gen0)', snake, self.settings)
    . This saves the snake, the constructor params that were used to create the snake and the
    file used for hyperparameters. If you load the same snake you saved, the snake will play exactly how it did before. The apple locations are based off an initially
    apple seed
    . So if you load the same snake without modifying the contructor, then the snake will replay what it did. Very helpful for me since I trained without visualizations and needed to go back and record stuff for the video.
  6. Run it! However you like, you can run it and get some snakes generating!

Loading snakes

Let's say you have a 50 generations of snakes saved and you want to create a new population with the last 10 generations. You could start a new instance of
and modify
for _ in range(self.settings['num_parents']):
portion to generate 10 less snakes. Then you can load your 10 best snakes and insert them into the population. This is where you can choose to either modify the constructor of your snake to have a different
or allow the snake to run it's previous course. The choice is up to you and totally dependent on your goals!

If the ability to load snakes is something you want to have an easier time with let me know and I can work on that.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.