Many animals such as birds and fish exhibit complex flocking behaviors in nature. Boids is an artificial life simulation which attempts to capture some of these flocking attributes. Interestingly, very complex behavior can emerge from a group of individually acting entities following simple rules. This article describes my implementation briefly, and contains several visualizations of interesting flocking behaviors I have observed.
Each entity follows a simple set of rules, which together determine the directional vector they should align with. My implementation uses 3 spatial dimensions, but the same concepts apply in 2D as well. By varying the weight of each rule as well as other parameters, a large variation of behavior can be observed.
Which entities are considered immediate neighbors is determined by a set range. Together, these three rules result in quite complex flocking behavior.
Figure: emergent flocking behavior of fish in a 3D environment
My solution includes three different "species" who will never consider each other neighbors, regardless of distance. The rules can be tuned by a number of parameters.
Figure: dominating cohesion rule resulting in dense swarming behavior
Figure: dominating alignment rule resulting in long or wide schools of fish swimming in parallel
Figure: dominating avoidance rule resulting in chaotic and widely dispersed schools
More complex and interesting situations can also be generated. I have added a predator which follows a slightly different set of rules.
In addition, all prey will ignore their original rules if a predator is sufficiently close - instead moving directly away from the danger.
Figure: predators (in red) cause schools to split more frequently since individual prey prioritize themselves
Boids is an interesting example of complexity emerging from a simple set of rules. I am curious if a similar concept has applications in a machine learning context. It could potentially be a solution to certain complex cooperative tasks if the task can be sufficiently divided into smaller pieces. I might explore this idea sometime in the future!