Portions of a generic genetic-algorithms library
Line 25: | Line 25: | ||
===Creating New Candidates=== | ===Creating New Candidates=== | ||
− | + | A set of Candidates are required to initiate the algorithm. The creation of this initial set or generation of Candidates is the responsibility of the library user. | |
In the first attempt, a modified [[Factory|Factory pattern]] was used here, this was taken from a [http://msdn.microsoft.com/en-us/library/ms954600.aspx Microsoft Patterns and Practices article by Doug Purdy]. An abstract factory class is provided by the library, the user is expected to provide a concrete candidate factory class. | In the first attempt, a modified [[Factory|Factory pattern]] was used here, this was taken from a [http://msdn.microsoft.com/en-us/library/ms954600.aspx Microsoft Patterns and Practices article by Doug Purdy]. An abstract factory class is provided by the library, the user is expected to provide a concrete candidate factory class. | ||
===Selection of the Fittest=== | ===Selection of the Fittest=== | ||
− | + | Upon creating a generation of candidates, the fitness of each Candidate is calculated, and the fittest are selected. Candidate selection is performed using one of several possible algorithms. The selection strategy may vary per iteration. The library user is responsible for choosing the selection strategy. | |
Fitness calculations are known about by | Fitness calculations are known about by | ||
Line 38: | Line 38: | ||
===Creating New Candidates via Reproduction=== | ===Creating New Candidates via Reproduction=== | ||
− | In the throws of the algorithm, new candidates are generated via reproduction. The parent Candidates should be randomly selected from the fittest candidates in the most recent generation. Reproduction, also known as crossover, is performed using one of many possible crossover algorithms. The same reproduction strategy is usually applied to the entire generation in any one iteration. And is often kept constant throughout the algorithm life-cycle. | + | In the throws of the algorithm, new candidates are generated via reproduction. The parent Candidates should be randomly selected from the fittest candidates in the most recent generation. Reproduction, also known as crossover, is performed using one of many possible crossover algorithms. The same reproduction strategy is usually applied to the entire generation in any one iteration. And is often kept constant throughout the algorithm life-cycle. The library user is responsible for choosing the crossover strategy. |
===Mutating Candidates=== | ===Mutating Candidates=== | ||
− | Before progressing onto the next generation | + | Before progressing onto the next generation, some Candidates are randomly mutated. There are two algorithms to be considered here: One is the algorithm for performing the mutation, the library user is responsible for this. The other is the algorithm used to select Candidates for mutation. There are several algorithms that may be applied here, this selection strategy may vary per iteration. The library user is responsible for choosing the selection strategy. |
==A New Design== | ==A New Design== |
Revision as of 09:52, 26 August 2008
Contents |
Introduction
Over the last few months I have become interested in problems associated with the modeling of non-linear systems. This interest has lead me to look into artificial neural networks, and how they can be trained using genetic algorithms. For those with an interest in this area, development environments like Matlab provide an ideal platform for quick implementation and testing. However, at deployment time, a Matlab script is of little use to clients with a limited budget, or to developers targeting some embedded platforms.
... to be continued ...
What is the motivation here? Off-line training of neural networks via genetic algorithms to model non-linear systems in a low cost environment.
Theoretical Background
Some Basic theory on genetic algorithms (perhaps some background on artificial neural networks, and artificial neural network training?)
Requirements
What should a generic genetic-algorithms library do, and why? How might this change?
Examples of Genetic-Algorithms Libraries
Describe the Matlab GA libraries, and how they are used. What other examples are there?
A First Attempt
This is the starting point - something I put together around 6 months ago.
My first working attempt at a generic genetic-algorithms library is shown in Fig. 1. This section will dissect and critique portions of the initial library design.
Creating New Candidates
A set of Candidates are required to initiate the algorithm. The creation of this initial set or generation of Candidates is the responsibility of the library user.
In the first attempt, a modified Factory pattern was used here, this was taken from a Microsoft Patterns and Practices article by Doug Purdy. An abstract factory class is provided by the library, the user is expected to provide a concrete candidate factory class.
Selection of the Fittest
Upon creating a generation of candidates, the fitness of each Candidate is calculated, and the fittest are selected. Candidate selection is performed using one of several possible algorithms. The selection strategy may vary per iteration. The library user is responsible for choosing the selection strategy.
Fitness calculations are known about by
- the GeneticAlgorithms class
- the Generation class
- the Candidate class
Creating New Candidates via Reproduction
In the throws of the algorithm, new candidates are generated via reproduction. The parent Candidates should be randomly selected from the fittest candidates in the most recent generation. Reproduction, also known as crossover, is performed using one of many possible crossover algorithms. The same reproduction strategy is usually applied to the entire generation in any one iteration. And is often kept constant throughout the algorithm life-cycle. The library user is responsible for choosing the crossover strategy.
Mutating Candidates
Before progressing onto the next generation, some Candidates are randomly mutated. There are two algorithms to be considered here: One is the algorithm for performing the mutation, the library user is responsible for this. The other is the algorithm used to select Candidates for mutation. There are several algorithms that may be applied here, this selection strategy may vary per iteration. The library user is responsible for choosing the selection strategy.