EGADS: Evolutionary Gaussian Decomposition

What is it?

EGADS stands for Evolutionary Gaussian Automatic Decomposition System. Its purpose is to generate mixture models composed of overlapping Gaussian (normal) curves to approximate other more complex curves. These mixture models are sometimes called polygaussian approximations or Gaussian/normal decompositions. The curves they approximate are usually somewhat normal in their shape and are composed of multiple overlapping normal subpopulations. Such curves are common in biological and population counting assays.

The genetic algorithm used treats each model as a progeny individual. A model is composed of a set of Gaussian curves and an associated magnitude parameter for each curve which determines its level of contribution (or significance) to the model. Models exist in populations, and each population is iteratively subjected to evolution with mutation and crossover operations. Between iterations, better individuals are propagated between populations (or demes in EC terminology) along a one-way linear cyclic "deme ring" graph which links all populations.

This is a fairly standard but advanced GA technique that's common in these sorts of applications. The linear-cyclic deme ring design encourages the formation of useful biodiversity within the overall group of populations, permitting each population to explore different trajectoris in fitness landscape space.

EGADS is parallel and will currently use as many cores as you have in your machine.

This is a work in progress, and I'm working with some friends to apply it to biological assay problems with the goal of a publication. The next step is to add a reproducibility test to permit the GA's parameters to be optimized for reproducibility on a per-problem basis. At the moment, the GA can generate many models for a given target curve and we don't have a good way of telling which models are "better" and which aren't.

Source Code and Binaries

At the moment, only source code is available. Binary versions will be available once this project is a little further along. The current source can be easily compiled on MacOSX and on Windows with a recent version of MinGW. Linux/Unix shouldn't be a problem either.

The Boost C++ libraries are also required. For Windows users, the excellent MinGW distro linked above includes Boost 1.35. For OSX users' convenience, here is a copy of Boost 1.35 compiled as 4-architecture universal static libaries for MacOSX. To install this, go to /usr/local (make it if it doesn't exist) and "sudo tar -xjf" the archive to un-tar it at this location. (These libraries were built on OSX 10.5 "Leopard" and I'm not sure if they'll work on older versions or not.) For Linux users, just use your package manager or "apt-get" to install Boost. BSDers should be able to find it in their ports collection.

EGADS is split into a library and a GUI. The genetic algorithm is present in the libEGADS portion, while the GUI is in the GUI subdirectory and requires a recent version of wxWidgets to compile.


EGADS-src-0.5b.zip: EGADS 0.5 beta source code

EGADS is distributed under the GNU General Public License version 3. Please let me know of anything you do with it! My e-mail is adam.ierymenko@gmail.com. Since this is GPL not LGPL, it can't be used in commercial projects or closed-source projects without permission.