Watchmaker is a Java-based framework that facilitates platform-independent evolutionary algorithms, following an object-oriented approach. It enables users to implement EAs easily and efficiently without requiring any platform-specific code.
Multi-Threaded Evolution Engine:
Watchmaker leverages parallelism to improve performance, even on multi-core and multi-processor machines.
Ultra-Fast Random Number Generators:
Watchmaker uses the Uncommons Maths library for high-performance random number generation, but you can also use third-party replacements if preferred.
Non-Invasive:
The framework allows you to evolve objects of any type, without requiring implementation of a particular interface or extension from a common base class. This means there are no restrictions on implementation, and the evolvable type is entirely decoupled.
Pluggable Selection Strategies:
Watchmaker offers a range of selection strategies, including Roulette Wheel, Tournament, Rank, Truncation, and Stochastic Universal Sampling. Alternatively, users can quickly and easily implement their own strategy.
Flexible Evolution Schemes:
Users can create simple or complex evolution schemes, from a single step to several operators combined in sequence and/or with branching. Operators can be used from the provided collection or by implementation, or a combination of both.
Re-usable Operators for Common Types:
Watchmaker includes cross-over and mutation implementations for various data types, including strings, arrays, and lists.
Interactive Evolutionary Algorithms:
Watchmaker supports user-guided selection, which is perfect for artistic and musical applications where defining an adequate fitness function is challenging.
Watchmaker requires a working knowledge of Java 5 or later, including a basic understanding of generics. You can quickly develop simple evolutionary algorithms using the provided methods. As always, we're open to suggestions for new features and enhancements.
Watchmaker's most recent release introduces a new Utilities module and moves the Uncommons Maths module into a separate project. There's a new constructor for BitString to create random bit strings more easily, and the algorithm for countSetBits() in BitString is now ten to fifteen times faster. There's a new termination condition for detecting when evolution has stagnated, and the Swing-specific classes now live in the Watchmaker Swing module, having been moved from the framework module. Finally, Watchmaker introduces experimental Evolution Monitor swing component.
Version 0.4.3: N/A