Open BEAGLE Change Log

2.1.5:                                                          (03/08/2004)

- Re-writting of hierachical 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 inconditional 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 mesure 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 practice 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)



