Abstract
EvoJ project is a lightweight extensible Java framework which simplifies coding and refactoring of genetic algorithm applications.
The framework is planned to be very easy to use with only little need for coding. The typical problem in genetic programming is vectorizing of solution, i.e. mapping of variables composing a solution to a chromosome. What becomes real hell when a solution being searched has complex internal structure.
When you use EvoJ all you need to do is declare Java-interface containing your variables. For example if solution to the problem you solve is a set of points which meet some predefined criteria, then you can simply declare following interfaces:
public interface Solution { List<Point> getPoints(); } public interface Point { float getX(); float getY(); }
If later you will need some more variables - just add their getters!
Genetic algorithm requires a fitness-function. Using of EvoJ simplifies writing of fitness-function - you operate usual java getters with human-readable names. To write a fitness-function in EvoJ you need to implement
quite a simple
interface
with one method taking your Solution-interface as argument and returning fitness value as a Comparable
.
Following are key features of EvoJ
- naturalness - you don't need to map values from chromosomes to your domain specific variables. You describe chromosome as Java interface containing variables you need.
- simplicity - in most cases all you need to do is declare one interface describing solutions to problem you solve, and implement one interface with one method to distinguish between good and bad solutions;
- declarative mutation control - you can influence the way you variables mutate using Java annotations
- extensibility - you can re-implement certain parts of evolutionary algorithm to affect it's various aspects (selection strategy, replication strategy, mutation strategy);
- scalability - EvoJ is easily scaled into multiple threads to improve computation performance.
- native support for neural networks
Please refer to Tutorial and technical guide for more details.