Introduction
Some problems tackled by computers cannot be solved by
straightforward arithmetic methods. A trail and error approach is
inevitable. Examples of such problems include scheduling, multivariable
optimisation and so on.
Genetic algorithms are search algorithms based on the
mechanics of natural selection and natural genetics.
Genetic algorithms were developed in the 1960’s. Their
popularity has grown as they have been successfully used for search and
optimisation in domains where other algorithms could not perform well.
Applications include biology, computer science, engineering and social
sciences.
There are a number of genetic algorithm tools
available. Many integrated mathematical tools have genetic algorithm
implementations. However such genetic algorithm implementations, like the
“Genetic and Evolutionary Algorithm Toolbox for Matlab” [9] for example
are, likely to require a certain level of mathematical knowledge from
their users. Few genetic algorithm software implementations in Java are
freely available from the Internet like “Genetic Algorithm Playground”
[10] and “Genetic Algorithm Viewer 1.0” [12]. Both of them are good
implementations of genetic algorithms and have a reasonable user
interface. A number of problems are used to show the capabilities of the
genetic algorithms and appropriate graphical representations are used to
show the progress of the genetic algorithms while executed.
However none of these programs seems to encapsulate the
basics of genetic algorithms without overcomplicating the matter. For
example a variety of problems are implemented in the “Genetic Algorithms
Playground” system, which makes it too specialised for the problems
implemented. It is not general enough to be used for many problems besides
variable optimisation and no reasonable API is provided.
These of course are to the best of the author’s
knowledge by evaluating some code of the open source software tools freely
available and the class structure of those with no source code provided.
Genetic algorithms tend to be very problem specific,
but there are certain basic operations common to all genetic algorithms
that can be encapsulated in a package that would save redevelopment time.
The aim of this project is to study the genetic
algorithms field and come up with a general genetic algorithm software
tool that would demonstrate how some genetic algorithms perform on a few
example optimisation functions. A GUI would provide a front end for the
application.
The aim of the project is to make a good object
orientated solution that can be reused by other developers and save them
time in developing genetic algorithms in Java. The system will be
developed in an object orientated fashion that has the classes designed
around the data itself i.e. the chromosomes, genotypes and population and
not around the process. A reasonable API will seek to assist developers in
implementing genetic algorithms without the need for detailed knowledge.