Feature List for GAlib
Algorithms, Parameters, and Statistics
- Many examples are included illustrating the use of various GAlib
features, class derivations, parallelization, deterministic crowding,
travelling salesman, DeJong, and Royal Road problems.
- The library has been used on various DOS/Windows, Windows NT/95, MacOS,
and UNIX configurations. GAlib compiles without warnings on most
- Templates are used in some genome classes, but GAlib can be used without
templates if your compiler does not understand them.
- Four random number generators are included with the library. You can
select the one most appropriate for your system, or use your own.
Genomes and Operators
- GAlib can be used with PVM (parallel virtual machine) to evolve
populations and/or individuals in parallel on multiple CPUs.
- Genetic algorithm parameters can be configured from file, command-line,
- Overlapping (steady-state GA) and non-overlapping (simple GA)
populations are supported. You can also specify the amount of overlap
(% replacement). The distribution includes examples of other derived
genetic algorithms such as a genetic algorithm with sub-populations and
another that uses deterministic crowding.
- New genetic algorithms can be quickly tested by deriving from the base
genetic algorithm classes in the library. In many cases you need only
overide one virtual function.
- Built-in termination methods include convergence and
number-of-generations. The termination method can be customized for
any existing genetic algorithm class or for new classes you derive.
- Speciation can be done with either DeJong-style crowding (using a
replacement strategy) or Goldberg-style sharing (using fitness scaling).
- Elitism is optional for non-overlapping genetic algorithms.
- Built-in replacement strategies (for overlapping populations) include
replace parent, replace random, replace worst. The replacement
operator can be customized.
- Built-in selection methods include rank, roulette wheel, tournament,
stochastic remainder sampling, stochastic uniform sampling, and
deterministic sampling. The selection operator can be customized.
- "on-line" and "off-line" statistics are recorded as well as max, min,
mean, standard deviation, and diversity. You can specify which
statistics should be recorded and how often they should be flushed
- Chromosomes can be built from any C++ data type. You can use
the types built-in to the library (bit-string, array, list, tree) or
derive a chromosome based on your own objects.
- Built-in chromosome types include real number arrays, list, tree, 1D,
2D, and 3D arrays, 1D, 2D, and 3D binary string. The binary strings,
strings, and arrays can be variable length. The lists and trees can
contain any object in their nodes. The array can contain any object
in each element.
- All chromosome initialization, mutation, crossover, and comparison
methods can be customized.
- Built-in initialization operators include uniform random,
order-based random, allele-based random, and initialize-to-zero.
- Built-in mutation operators include random flip, random
swap, Gaussian, destructive, swap subtree, swap node.
- Built-in crossover operators include arithmetic, blend, partial match,
ordered, cycle, single point, two point, even, odd, uniform, node- and
subtree-single point. Edge recombination is included in the examples.
- Dominance and Diploidy are not explicitly built in to the library, but
any of the genome classes in the library can easily be extended to
become diploid chromosomes.
- Objective functions can be population- or individual-based.
- If the built-in genomes adequately represent your problem, a
user-specified objective function is the only problem-specific code
that must be written.
Matthew Wall, 19 August 1996