Software

Martin Cenek

Associate Professor of Computer Science

Department of Computer Science

University of Portland

LushGA is a machine learning toolkit that implements multiple variants of the genetic algorithm (GA). This includes evolution (standard evolution), non-spatial co-evolution, spatial evolution and spatial co-evolution. The implementation supports user-defined fitness functions, the performance measurement tools to study evolutionary dynamics, and highly configurable evolutionary search parameters. Intended use of this toolkit is for educational, scientific, and engineering needs.

(Note: This software is targeted for Lush2.0 and not for the generic Debian version of lush).

This project is licensed under the MIT License. See project website (LICENSE.txt) for more information.

A list of implemented features:

User defined GA parameters:

  • choosing from one of four core algorithms
  • seeding with a random seed or loading previously-saved seed
  • binary chromosome encoding with configurable length between 1 to 1000 bits long (tested, longer genome lengths were not tested)
  • reproduction operators include 0pt (mutation only) and 1pt crossover, and a bitwise mutation with user-defined probability
  • fitness assessment by population sampling and local neighbourhood for a spatially extended population
  • selection for reproduction by random selection, biased roulette wheel and tournament selection
  • offspring generation including elitism and parent replacement.

Analysis Tools for Evolutionary Dynamics:

Plots:

  • fitness of best candidate solution vs generation
  • coevolution plots displaying candidate solution (host) fitness and test case (parasite) fitness vs generation

Logs:

  • experimental setup, random seed
  • candidate solutions: genomes, fitness
  • test cases: genomes, fitness

Proposed direction and things to do:

  • Implement resource sharing for fitness assessment.
  • Currently spatial coevolution assignes parasite fitness according to how it was evaluated with respect to a host in the same spatial location. An alternative option is to assign a parasite fitness with respect to ALL evaluations it was subjected to (not just the result of interaction with a host in the same local). The parasite fitness is then normalized by the neighborhood size (9).
  • Plots (Analysis Tools for Evolutionary Dynamics) pie chart of fitness distribution at given generation.

For additional information and resources see:

  1. Lush 2.0: open-source project @http://sourceforge.net/projects/lush/
  2. Stochastic search algorithms GA @ http://en.wikipedia.org/wiki/Genetic_algorithm
  3. Source download @ git://github.com/cenek/gsoc-2011.git

NOTE: A recent bug in Lush's Ogre library causes execution failure of this application, as soon as the bug is fixed, I will re-post the code.

This GUI (written for Lush2.0) allows user viewing an execution of an arbitrary two-dimensional cellular automata (2DCA: synchronous, homogeneous, regular Von Neumann neighborhood) on a user defined or randomly generated initial configurations. User can select different output formats that include a lattice snapshot at a given time-step or a movie starting at the initial configuration and lasting for a user defined number of time-steps. The execution of a 2DCA rule can be viewed in forward or backwards direction with an option of one-step at a time or as a motion image.

So far, GUI can generate random initial configurations for three different tasks: the two dimensional density classification task, the pixel bounding and the rectangular image bounding. The generation of the starting configurations is controlled by user defined parameters.

Although this application is meant as a viewing tool for 2DCA, it also provides very basic highlighting of spatio-temporal patterns that appear during execution of 2DCA rule on a given initial configuration. The highlighting tool is basically a modified majority rule: version (1) is a Moore neighborhood GKL rule, version (2) is a Von Neumann neighborhood GKL rule, and version (3) and (4) are modified local neighborhood majority rules. These filters provide simple highlighting of black and white domains, but to highlight more complex domains such as checkerboard patterns etc.

Lush 2.0 is not, by any means, my creation. Lush is a programming language I chose to use for most of my research, so I feel it needs a word of mention and a little bit of advertisement.

Lush is a great tool for numerical and graphics intensive research such as artificial intelligence, computer vision, machine learning, data mining, signal processing, and different types of simulations. As a common lisp derivative, over time is acquired a lot of desired features that include: object oriented design, garbage collected memory management, interpreted or compiled execution, strongly or weekly typed data types, and an easy interface with packages written in different languages. Lush is clean, simple, powerful, and flexible language.

List of reasons to choose Lush2.0:

  • no need for a scripting tool (like python)
  • garbage collected
  • strongly (for compiled code) or weekly (for interpreted code) typed
  • objects can be compiled, interpreted, or an object can have both compiled and interpreted methods
  • source-code can be compiled to C for fast execution
  • convenient tools for sequential access of object/data through generic iterators
  • in-line C code
  • easy event driven programming
  • countless lisp and C functions for easy manipulation of vectors, lists, matrixes, tensors...
  • GUI building tool
  • easy to build interface with third party software (interfaces already included to gnuplot, openGL, FFmpeg, LAPACK, fourier transforms/FFTW3, OpenCV, firewire...)

.... and the list keeps on growing.