I was trying to implement neat myself, using the original paper but got stuck.
Let's say that in the last generation I had the following species:
Specie 1: members: 100 avg_score: 100
Specie 2: members: 150 avg_score: 120
Specie 3: members: 300 avg_score: 50
Specie 4: members: 10 avg_score: 110
My attempt right now for the next gen. is the following:
set the score of the specie to the average of the scores of each genome in the specie.
4.1 reproduce by killing the worst 90% in each specie.
4.2 choose a specie, based on their score.
4.3 from that specie, choose 2 genomes and breed a new genome.
I am not sure if this is the correct attempt, especially when I "kill" 90% of the genomes. This percentage value is choosen randomly by me right now (it's just about the concept).
If a specie, after the killing, has 0 members. Did it then go extinct?
In my given example, Specie 4 is likely to go extinct if I kill 90%.
Is my attempt correct, or how does a specie usually go extinct?
Firstly, I would STRONGLY suggest NOT trying to implement NEAT from scratch. It is a much more complex thing to do than it may seem at first (feel free to take a look at the public repositories of the many available implementations).
Now, to answer your questions more specifically:
There are many flavours of NEAT. In your case, your doubts seem to deal with the concept of elitism which, yes, is usually a parameter you need to set yourself. Typically the algorithm works like this:
Note that speciation is re-applied periodically (typically every generation), so that species don't really have a strong definition (nothing really prevents an elite genome, copied unaltered to the next generation, to be assigned to a new species).
If you are working with a fixed population size and k-means speciation, there will always be k species, no matter what. In a sense, they are all new species every iteration.