ECJ 12
A Java-based Evolutionary Computation and
Genetic Programming Research System


By Sean Luke, Liviu Panait, Zbigniew Skolicki, Jeff Bassett, Robert Hubley, and Alexander Chircop

ECJ is a research EC system written in Java. It was designed to be highly flexible, with nearly all classes (and all of their settings) dynamically determined at runtime by a user-provided parameter file. All structures in the system are arranged to be easily modifiable. Even so, the system was designed with an eye toward efficiency; ECJ may make you reconsider notions about Java and slowness.

ECJ is presently developed at George Mason University's ECLab Evolutionary Computation Laboratory. The software has nothing to do with its initials' namesake, Evolutionary Computation Journal.

Features

General Features
  • Platform-independent checkpointing and logging
  • Hierarchical parameter files
  • Multithreading
  • Mersenne Twister Random Number Generators
  • Abstractions for implementing a variety of EC forms.
EC Features
  • Asynchronous island models over TCP/IP
  • Genetic Algorithms/Programming style Steady State and Generational evolution, with or without Elitism
  • Evolutionary-Strategies style (mu,lambda) and (mu+lambda) evolution
  • Very flexible breeding architecture
  • Many selection operators
  • Multiple subpopulations and species
  • Inter-subpopulation exchanges
  • Reading populations from files
  • Single- and Multi-population coevolution
  • SPEA2 multiobjective optimization
  • Hooks for other multiobjective optimization methods
  • Packages for parsimony pressure
GP Features
  • Set-based Strongly-Typed Genetic Programming
  • Ephemeral Random Constants
  • Automatically-Defined Functions and Automatically Defined Macros
  • Multiple tree forests
  • Six tree-creation algorithms
  • Extensive set of GP breeding operators
  • Seven pre-done GP application problem domains (ant, regression, multiplexer, lawnmower, parity, two-box, edge)
Vector (GA/ES) Features
  • Fixed-Length and Variable-Length Genomes
  • Arbitrary representations
  • Five pre-done vector application problem domains (sum, rosenbrock, sphere, step, noisy-quartic)
Other Features
  • Multiset-based genomes in the rule package, for evolving Pitt-approach rulesets or other set-based representations.
  • Hooks for using the Teambots robot simultation system to do evaluation.
Coming Up In Next Version: a Client-Server Evaluator.

Download ECJ

Download ECJ version 12 as ec.tar.gz or (bigger) ec.zip. The license agreement and online documentation of the system is also available.

ECJ is released under a special open source license. Please read the license before using the software. See the provided README file to locate the software license.

Mailing Lists

If you have questions or ideas regarding ECJ, we suggest you join the ECJ-INTEREST Discussion List. You can also view the archives. If you want to report a bug, you can contact the ECJ authors directly at ecj-help @ cs.gmu.edu

Migrating from the Previous Version

As usual, check the CHANGES file. The most changes most likely to cause backward-compatibility issues (if any):

  1. MersenneTwisterFast.nextDouble() had a documentation error suggesting that it returned a number from the closed interval [0,1]. The documentation was incorrect: it's half-open [0,1), just like Random.nextDouble().
  2. Island models now have compressed streams by default.
  3. The minimum Java is now 1.2. Accordingly, ParameterDatabase now relies on Collections.sort(), which only exists in Java versions 1.2 and up.
  4. Code.encode() now writes out "T" and "F" rather than "true" and "false"
  5. Vector's read/write code has been rewritten and bug-fixed
  6. Individual now has fewer methods you absolutely have to implement.
  7. Several methods in GeneVector have been changed (primarily for reading and writing).

The Agent

The software license refers to the "Agent". Presently, that's Sean Luke.

Other Publically-Available Java-Based Evolutionary Computation Systems

GP Systems
Tree-based GP, implemented with trees
Tree-based GP, implemented with arrays
GP Applets

GP using Java Bytecode
Private GP Systems
GP: Whereabouts Unknown
  • gpjpp
  • gpjava, originally developed at ASyG, Vrje Universiteit Brussel.
Other EC Stuff in Java

This is just a small sample, of course.