COSC-4P82-Final-Project/lib/beagle-3.0.3/ChangeLog

1351 lines
62 KiB
Plaintext

Open BEAGLE Change Log
3.0.3: (29/11/2007)
- Fix bug in reading GP ephemeral random constants (CG)
Due to a wrong signature, method GP::EphemeralT<T>::readWithContext was
not properly called for reading a GP ephemeral random constant from a XML
file. (Thanks to Bartek)
3.0.2: (14/11/2007)
- Updated to PACC 1.3.1 (CG)
- Conditional compilation of code in 'tests' directory (CG)
Compilation of code in 'tests' directory is now disabled. It can be
enabled through option '--enable-tests' to the configure script. This
should reduce the compilation time for users, which are generally not
interested in compiling these various tests.
- Modification to build system for fast compilation on Unix (CG)
Heavy use of templates conjugated to division of code in several
independent .cpp files generate long compilation time on g++ and similar
Unix compilers. The modification allow building library from a single
.cpp file that includes other relevant source files used to generate the
library such that compilation time is reduced by a factor 5.
- Bug fix in reading method name for class GP::EphemeralT<T> (CG + JFD)
A change of reading method name in the interface of class GP::Primitive
was not propagated to class GP::EphemeralT<T>. This disabled correct
reading of an ephemeral from a file, for example from a milestone.
(Thanks to Jean-Francois Dupuis for spotting the bug.)
- Bug fix when reading a Beagle::Matrix from an empty string (CG)
- Bug fix: OversizeOp's ratio now scales the population (MW)
OversizeOp was previously increasing the deme size by DemeSize*Ratio.
Now it makes the deme size equal to DemeSize*Ratio. Also a special
ratio of -1.0 was added that makes the deme size the same size as
specified in 'ec.pop.size'.
- Bug fix: Fitness validity in TermMinFitnessOp and TermMaxFitnessOp (MW)
The two termination operators TermMinFitnessOp and TermMaxFitnessOp
were not testing the validity of the individuals' fitness values.
Validity of fitness values are now tested.
- Corrected inconsistance with hall-of-fame computation in knapsack (CG)
Configuration of knapsack have been modified for better computation
of the Pareto hall-of-fame during the evolution. (Thanks to Bastien)
- Bug Fix: MilestoneWriteOp now handles exceptions during write() (MW)
- Added commas to uint2ordinal() when num is 10,000 or more (MW)
- Fix bug in standard STGP mutation operator (CG)
Since the changes done in version 3.0.0, typed standard STGP mutation
was not working properly, because of a change in the architecture of the
GP initialization operators. (Thanks to Nicolas Navet)
- Altered parity example so that it matched Koza's work in GPII (MW)
Function set is now (AND,OR,NAND,NOR), as stated in GPII book.
- Maximum generation termination modified (CG)
Termination of an evolution is no more deactivated with a maximum
number of generation set to 0. This parameter value rather stop the
evolution after the application of bootstrap operator set.
- Bug fix to support ADF without arguments (CG)
Fixed GP::Invoker::execute to allow ADFs without arguments, without
having to use a fake argument primitive.
- Correction to minimal bounds for real-valued GA and ES (CG)
Minimal bounds for real-valued GA and ES has been changed from DBL_MIN
(1e-308) to -DBL_MAX (-1e308), which make more sense for usual
unbounded real-valued optimisation problems.
- Bug correction and improved support for CMA-ES. (CG)
An important bug as well as some numerical rounding errors has been
fixed in CMA-ES implementation. A new termination criterion specific the
algorithm has been defined in order to interrupt CMA evolutions that has
converged. Function MuWCommaLambdaCMAFltVecOp::operate has been separated
into several smaller sub-functions, for modularity purposes. (Thanks to
Olivier Teytaud, Sylvain Gelly, Nikolaus Hansen, and Anne Auger)
- Correction of randomizer reading/writing behavior (CG)
3.0.1: (11/10/2005)
- Several fixes to allow compilation on Mac OS X (CG + MP)
- Fixes in headers inclusion to allow precompiled headers (CG)
3.0.0: (04/10/2005)
- Customizable allocator for STL containers (CG)
Allocator used to instantiate elements of STL containers can be
customized, in order to use an allocator different from the standard one.
- IndividualSizeFrequencyStatsOp statistics operator (CG)
Statistics computation operator IndividualSizeFrequencyStatsOp has been
implemented in order to display the different individual size
frequencies over the evolutions. (Thanks to Matthew Walker)
- Methods to read individuals from files (CG)
New convenient methods readFromFile have been added to classes
Beagle::Individual and Beagle::IndividualBag in order to read individuals
from XML files without having to set-up an evolutionary context.
- GP ephemeral value mutation operators (CG)
New ephemeral constants mutation templated operator
GP::MutationEphemeralOpT, along with a specific instance for Double-typed
ephemeral mutation class named GP::MutationEphemeralDoubleOp, have been
added to the GP framework. These operators are useful to mutate the
values contained in ephemeral random constant primitives.
- TSP example to illustrate integer vector representation (CG)
Addition of a new integer vector representation example, that is the
Traveling Salesman Problem (TSP) solved by an indexed integer
representation GA.
- Integer vectors representation (CG)
An integer vector representation is now part of the GA framework. Proper
initialization, crossover and mutation operators has been defined, along
with a genotype and evolver classes. A special case of the integer
vector representation to contain a shuffled list of indices from
0 to (n-1), where n is the size of the vectors, has been defined.
Specific initialization, crossover and mutation operators has also been
defined to use the integer vector as a list of indices.
- NSGA2Op modified for a parametrized number of children (CG)
The ratio of the number of children generated at each generation over
the population size in the NSGA2 multiobjective replacement strategy
operator can now be configured by parameter 'ec.mulambda.ratio'. This
would allow an adjustment of the selection pressure at each generation.
This is a generalization of NSGA2 as a multiobjective (mu+lambda)
replacement strategy, common in the evolution strategy paradigm.
- Matrix and Vector classes inherit from their PACC-Math equivalents (CG)
Classes Beagle::Matrix and Beagle::Vector have been modified to inherit
from their PACC-Math equivalents, PACC::Matrix and PACC::Vector.
- Migration of Beagle's inputs/outputs to PACC-XML facilities (CG)
Beagle XML parsing and streaming facilities have been replaced by the
PACC-XML ones (which are simply a more mature version of them). The
read* and write* methods present in almost every Beagle classes have been
modified to comply with PACC-XML type and method names.
- Modified randomizer class (CG)
Beagle::Randomizer have been modified to inherit from PACC::Randomizer
in order to minimize functionality overlaps. PACC::Randomizer is a
different encapsulation of the Mersenne Twister random number generator.
Beagle::RandomizerMersenne class has been removed and roll* methods
have been changed from virtual to inline.
- ArrayT template (CG)
New generic array type defined. The template inherits from both
Beagle::Object and the std::vector template. Typedefs have been defined
for basic C++ types as IntArray, UIntArray, DoubleArray, FloatArray,
LongArray, BoolArray, ULongArray, ShortArray and UShortArray. Type
IntegerVector have been replaced by the functionally equivalent UIntArray
type.
- Whole system written in milestone files (CG)
All system components are now written into milestone files. Register is
now written as a part of the system.
- Modification to STGP support (CG)
STGP support in GP framework has been slightly modified. The typing now
use directly the std::type_info information to compare node typing.
For efficiency concerns, constrained initialization and crossover
operators has been changed to select node of compatible typing instead
of blindly trying different nodes. (Thanks to Graham Thomson)
- Dynamic configuration of primitive sets (CG)
Primitive set composition can now be stated dynamically (without
recompilation) into the configuration file.
- Evolutionary module acquisition support in GP framework (MW + CG)
Evolutionary module acquisition (Angeline and Pollack, 1993) is now
supported as a standard GP feature. (Thanks to Matthew Walker)
- Refactored ADF mechanism, generic GP::Invoker class (CG)
The mechanism for ADFs have been completely rewritten in a more generic
fashion. Evolvable module acquisition, automatically defined iterations
and such can now be relatively easily implemented over the GP::Invoker
class.
- Small bug fix in GP::PrimitiveUsageStatsOp (CG)
Primitive usage statistics didn't count the primitives of the first
individual of each deme. (Thanks to Graham Thomson)
- Mechanism to interrupt GP individual execution (CG + MW)
A new mechanism based on exception handling has been added to GP
framework in order to interrupt the execution of GP individuals after a
given number of nodes evaluation or when the time allowed is expired.
If one of this criterion is reached, an special exception is thrown and
must be caught in the GP fitness evaluation operator. New GP exception
operators has been defined for that purpose. The maximum number of nodes
and the time allowed is specified in the GP context used for the
individual execution. (Thanks to Matthew Walker)
- Migration of project files to KDevelop 3 (CG)
KDevelop 3 is now part of the recent Linux distributions, so the
different Open BEAGLE KDevelop project files have been migrated this
new version.
- Dynamic ADF with variable number of arguments (MW + CG)
Number of ADFs of the GP individuals can now be determined dynamically,
by the initialization or mutation operators. ADFs can be added
on-the-fly to a GP individual. The number of ADF arguments can also be
dynamically stated and can change from an individual to another. A new
ADFArgument type has been defined and should be used instead of simple
TokenT variable (as it was done before). Constrained operators must
also be used in order to generate valid individuals. (Thanks to Matthew
Walker)
- Explicit association of GP trees to GP primitive set (MW + CG)
The association between GP trees and GP primitive set has been changed.
Before, a given GP tree at the ith position in an individual was
implicitly associated to the ith primitive set of the primitive super
set. Now, the link between the two is explicit and relaxed, stated in
an integer member of GP tree. There is no constraints on the associations
possible between GP trees and GP primitive sets and there is no need to
have as much primitive sets as there is GP trees in an individual (i.e.
there could be only one primitive set available while having a variable
number of GP trees in the individuals). (Thanks to Matthew Walker)
- Dynamic selection weight in primitive set (MW + CG)
Selection weight of a primitive can now be stated dynamically, depending
on the context. Method GP::Primitive::isSelectionWeightStable state
whether, for a given number of argument, it is possible that the weight
of the primitive can change. Method GP::Primitive::getSelectionWeight is
used to generate the selection weight value in itself for the associated
primitive, in the given context. (Thanks to Matthew Walker)
- Dynamic number of arguments for GP primitives (MW + CG)
Number of arguments of GP primitives can now be stated dynamically, by
properly over-defining method GP::Primitive::giveReference. Selection of a
primitive in a primitive set has been changed, only one method
(GP::PrimitiveSet::select) do all kind of selection, using special
number of arguments values for selecting a primitive into all the branches
or all the primitives. (Thanks to Matthew Walker)
- GP primitives: GP::AbsT and GP::IfThenElseT (MW + CG)
Two new GP primitives added, AbsT, which compute the absolute value of its
argument, and IfThenElseT, a four-argument conditional primitive.
(Thanks to Matthew Walker)
- Stack trace mechanism added to exceptions try/catching (MW + CG)
Method call trace mechanism added to follow function calls when Beagle
exception is thrown but not caught. To trace a method call, the macros
Beagle_StackTraceBeginM and Beagle_StackTraceEndM must be added
respectively at the beginning and end of the method implementation. The
call stack is displayed along with the error message by calling the
method Exception::explain. All class methods of Open BEAGLE have been
modified to have the Beagle_StackTraceBeginM/Beagle_StackTraceEndM
macros surrounding them. (Thanks to Matthew Walker)
- Miscellaneous warning/error messages addition and improvements (MW)
Matthew slightly improved and added warning/error messages he encounters
during its developments.
- System components (MW + CG)
Component map added to the basic evolutionary system (class System).
A system component can be added dynamically to the system as a new system
composing element with no need to extend/define a class specific to the
problem/algorithm at hand. The logger, register and GP primitive super
set have been re-defined as system components. (Thanks to Matthew Walker)
- Object::getName() method and NamedObject class (MW + CG)
Method getName() added to class Beagle::Object in order to retrieve the
name of any objects. Generic named object class added into the
architecture. Several changes made in order to make specific named objects
inheriting from the new generic named object class.
(Thanks to Matthew Walker)
- Separation of log level parameter for console and file logging (MW + CG)
Log level is now separated for console and file logging. Two parameters
('lg.console.level' and 'lg.file.level') are now available to
independently set the log level at the console and into a file. Parameter
to disable/enable console logging have been removed from the system.
(Thanks to Matthew Walker)
- Change format of GA::FloatVector (CG + JS)
Now use ';' instead of ',' to separate vector components in order to
be consistent with Beagle::Matrix format. (Thanks to Jim Shepherd)
- Enhancement of DecimateOp operator (CG)
If value of parameter 'ec.decimation.ratio' is set to -1.0, DecimateOp
operator will resize the population to the real size given in parameter
'ec.pop.size'. This fix some problems encountered with the simultaneous
use of ES and Distributed BEAGLE.
- Bug fix in GA::ESVector::read (CG)
Bug fix to allow reading of ES vector. The bug was caused by the use
of double instead of float values in ES vector representation.
- Real-valued GA genotype values discretization (JS + CG)
Real-valued GA genotypes values can be discretized by setting an
increment on the possible values. For example, setting the increment of
0.5 make the domain of possible value equal to ...,-0.5,0.0,0.5,1.0,... .
(Thanks to Jim Shepherd)
- MutationGaussianFltVecOp: per-value setting for mu and sigma (JS + CG)
Mu and sigma parameters for MutationGaussianFltVecOp operator can now be
set on a per-value basis, allowing to modulate the mutation effect
for the different parameters composing the float vectors.
(Thanks to Jim Shepherd)
- Bug fix in Matrix::tql2 (CG)
Index out-of-bound bug fix in method Matrix::tql2, used to compute
eigenvalues and eigenvectors.
- Bug fix in method Matrix::extract (CG + MP)
Bug fix when extracting a sub-matrix from another matrix.
- Added InvalidateFitnessOp class (MW)
Fitness value for all the individuals of a deme can be invalidated by
adding the operator InvalidateFitnessOp to the evolver's main-loop.
(Thanks to Matthew Walker)
- Bug fix in GP::MutateSwapSubtreeOp (MW)
Silly bug in GP::MutateSwapSubtreeOp fixed. (Thanks to Matthew Walker)
- Added GP::ValidateOp class (MW)
Operator GP::ValidateOp check the validity of constrained GP trees and
report any invalid trees, which is useful for debugging.
(Thanks to Matthew Walker)
- Added GP::Tree::fixSubTreeSize() (MW)
Method GP::Tree::fixSubTreeSize() fix the sub-tree member of a GP::Node
after a GP::Tree alteration. (Thanks to Matthew Walker)
2.2.0: (28/10/2004)
- Fix to compile with gcc 3.4 (LS + CG)
Bug fix in files AbstractContainerAllocT.hpp and VivariumAllocT.hpp
to allow compilation with gcc 3.4. (Thanks to Laurent Steffan)
- SBX float vector crossover added (CG)
Operator for simulated binary crossover (SBX) (of Deb and Beyer) added
for float vector representation.
- CMA-ES implemented for float vectors representation (CG)
CMA-ES (of Nikolaus Hansen et al.), one of the most powerful evolutionary
algorithms for real-valued parameters function optimization, has been
implemented for float vector representation. The algorithm can be used
in any float vector problems, by specifying the use of the
GA-MuWCommaLambdaCMAFltVecOp replacement strategy and the
GA-MutationCMAFltVecOp mutation. See sample configuration file
"maxfctfloat-cmaes.conf" of the maxfctfloat example for an usage
illustration.
- Improved replacement strategy operators (CG)
NSGA2Op, MuCommaLambdaOp and MuPlusLambdaOp replacement strategy
operators have been improved to be used without evaluation operators in
the breeder tree. This will allow to use these replacement strategy
operators with special evaluation operators that can't be in a breeder
tree, such the ones of Distributed BEAGLE or the co-evolution framework.
- RandomizerNR class removed (CG)
Due to some concerns on the licensing policies of the code presented in
the book "Numerical Recipes in C", the random number generator class
RandomizerNR (which correspond to the routine rand1 of NR book) has been
removed.
- Improved float vector blend crossover (BLX-alpha) (CG)
Blend crossover for float GA and paired ES has been updated to be conform
to BLX-alpha crossover of Eshelman and Schaffer.
- Per-value range limits in GA framework (JS + CG + DS)
Float GA and paired ES now includes a range limit for each parameters
composing the individuals, instead of a global minimum and maximum.
(Thanks to Jim Shepherd for the code and David Stocks for the suggestion)
- GA individual initialization operations limited to one genotype (CG)
To ease the use of the GA framework, initialization operators are now
limited to generate individual with one genotype (bit string,
float vector or ES-pair vector). GA examples have been updated
accordingly.
- New Matrix and Vector classes for basic numerical computations (CG)
New classes Matrix and Vector are added with support for basic linear
algebra operations plus some special operations for the computation of
matrix inverse, determinants, and eigenvalues/eigenvector.
- Bug fix in the autoconf configuration of all examples (MD + CG)
(Thanks to Marc Dubreuil)
- Minor bug correction for compiling full debug (CG)
Small bug fix at line 185 of file HierarchicalFairCompetitionOp.cpp to
allow compilation in full debug mode. (Thanks to David Stocks)
- Changes in log outputs given by the evolver (CG)
Log outputs given by the evolver such as "Evolving the 1st deme for
generation 6" have been changed to avoid writing the generation
number. This change is necessary as there was confusion about generation
number given by the evolver vs the statistics for Distributed BEAGLE
applications.
- Primitive usage statistics operator (MW + CG)
Operator named GP::PrimitiveUsageStatsOp that compute usage statistics
of each primitives in GP trees and display the results in the logs.
(Thanks to Matthew Walker)
2.1.5: (03/08/2004)
- Re-writing of hierarchical fair competition operator (CG)
The HFC migration operator has been rewritten in order to use adaptive
fitness thresholds to migrate individuals from one deme to another,
instead of using unconditional migration policy.
- Major change in deme migration mechanism (CG)
A migration buffer has been added to the deme structure. This buffer
should now be used by all migration operators to move individuals
between demes. The migration buffer in deme is written in milestone
files, which allow reproduction of multiple demes evolutions.
MigrationRandomRingOp operator updated according to this change.
- Random number generator now initialized with /dev/urandom on Unix (CG)
Seed of random number generator is now taken from system device
/dev/urandom on Unix, when available.
- Bug fix in Beagle::MigrationRandomRingOp (CG)
Migration buffer in migration random ring operator was not checked to be
emptied when starting a new evolution with a given evolver.
(Thanks to Michel Fortin and Leila Dridi)
- Bug fix in GA::BitString::convertGray2Bin (MF)
Bug fix in computation for the conversion of Gray code to binary code.
(Thanks to Michel Fortin and Leila Dridi)
- Bug fix in statistics computation operator (CG)
Statistics calculation operator now computes vivarium statistics
only when all demes of a generation have been processed, with no
assumption on the order of the demes. This fix is necessary as
Distributed BEAGLE server send demes out-of-order to evolver clients.
- Genotype/phenotype distance measure methods (CG)
Two methods have been added to Beagle::Individual to compute distance
between two individuals in genotype and phenotype space:
getDistanceGenotype and getDistancePhenotype. These methods are
implemented by throwing an exception; they must be over defined by the
user for his application. (Suggestion of Jianjun Hu)
2.1.4: (04/07/2004)
- Hierarchical Fair Competition (HFC) operator (CG)
HFC operator inspired by the work of Hu and Goodman. The operator is
actually implemented as a migration operator that is at the same time a
replacement strategy. The breeder tree of the replacement strategy is
called to generate the new individuals.
- InitializationOp now a breeder operator (CG)
Abstract initialization operator now inherits from BreederOp, to enable
using it in breeder trees. The operator can be used pretty much like a
selection operator, as a leaf in a breeder tree that generate new
individuals. The breeding probability is the reproduction probability.
- Comments in XML output of configuration dump or milestone write (CG)
Comments in XML files when writing a configuration dump or a
milestone.
- Lexicographical parsimony pressure tournament selector operator (CG)
New selection operator based on tournaments selection, breaking ties by
selecting the smallest individual.
- getSize() methods added to Individual and Genotype classes (CG)
getSize() method added to Individual, Genotype, GA::BitString,
GA::FloatVector, GA::ESVector and GP::Tree classes. Return length for
genotype representation and total length composing an individual.
- Random shuffle deme operator (CG)
New operator to random shuffle individuals in a deme. Useful for
micro GA-like evolution with Distributed BEAGLE.
- Weights to modulate primitives selection in GP primitives sets (CG)
Primitives inserted in primitives set now get a weight that module
the importance of being selected during initialization and mutation.
Higher a weight value, higher chances are for the associated primitive
to be selected. Default weight value is 1.0.
- Bug fix in Pareto Hall-of-Fame update methods (CG)
Small index bug made update methods of Pareto hall-of-fame incorrect.
- Coev::TermBroadcastOp termination operator (CG)
Termination criterion to broadcast and receive termination criterion
notices between threads when doing co-evolution.
- Enhanced message of casting exception in Individual::operator= (CG)
Message thrown when fitness types mismatch during an individual
copy has been enhanced to help users figuring out the problem.
(Thanks to Matthew Walker)
- Bug fix in Register::interpretArgs (CG + MW)
Remove a test that throw an exception when a parameter value on the
command-line is empty. (Thanks to Matthew Walker)
- Bug fix in GP::Tree (MW)
Small typo in interpret() method. Only showed up with Beagle configured
with --enable-full-debug.
2.1.3: (13/04/2004)
- Bug fix in GA::CrossoverUniformOpT and GA::EvolverES (CG)
Small bug fix in constructors of GA::CrossoverUniformOpT and
GA::EvolverES.
2.1.2: (08/04/2004)
- Support for pre-compiled headers on MS Visual C++ .NET (CG)
Pre-compiled headers are now generated when compiling the libraries on
MS Visual Studio C++ .NET. This can speed-up significantly compilation
time.
- New method to get document root tag in XMLParser (CG)
Method XMLParser::getRootTagNode() has been added to conveniently allow
the user to get access the document root tag node in one line of code.
- Robust reading of unknown parameters in register file (CG)
When reading a register file, when a unknown parameter is met in a
configuration file, the new policy is to log a warning message,
instead of throwing an exception.
- Bug fix in Beagle::WrapperT<T>::read (CG)
Reading a wrapped value from a empty XML node doesn't change the value
of the wrapped value. This causes problem for the type Beagle::String,
where an empty XML node means an empty string value. The read method
is now changed to assign the default constructor value the wrapped value
when reading it from an empty XML node. (Thanks to Matthew Walker)
- Functions for searching in XML trees (MW + CG + MP)
Two functions XMLNode::find have been added to search for a given node
type and value in an XML tree. (Thanks to Matthew Walker)
- Update of Threading module and XMLNode class (MP + CG)
Module Threading has been updated and several methods to modify XML
tree has been added in class XMLNode, according to the changes made in
Marc Parizeau's classes.
- CrossoverBlendESVecOp operator added (CG)
This operator implements a crossover operation for ES vectors where the
offsprings are on a random position on the line connecting the values
of the parents' values and strategy parameters.
- File renamed when in the way of an Open BEAGLE file (CG)
If a file with the same name of a milestone, configuration or log file
that is going to be written to disk, the existing file is renamed by
appending an '~' to the filename. This allow some kind of backup
mechanism for existing files, avoiding undesired file deletion.
- Support for gzipped milestone / configuration files (CG)
On platforms where a zlib installation is detected (most modern Linux
distributions include it), support for reading gzipped milestone /
configuration files is provided. Milestones are now gzipped when
written on disk. Parameter "ms.write.compress" allows to disable
milestone compression. Windows users most have zlib installed on their
computer and set preprocessor flag BEAGLE_HAVE_LIBZ in header
config.hpp to make use of this feature.
- Method to sort hall-of-fames in the descending order (CG)
Method HallOfFame::sort() has been added to sort hall-of-fames
in the descending order.
- Method Logger::terminate() to close logger (CG)
Method Logger::terminate() added to manually close a running logger.
- DecimateOp and OversizeOp operators added. (CG)
Two new operators have been added: DecimateOp and OversizeOp.
DecimateOp shrinks the population by resizing to a ratio of the original
population size, keeping only the best individuals of the original
population. OversizeOp oversizes the population, using a breeder tree
to generate the new individuals. These two operators allow 1) a new way
to implement (mu+lambda) ES and 2) the implementation of a decimation
operation similar to the one described in Koza's GP1 book.
- Aliases for statistics computation of minimization fitnesses (CG)
Aliases for statistics computation operators have been defined for
minimization fitnesses measure. This allow, for example, to use
"StatsCalcFitnessSimpleMinOp" operator (aliased to operator
"StatsCalcFitnessSimpleOp") in conjunction of fitnesses of type
"FitnessSimpleMinOp".
- Configuration dumper changes (CG)
Small change to allow parameter "ec.conf.dump" to be in parameter file
with no value, without doing a configuration dump.
- Bug fix when parsing of big XML files (CG)
There was risk of stack overflow during the destruction of big XML trees.
The problem was that in the destruction of a XML node, the destructor of
the first child and next sibling node is called recursively
until the leaves are reached. The destructor is now more intelligent by
looping into children and siblings in order to avoid stack overflow.
- Validity attribute added to fitness and stats XML representation (CG)
An attribute named "valid" is added to fitness and statistics
representation. If the value of the attribute is "no", the fitness or
statistics read is considered invalid, and so the content is not read.
- Default constructor for specialized evolvers added (CG)
Default constructors of specialized Evolver classes now have a default
constructor that add the flavor-specific operators without setting
the bootstrap and main-loop operator sets.
2.1.1: (17/01/2004)
- Several small changes to compile on gcc 2.96. (CG)
- StatsCalcFitnessKozaOp class scoped in GP namespace (CG)
This class was misplaced into Beagle namespace while it should be scoped
into namespace Beagle::GP.
- Small changes in file format (CG)
Small changes are made in for file format. More specifically attribute
"mutdistribpb" renamed "distribpb" in operator CrossoverUniformOp, and
type of genotype for ES, renamed "esvector" instead of "ESVector".
Backward compatibility has been retained with old name. Attribute "size"
in four standard genotypes is now optional, the same for attribute
"depth" of GP tree genotype.
- Bug correction for multiobjective domination computation (CG)
Bug fix for Pareto domination computation. When comparing multiobjective
fitness measure A with B, fitness A was said not dominated by B in the
case where some objective values of A are equal to those of B, but none
objective values of A where greater than B.
- Bug correction in spambase example (CG)
Primitives in spambase example still used symbol as name. This cause
problem with new GP tree XML format, especially for LessThan primitive
which was using "<" symbol.
2.1.0: (11/12/2003)
- Move to MS Visual .NET 2003 solution and project files (CG)
Solution and project files for MS Visual Studio .NET are now generated
using version 2003, in opposition to version 2002 which was used
previously. Forward compatibility is not a practise at Microsoft, so
you probably need to pass to 2003 to use the solution and project files
provided. But, it is still possible to regenerate these files for
VS.NET 2002. Sorry for the problems that this might cause to Windows
users, but the VS.NET installation in my lab is now fully 2003.
- Evolution strategy example: function maximization (CG)
Usual GA function maximization example is implemented with ES as example
'maxfctes'.
- Evolution strategy support added to GA framework (CG)
Simple support for Evolution Strategy (ES) is added in the GA framework.
ES genotype, implemented in class GA::ESVector, is defined as a vector of
(value,strategy) pairs, where 'value' is the real value of the optimized
value, and 'strategy' is the mutation strategy parameter. A simple ES
mutation operator is defined in class GA::MutationESVecOp along with an
ES evolver. Generic GA crossover operators have also been adapted to ES.
- Bug fix in RandomizerMersenne::rollUniform (CG)
There was a bug in method RandomizerMersenne::rollUniform, when the lower
bound was not 0. (Thanks to "Graamone")
- Seeding population from file (CG + AM)
Seeding population from file code added in basic initialization
operator. File containing seeds is specified by parameter
"ec.init.seedsfile". (Thanks to Andrew Marek)
- New termination criterion operators (CG)
Three new termination criterion operator classes added. TermMaxEvalsOp:
interrupt evolution after the given number of fitness evaluation is done.
TermMaxFitnessOp: interrupt evolution when an individual has a fitness
value higher or equal to the given value. TermMinFitnessOp: interrupt
evolution when an individual has a fitness value less or equal to the
given value.
- Pareto front hall-of-fame (CG)
ParetoFrontHOF, Pareto front hall-of-fame class. Compute the Pareto front
of solution for multiobjective EA populations. ParetoFrontCalculateOp:
operator to compute Pareto front of population just before milestone
writing. This operator must be in evolver's operator set between
termination criterion operators and MilestoneWriteOp.
- Co-evolution example: co-evolutionary symbolic regression (JW + CG)
A two populations competitive co-evolution example, with a first population
of training set samples, and the second population of symbolic expressions.
Based on the paper "Methods for Evolving Robust Programs" of Panait and
Luke. (Mostly done by Jiachuan Wang)
- Changes in population constructors signatures (CG)
More coherent constructor signatures are used. Classes affected are:
Individual, Deme, Vivarium, GP::Individual, GP::Deme, GP::Vivarium,
IndividualAlloc, IndividualAllocT, DemeAlloc, DemeAllocT, VivariumAlloc,
and VivariumAllocT.
- Real-valued GA example: function maximization (CG)
Usual GA function maximization example is implemented with for real-valued
genotypes as example 'maxfctfloat'.
- Support for real-valued GA in GA framework (CG)
Basic real-valued GA fixed length genotype is added to the GA framework.
The following classes have been added to the distribution:
CrossoverOnePointFltVecOp, CrossoverTwoPointsFltVecOp,
CrossoverUniformFltVecOp, CrossoverBlendFltVecOp, EvolverFloatVector,
FloatVector, InitFltVecOp, MutationGaussianFltVecOp.
- New GA crossover operators (CG)
Two generic crossover operators has been added for vector-based EC:
two-points crossover and uniform crossover. Generic version of these
operators are defined as templates, while specific specialization of these
algorithms is defined for bit string and real-valued GA. Generic
implementation of one-point crossover, which was already available for
bit string GA is also given.
- Major changes in GA framework (CG)
Major changes happened in GA framework to allow future extension from a
simple bit string based GA to a more generic vector-based EA framework,
with support for bit string GA, real-valued GA, ES, and possibility to
extend to other types of vector-based EAs, including variable-length ones.
Changes include:
CrossoverOp --> CrossoverOnePointOpT and CrossoverOnePointBitStrOp
MutationOp --> MutationFlipBitStrOp
InitializationOp --> InitBitStrOp
Evolver --> EvolverBitString
GA::Individual --> removed
GA::Deme --> removed
GA::Vivarium --> removed
- Default GP fitness class changed (CG)
Default GP fitness measure changed from the overly complicated
GP::FitnessKoza class to the less confusing FitnessSimple class. New
computation statistics is added to GP framework, to compute statistics on
both simple fitness values and GP trees depth and size. GP examples and
configuration files have been updated accordingly.
- Co-evolution example: two-populations iterated prisoner's dilemma (CG)
Example two-populations iterated prisoner's dilemma, implemented with
3 bits bit strings, is added to illustrate co-evolution and Parizeau's
multi-threading classes.
- Multiple populations co-evolution basic support (CG)
Multiple populations co-evolution basic support is added with a
multi-thread-ready evaluation operator. The approach used need to
associate each co-evolving populations to a specific thread, and to do
the evaluation operation by "mating" the evaluation sets of the different
populations/threads. The OS specific multi-threading calls are encapsulated
by using Marc Parizeau's multi-threading classes, included in the
co-evolution framework. Parizeau's threading classes run on Win32 and
POSIX compliant Unix flavors, which includes Linux, Mac OS X, and Solaris.
- GA multiobjective example: Multiobjective 0/1 knapsack (CG)
Multiobjective 0/1 knapsack example illustrates the use of multiobjective
EA with GA.
- Multiobjective fitness and selection methods (CG)
Two multiobjective fitness measures have been added to the framework:
FitnessMultiObj and its minimization companion FitnessMultiObjMin. Two
multiobjective selection operators have been added: NSGA2Op, implementing
the NSGA-II MOEA selection algorithm as a breeder's replacement strategy,
and NPGA2Op, implementing the NPGA-II MOEA selection algorithm in a
standard selection operator.
- Improved configuration file support with libtool (CG)
The search path has been improved to correctly find configuration
files when debugging or executing Open BEAGLE binaries dynamically linked
using libtool.
- Example binaries *-debug removed (CG)
To reduce confusion and disk space, statically linked example binaries
(named *-debug) are removed from the autoconf/automake configuration.
- Bug correction in statistics computation operators (CG)
A computation bug with statistics computation operators of demes of
size 1 has been fixed. (Thanks to Jianjun Hu)
2.0.0: (24/09/2003)
- LVSN contact address added in license comments of headers/sources (CG)
- Two new selection operators: SelectRouletteOp and SelectRandomOp (CG)
Two new selection operators are added to Open BEAGLE: SelectRouletteOp
which is fitness proportional roulette selection, and SelectRandomOp
which is uniformly distributed random selection of individuals.
- GP operators supporting constrained trees splitted (CG)
GP operators that supports constrained trees (crossover, mutation,
and initialization) have been splitted in two operators, with one simple
version not including constraints handling, and a second version, with
word "Constrained" added in their name, supporting topological
constraints.
- Negative fitness values and higher precision statistics (CG)
The classes associated to the fitness measures now support the
possibility to use negative fitness value. The statistics are computed
using double-precision arithmetics, which allow better precision and
limit the effect of overflows.
- Initialization from file, without command-line arguments (CG)
It is possible for the user to initialize the whole system directly from
a file, without having to give the command-line values (argc/argv of
main() routine).
- Configuration files includes evolver structure (CG)
The configuration file (.conf file) now include in addition to the
parameters of the register, the possibility to set the configuration
of the evolver. The name of the parameters associated to the configuration
file have been changed to use the prefix "ec.conf" (i.e. configuration
file name: "ec.conf.file", configuration file dump: "ec.conf.dump").
The mechanism to read and write configuration has significantly changed.
- Dynamic evolver configuration from XML files (CG)
Operator sets composing evolvers can now be written and read from file
directly. A new way of doing things imply that each usable operators
are putted into the evolver, are used to compose the operator sets
when read from file. The operators have also been modified to be setup
dynamically from files.
- Modified operators to comply with breeder model (CG)
Several operators such crossover, mutation, selection, and evaluation
have been modified to be usable as breeder operators.
- (Mu,Lambda) and (Mu+Lambda) replacement strategies (CG)
The (Mu,Lambda) and (Mu+Lambda) replacement strategies, common in
Evolution Strategy (ES), have been added to the framework. (Mu,Lambda)
replacement strategy proceed by generating a new-born set of Lambda
individuals from a parent population of Mu individuals (where Lambda >
Mu). The Mu best individuals of the new-born population is used to make
the next generation of individuals. The (Mu+Lambda) differs from the
previous one by choosing the Mu best individuals to compose the new
generation from both the populations of Lambda new-borns and Mu parents.
- Breeders and replacement strategies (CG)
Breeders and replacement strategies concepts have been added to the
framework. A breeder operator is an operator that can process individuals
instead of demes, allowing a finer control over the evolutionary algorithm.
Breeders are structured as trees to generate new-born individuals one at
the time. Replacement strategies are the root of the breeder tree, which
insert each newly generated individual in the population following a given
strategy. Two replacement strategies have been implemented: generational
and steady-state.
- New exception class RunTimeException (CG)
New exception class RunTimeException added. This class covers
miscellaneous exception cases related to run time value checking.
Changes in different places in the code to throw RunTimeException instead
of other Beagle exceptions.
- Read parameter operator removed from standard evolvers (CG)
The RegisterReadOp has been removed from the bootstrap and main-loop
operator set of the standard evolvers, but still remain available in the
EC framework.
- Bug correction in minOf() and maxOf() (CG)
Bug correction in minOf() and maxOf(), by testing of the function
arguments for being Not-a-Number.
- Number of processed individuals added in context (CG)
Basic EC context now has four new members: number of individuals
processed (evaluated) in the actual deme for this generation, number of
individuals processed in the whole evolution, number of individuals
processed in the vivarium for this generation, and number of individuals
processed in the vivarium for the whole evolution.
- Changes in statistics mechanism (CG)
Dynamic addition of statistical element is now possible. The statistics
computation for a deme is now done in statistics calculation operator
(no more in fitness class). Two new statistics calculation operator
added: StatsCalcFitnessSimple, and StatsCalcFitnessKozaOp.
- File format changes (CG)
The file format has been changed, using the new XML I/O classes. Among
the changes, we note that file format is now completely XML standard
compliant, and that the GP trees are now written using a pure XML format.
- New XML reading/writing classes (CG + MP)
The Open BEAGLE XML input and output classes as been changed for
Marc Parizeau's XML parser and streamer. Signature of method Object::read
and Object::write has been changed accordingly. This imply that every
Open BEAGLE object that can be read and written have been changed to use
new XML I/O mechanism.
- Gray code decoding facilities for bit strings (CG)
A new decoding method has been added to the GA framework, to allow the
decoding of gray-coded bit string to floating-point vectors. The
maxfct example has been changed to use gray-coded strings instead of
binary-coded ones.
- Mersenne twister random number generator (CG)
A better (and faster) random number generator is now used in the
framework: the mersenne twister. This number generator is now used
by default by the framework, and I advice people to use it instead of
the old one. The old random number generator, based on rand1 of
"Numerical recipes in C", is still available.
See http://www.math.keio.ac.jp/~matumoto/emt.html for details on the
mersenne twister.
- Post-initialization hooks (CG)
Post-initialization hooks method called "postInit" has been added to
different components (logger, register, randomizer, operators). These
hooks provide an entry to a mechanism that is call once, after the system
is initialized and the parameters read from the configuration file, but
before the evolution is started.
- Changes in fitness classes (CG)
Some minor changes in fitness classes, to take account of invalid fitness
measure in comparison methods, and to enable calculation of statistics
for empty demes.
- Changes in Individual::isIdentical (CG)
The Individual::isIdentical method now tests whether two individuals are
equals, in term of their fitness value, before comparing their structural
similarity. This change affect the individuals putted in the hall-of-fame
as now, two structurally identical individuals, but with a different
fitness value, will no more considered as identical.
- New class HallOfFame, hall-of-fame in the vivarium (CG)
The hall-of-fame mechanisms, which is essentially to preserve the
best-of-run individuals into a persistent and evolution independent
container, is now encapsulated into class HallOfFame. An hall-of-fame
has been added to the vivarium. The hall-of-fame size parameter name has
been changed for "ec.hof.demesize" for each deme's hall-of-fame size, and
"ec.hof.vivasize" for the vivarium's hall-of-fame size. Default size
values are now 1 for the vivarium's hall-of-fame, and 0 for the deme's
one. The members of the hall-of-fame also includes their associated
generation number and deme index of the moment they were put in
the hall-of-fame.
- New GP mutation operator: MutationSwapSubtreeOp (CG + HJJ)
New mutation operator added to the GP framework: MutationSwapSubtreeOp.
This mutation operator implement a kind of self-crossover operation,
where two subtrees of the same individual are exchanged. Two types of
swap subtree mutation are possible: external subtree mutation, using two
exclusive subtrees, and internal subtree mutation, where one of the
swapped subtree is within the other. In the later case, three mutation
points are used. (In collaboration with Jianjun Hu)
- Bug fix in method Deme::updateHallOfFame (CG)
Hall-of-fame was not correctly updated when HOF size is > 1.
(Thanks to Jianjun Hu)
1.1.1: (28/05/2003)
- Ordinal numbers correctly displayed. (MW + CG)
Ordinal numbers (1st, 2nd, 27th, etc.) are now correctly outputted in logs
using new function uint2ordinal. (Thanks to Matthew Walker)
- Minor correction to compile with MS Visual C++ .NET 2003 (7.1). (CG)
Some minor code correction to allow compilation with MS Visual C++ .NET
2003 (7.1). (Thanks to sashan)
- Bug fix in GP::InitHalfOp. (CG)
Type mistake for typedef of type GP::InitHalfOp::Bag.
(Thanks to Matthew Walker)
- FitnessKoza now inherits from FitnessSimple. (CG)
The class FitnessKoza now inherits from FitnessSimple. The value of the
simple fitness is the normalized measure of the Koza's fitness. The
interface of the class stay unchanged. This will be useful as
selection operators usable with class FitnessSimple will also be usable
with class FitnessKoza.
- New GA example: All Zeros. (CG)
A new GA example is added to the distribution. It consists to discover
a bit string made only of zeros. It is expressed as a minimization
problem, as the fitness measure is the number of one in the bit string.
It also uses the new fitness class, FitnessSimpleMin.
- New fitness class: FitnessSimpleMin. (CG)
A new fitness class is added to the generic framework. The fitness is
similar to FitnessSimple with the exception that smaller values are
better. This new class is targeted for minimization problems.
- Bug fix: config.hpp was not correctly installed on Unix (CG)
Since version 1.0.3, file config.hpp was not correctly installed on Unix
with the command 'make install'.
1.1.0: (30/04/2003)
- Doxygen comments improvements (CG)
Code comments improved. New section "Modules" in the doxygen
documentation, where the classes are regrouped in a human-understandable
fashion. This new section is appropriate to get familiar with the
framework.
- Milestone file format modified (CG)
With the class name and in the statistics changes, the milestone file
format has been changed. The old format is not recognized by the
framework, until someone develop a XSLT to transform them (any
volunteer?). Note that the actual new format is transitory
and will _NOT_ be compatible with the new format announced with the new
XML readers/writers.
- GP tree size and depth measures added to GP::FitnessKoza (CG)
Class GP::FitnessKoza now contained two new measures: the number of nodes
in the individuals, and the tree depth of the individual. This is
appropriate to monitor code growth in the population during evolutions.
- Changes in statistics and fitness classes (CG)
A major revision of statistics classes has been made. Classes
MeasureStats and PopulationStats are eliminated. The GenerationStats is
renamed Stats, and the Measure struct is now in the same header than this
class ("beagle/Stats.hpp"). The members m3rdQuart (third quartile measure),
mMedian (median measure), and m1stQuart (first quartile measure) of the
Measure struct are eliminated. The mPopSize and mGeneration members
are moved into the Stats class and new member called mProcessed
(number of individuals processed (evaluated) in actual generation) and
mTotalProcessed (total number of individuals processed (evaluated) in the
whole evolution) are added to the class Stats. The statistics in the deme
are now only for the most recent generation. For the history statistics,
the user should consult the logs. A statistics member is added to the
vivarium. Class DisplayStatsOp merged into class StatsCalculateOp. The
statistics are generated directly by the class StatsCalculateOp and now
outputted passing by the logger. The declaration of the prototype of method
Fitness::calculateDemeStats is changed for Fitness::calculateStats.
- New logging mechanism (CG + MP)
A new logging mechanism has been developed. Two new classes are added
to the framework: Logger, abstract logging class, and LoggerXML, logger
that can write into a file and/or the standard output in a XML format.
A logger handle is added to the System class. There is 8 levels of logging
available, from level 0 (nothing) to level 7 (debug). High logging levels
include all the previous one. Macros are added to facilitate logging.
Several parameters for the logging are added in the register. See the
manual for more details. Almost half of the framework classes source
code, essentially the operators, have been modified to log their
operations.
- Some name changes of classes and files (CG)
In order to make the whole organization more coherent, the name of
the following classes, with their associated files, has been changed.
CalculateStatsOp -> StatsCalculateOp
GenerationStats -> Stats
MaxGenerationTermOp -> TermMaxGenOp
RandomRingMigrationOp -> MigrationRandomRingOp
ReadMilestoneOp -> MilestoneReadOp
ReadParametersOp -> RegisterReadOp
SimpleFitness -> FitnessSimple
TournamentSelectionOp -> SelectTournamentOp
WriteMilestoneOp -> MilestoneReadOp
GA::GenerationalEvolver -> GA::EvolverGenerational
GA::SteadyStateEvolver -> GA::EvolverSteadyState
GP::GenerationalEvolver -> GP::EvolverGenerational
GP::KozaFitness -> GP::FitnessKoza
GP::MaxHitsTermOp -> GP::TermMaxHitsOp
GP::ReadMilestoneOp -> GP::MilestoneReadOp
GP::ShrinkMutationOp -> GP::MutationShrinkOp
GP::StandardMutationOp -> GP::MutationStandardOp
GP::SteadyStateEvolver -> GP::EvolverSteadyState
GP::SwapMutationOp -> GP::MutationSwapOp
1.0.3: (20/03/2003)
- Prefix BEAGLE_ added to preprocessor flags in file config.hpp (CG)
The prefix BEAGLE_ is now used as prefix of all preprocessor flags
generated by autoconf in file config.hpp.
- Additional methods to read/write demes (CG)
The methods Deme::read and Deme::write have been cut into fine grained
methods to read/write the hall-of-fame and the population.
- New templated functions isNaN, isInfinity, and isFinite to check (CG)
whether a floating-point number is not-a-number, infinite or finite
These new functions enable the checking of finiteness of floating-point
numbers, that is a number is not NaN, infinite, or finite (nor NaN or
infinite). These functions are generic, portable replacements to previous
calls to the GNU macro isfinite, which is only available on gcc <= 2.95.
- New templated arithmetic functions maxOf, minOf, and pow2Of (CG)
These arithmetic functions replace the Beagle_MaxM, Beagle_MinM and
Beagle_Pow2M macros to evaluate respectively the maximum of two
numbers, the minimum of two numbers, and the square of a number.
- Members mHallOfFame and mStats in Deme changed from value to handle (CG)
Type of member Deme::mHallOfFame changed from Individual::Bag to
Individual::Bag::Handle. Type of member Deme::mStats changed from
PopulationStats to PopulationStats::Handle. This is to allow smart
pointing of deme's hall-of-fame and statistics. (Thanks to Jianjun Hu)
- Bug correction in SteadyState::operate (CG)
The steady-state now update the hall-of-fame with the best of run
individuals. The method Deme::updateHOFWithIndividual is added in order
to update the hall-of-fame with one individual. (Thanks to Jianjun Hu)
- Bug correction in Register::interpretArgs (CG)
Correction of a bug in the command-line parsing routines in the register.
When two consecutive arguments starting with -OB were given on the
command-line, the second was ignored. (Thanks to Jianjun Hu)
1.0.1: (20/11/2002)
- Autoconf/automake/libtool compilation front-end (CG)
This enable the compilation on different Unix systems using the GNU build
tools. It eliminates the manual setting of preprocessing flags to compile
on a given target (configure script now sets these flags automatically).
The preprocessing flags name are changed to be compliant with autoconf.
The user doesn't need anymore to edit the infamous 'beagle.make' and
'beagle-debug.make' files.
- Support for MS Visual C++ .NET (CG)
The framework now compiles under MS Visual C++ .NET. Some changes are
made to the code to allow it. Support for Borland C++ Builder is
abandoned. (Thanks to Mark Mikulec)
- Modification of the file structure (CG)
The examples are moved into the folder 'examples' and are now independent
projects. The 'make' and 'BCB' folders are eliminated and different
autoconf/automake files are added. The folders 'MSVCPP' contains the
MS Visual C++ .NET specific project files.
- Complete revision of parameter tags and descriptions (CG + MP)
The parameter tags are changed to augment consistency and organization.
Some useless and confusing parameters are eliminated. The short and
long help about the parameters is completely revised. The '-EC'
command-line prefix is changed for '-OB'.
- Code revision of the examples (CG + MP)
The four examples code are revised for clarity and simplicity.
- Bug correction in SteadyStateOp::operate (CG)
Correction of a bug in the steady-state operator when mating two
individuals for crossover. (Thanks to Jianjun Hu)
- Bug correction in symbolic regression example (CG)
The symbolic regression evaluation operator "initialize" method
previously called the random number generator. This may cause problems as
the random number generator internal state value may be changed after
this call. This situation is now corrected by sampling the equation to
regress at the first call to the method "evaluate". (Thanks to Brad
Pillow)
- Bug correction in MigrationOp::migrate (CG)
Correction of a bug that happen when determining whether migration happens
or not, given the migration interval. (Thanks to Mathieu Roy)
1.0.0: (22/07/2002)
- Modification of statistics classes (CG)
- Modification of copy behavior of bags and bag allocators (CG + MP)
- Several minor bug fixes (CG)
- Several minor comments revision (CG + MP)
- Minor changes to compile with Borland C++ Builder (CG)
0.16.2 (BETA): (13/06/2002)
- Merge of mixed and uniform bags into unified bags (CG + MP)
- Several class name changes (CG + MP)
- Several minor bug fixes (CG)
- The GP framework (CG)
- Tree GP test examples (CG)
0.16.1 (ALPHA): (21/03/2002)
- The makefiles structure (CG)
- The generic OO foundations (CG)
- The generic EC framework (CG)
- The GA framework (CG)
- A simple GA test example (CG)