Skip to content

fr3fou/flappy-ai

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Apr 26, 2020
df61cfc · Apr 26, 2020

History

5 Commits
Apr 26, 2020
Apr 26, 2020
Apr 26, 2020
Apr 26, 2020
Apr 26, 2020
Apr 26, 2020
Apr 26, 2020
Apr 26, 2020

Repository files navigation

flappy-ai

🐥 A Neural Network + Genetic Algorithm which plays Flappy Bird

A genetic algorithm with a neural network (fr3fou/gone) built on top of fr3fou/flappy-go which plays flappy bird.

The core game is reused and built on top of using composition

type Game struct {
    *flappy.Game
    // extra fields only used from the AI
}
type Bird struct {
    *flappy.Bird
    // extra fields only used from the AI
}

AI Architecture

500 birds in total are put in the game with the following architecutre of their brain

var BrainLayers = []gone.Layer{
 {
  Nodes:     5,
  Activator: gone.Sigmoid(),
 },
 {
  Nodes:     8,
  Activator: gone.Sigmoid(),
 },
 {
  Nodes:     2,
  Activator: gone.Sigmoid(), // ideally should be softmax
 },
}

There are 5 inputs, 4 of them described in the following image and the last 1 is the velocity of the bird

vars

The 2 outputs determine whether the bird should jump or not

if output[0] > output[1] {
    bird.Jump()
}

Their score is determined by how well they perform (how long they survive)

At the end of each generation, the best performing birds are to mate.

Using the crossoverOdds and mutationRate arguments to ai.New() it is determined what % of the new population should be created using ONLY mutation or crossover AND mutation.

After a new population has been created, the process gets repeated.

About

neural network + genetic algorithm which plays flappy bird

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages