Movement

I made the organisms move around randomly as well as staying close to their own species, looking for opportunities to reproduce and to find sources of energy to stay alive.
After giving organisms an understanding of their surroundings outside of their exact location, I allowed them to use this understanding in picking a direction to move to next.
Because the preferred directions were looked up in a x and y axis manner, starting top left, organisms turned out to have an affinity to move northwest, since that direction was technically evaluated first in the grid.
Once a supposed direction was found, no more directions were evaluated, as a way to not waste precious processing time.
The way to solve the north west drift was simply to shuffle the set of of directions first before evaluating them.
Since I am iterating over each organism over and over, all precise and evaluations must be as fast as possible. I implemented the Fisher-Yates shuffle to shuffle positions for directions, as it appears to have slightly better performance over the built in shuffle. If anyone has a more performant shuffle, let me know.