Evolutionary Design of Self-Organizing Particle Systems for Collective Problem Solving
In December, I attended IEEE SSCI 2014 - a symposium on computational intelligence where I presented work that my classmates and I put together for Jim Reggia’s class: Artificial Life and Evolutionary Computation. The goal of the paper was to show off the use of evolutionary and genetic algorithms for creativity, that is the use of a computer program to design a system without very much human input. I’ve attached the abstract, paper, and presentation from that conference here. However, the purpose of this post isn’t to point out the scientific contributions - but rather the practical ones.
In order to do this project, we had to create a pretty extensive Python software base with the following components:
- A simulator that could both visually and computationally determine the fitness of a particle swarm
- A multiprocess evolutionary mechanism for designing the particle swarms
In the end our deployment used PyGame, Celery, and an Amazon EC2 2XL server which ran for a week to finish the computation. The paper doesn’t necessarily touch too much on the development effort required. Given the opportunity to do this again, I probably would have used Go or Cython to improve the performance (not much you can do in a single semester). This post collects both the Github repository and development environment with the scientific details. Hopefully it’s a useful reference!
Using only simple rules for local interactions, groups of agents can form self-organizing super-organisms or flocks that show global emergent behavior. When agents are also extended with memory and goals the resulting flock not only demonstrates emergent behavior, but also collective intelligence: the ability for the group to solve problems that might be beyond the ability of the individual alone. Until now, research has focused on the improvement of particle design for global behavior; however, techniques for human-designed particles are task-specific. In this paper we will demonstrate that evolutionary computing techniques can be applied to design particles, not only to optimize the parameters for movement but also the structure of controlling finite state machines that enable collective intelligence. The evolved design not only exhibits emergent, self-organizing behavior but also significantly outperforms a human design in a specific problem domain. The strategy of the evolved design may be very different from what is intuitive to humans and perhaps reflects more accurately how nature designs systems for problem solving. Furthermore, evolutionary design of particles for collective intelligence is more flexible and able to target a wider array of problems either individually or as a whole.
The full project is available on Github if you’d like to try it yourself. The Github repository contains instructions for how to install the dependencies, and how to run the simulator as well as the evolver. The dependencies might be the main issue, installing PyGame for the visual simulation can be tricky, and Celery is needed for the multi-process evolver. We will respond to any issues that you add as soon as we can!
The code itself is provided under the MIT license. The various badges describing the Github repo are above.