📄 galib revision history.htm
字号:
a value to the 'score' member function. Note that this value will get reset by
the chromosome's objective function if it has one. Otherwise the score will
not change.
<LI>Since the genome's score may be set externally, we now allow
population-based evaluation functions to be used. As part of this approach the
population object now contains initialization and evaluation member functions
that can be customized. The sort function can also be customized (should you
find the default quicksort not fast enough).
<LI>The names of the completion functions are now: GATerminateUponGeneration,
GATerminateUponConvergence, GATerminateUponGenOrConv,
GATerminateUponGenAndConv.
<LI>The order has changed for parameters arguments in the creator for the
GAParameters object. The order is now population-size, crossover-probability,
mutation-probability, number-of-generations, convergence-percentage,
generations-to-convergence, number-of-best-chromosomes-to-keep, and
score-frequency. See the documentation for the names of the GAParameters
member data fields.
<LI>Changed the names of some of the GA member functions so that the
statistics object is now more consistent. These are provided as convenience
access to the statistics object that each GA contains.
<UL>
<LI>keepScores ---> scoreFrequency
<LI>keepBestChromosomes ---> nBestChromosomes </LI></UL>Note that the
parameters object is now contained within the statistics object - the idea is
to make the statistics object contain all of the information we need to
start/restart/stop the GA at any point in time (plus, of course, the
population itself). I also fixed some const-correctness problems with the
statistics and parameters objects. It is NOT ok to change the parameters
directly - you must use the statistics or GA member functions to make the
changes. Now the library enforces this behaviour. Also, names of the members
of the parameters object are more consistent now.
<LI>Major change to error message handling. There is still no signal handling
in the library, but we do provide a consistent error message utility. The
error.h header contains functions for printing out error messages. If you used
gaErrMsg before you must change to the new functions. There is no longer an
'error' method for the classes - now there is simply a set of
globally-accessible error functions that format your messages. See error.h for
details.
<LI>The write and read methods have been moved to their own objects (GAOutput
and GAInput). See io.h for details. The Genome, GA, and CrossoverSite objects
are all affected by this change.
<LI>Minor change to the ID architecture. There is now a separate object for
the ID functionality plus a macro you can use to define an object's identity.
See the id.h header file for details. It is backward-compatible with className
and classID.
<LI>Changed the default value of the linear scaling coefficient to 1.2 (it was
2.0).
<LI>Significant speedup in binary string performance due to inlining of
often-used functions.
<LI>'Scaling' is now 'ScalingScheme'
<LI>'ReplacementStrategy' is now 'ReplacementScheme'.
<LI>Enforced the changes from older 2.2.x name changes. The typedefs have been
removed so:
<UL>
<LI>'xSite' is now 'crossoverSite'
<LI>'pickXSite' is now 'pickCrossSite'
<LI>'mirrorXSite' is now mirrorCrossSite'
<LI>'gaNoXSite' is now 'gaNoSite'
<LI>'Chromosome' is now 'Genome' </LI></UL>
<LI>About the change from 'chromosome' to 'genome'. This is an attempt to make
the naming in the library consistent with biological terminology. A genome
contains all of the information necessary to express the traits of an
individual, so, strictly speaking, any solution to your problem can be
contained in a genome. The chromosome, on the other hand, is a subset of the
genome. You can use the following PERL expressions to make the changes. <PRE>perl -pi -e 's/Chromosome/Genome/g' filename1 filename2 ...
perl -pi -e 's/chromosome/genome/g' filename1 filename2 ...
</PRE>The first line changes 'Chromosome' to 'Genome', the second line changes
'chromosome' to 'genome' in all of the specified files (you can use wildcards
for the filenames).
<LI>It is now much easier to use the template classes. See examples <A
href="http://lancet.mit.edu/ga/examples/ex6.C">6</A>, <A
href="http://lancet.mit.edu/ga/examples/ex8.C">8</A>, <A
href="http://lancet.mit.edu/ga/examples/ex11.C">11</A>, <A
href="http://lancet.mit.edu/ga/examples/ex12.C">12</A>, 14 (<A
href="http://lancet.mit.edu/ga/examples/ex14.C">ex14.C</A> and <A
href="http://lancet.mit.edu/ga/examples/ex14.h">ex14.h</A>), 16 (<A
href="http://lancet.mit.edu/ga/examples/ex16.C">ex16.C</A> and <A
href="http://lancet.mit.edu/ga/examples/ex16.h">ex16.h</A>), and <A
href="http://lancet.mit.edu/ga/examples/ex17.C">17</A> to see how this is
done. </LI></UL>
<P>
<P><STRONG>Changes in version 2.2.5</STRONG><BR><I>released 12 May
1995</I><BR><A href="http://lancet.mit.edu/ga/API225.html">programming
interface</A><BR>
<UL>
<LI>Changed the signature of the 'clone' member function from <CODE>virtual
void clone(const int flag)</CODE> to <CODE>virtual void clone(const
GACloneMethod flag)</CODE>
<LI>Fixed a bug in the swaptree member function of the Tree object that could
result in circular references within a single tree.
<LI>Added 'hot' width, height, and depth members to arrays and binary strings
<LI>Fixed bug in overlapping population GA that caused scaling object to
evaluate the population twice as often as it needed to.
<LI>Fixed cross-platform flakiness in random() function. Should get more
consistent results across platforms now.
<LI>Patched some cross-platform initializer/operator= variations in
polymorphic objects.
<LI>Consolidated the preprocessor defines: NO_TEMPLATES, NO_RANDOM, NO_PID,
and NO_CPLUSPLUS_MATH </LI></UL>
<P><STRONG>Changes in version 2.2.4</STRONG><BR><I>released 1 May 1995</I>
<UL>
<LI>Added another 'resizeBehaviour' member function for multi-dimensional
array chromosomes.
<LI>Changed name of 'bitcopy' member function to simply 'copy' (for array
chromosomes).
<LI>Minor tweaks to names of undocumented member function in preparation for
next release.
<LI>Fixed bug in 2DArray that would limit resize of any chromosome, even if
unlimited resize was requested.
<LI>Added argument to the 'bestOfAll' GA member function so the nth best
chromosome is now directly accessible.
<LI>Redefined the GA creator so that the arguments make more sense. Earlier
releases had extra creators defined that were redundant.
<LI>Added assignment method to the AlleleSet class so you can initialize an
allele set by assignment to an array of the same type.
<LI>Fixed bug that prevented some chromosomes from seeing the GA that owns
them.
<LI>Modified base type of binary string chromosome to be unsigned char rather
than simply char.
<LI>Fixed bug in decimal-to-binary converter that rounded incorrectly. Added
error message to warn when data will be lost when setting phenotype when the
defined resolution cannot completely represent the specified value.
<LI>Added the GAVectorObjectiveFunction type and fixed name of
ScalarObjectiveFunction to be GAObjectiveFunction </LI></UL>
<P><STRONG>Changes in version 2.2.3</STRONG>
<UL>
<LI>Fixed the best-of-all functionality in the statistics object. Now it
remembers the best chromsomes that the GA encounters based not only on
objective score but also on genotype/phenotype. It uses the == operator to
determine whether or not it has encountered each chromosome, so the
best-of-all population cannot get overrun with a single high-performance
chromosome.
<LI>Changed the naming of the chromosome, crossover site, and default
chromosome operator files. The chromosome objects have the same names, but
their definitions have been split out into separate files. This means that if
you were using template chromosomes and the g++ compiler you will have to
modify your sources to include the new filenames. See examples 6, 8, and 11.
<LI>Installed the 2D and 3D variants of the array chromosome. Beware that the
current implementation will work ONLY for simple types (ie don't use the array
chromosome on objects with non-trivial contents). The current implementation
makes assumptions about object contents and thus cannot be used if your object
has a non-trivial operator=. This will be fixed in the major next release.
</LI></UL>
<P><STRONG>Changes in version 2.2.2</STRONG>
<UL>
<LI>Fixed a problem with the population object that would cause it to crash
when initializing on a Mac.
<LI>Fixed a looping limit in the 2DBinaryStringChromosome mutation method that
could reduce the probability of mutation in some cases.
<LI>Renamed the ListMatchCrossSite to ListOrderedCrossSite
<LI>Implemented the string chromosome specialization of the array chromosome
for g++ compilers. Still doesn't work with DCC due to a bug in the DCC
compiler. </LI></UL>
<P><STRONG>Changes in version 2.2.1</STRONG>
<UL>
<LI>Added basic initialization, mutation and crossover methods for the array
chromosome class. </LI></UL>
<P><STRONG>Changes in version 2.2</STRONG>
<UL>
<LI>Fixed a minor bug in the overlapping population operator ++.
<LI>Made elitism work more efficiently in non-overlapping populations. No
extra copy occurs now.
<LI>Added mechanism for doing various replacement strategies in overlapping
populations.
<LI>Re-worked the fitness scaling so that is now buried in the population
object. Goldberg's sharing functions are now directly supported.
<LI>Naming of member functions changed considerably between version 2.0 and
2.2. The naming in 2.2 is more consistent across all of the objects in the
library. See the interface definition for the function signatures.
<LI>Introduced the array chromosome, but no built-in methods yet. </LI></UL>
<P><STRONG>Changes in version 2.1</STRONG>
<BLOCKQUOTE>This was an internal release. It never saw the light of public
release. </BLOCKQUOTE><STRONG>Changes in version 2.0beta</STRONG>
<BLOCKQUOTE>Changed mapping of x,y,z/i,j,k/width,height,depth in
multi-dimensional chromosomes. The example code used to map i to height and j
to width. That code will now break! The new examples map i to width and j to
height. See the new examples if you're confused.
<P>Implemented a new architecture for doing initialization, mutation, and
crossover. Now chromosomes use pointer functions instead of virtual functions
so you don't have to derive a new class to change chromosome behaviour. Not
only does this result in a cleaner interface, but the code now runs up to 8
times faster as well.
<P>Implemented template versions of the tree and list chromosomes. Refined the
tree and list interfaces and streamlined iterator usage. It is now possible to
use multiple iterators on the same tree/list. Made iteration more consistent
in terms of what is affected by inserts, swaps, etc.
<P>Implemented PMX, OX, and CX (see Goldberg) for list chromosomes.
<P>Restructured the chromosome class hierarchy to be flatter.
<P>Rewrote test code to do more corner cases and keep better record of
failures. </P></BLOCKQUOTE><STRONG>Changes in version 1.x</STRONG>
<BLOCKQUOTE>Implemented steady-state as well as simple GA.
<P>Implemented architecture for plug-in chromosomes and selectors.
<P>Implemented a 'bestOf' method in the GAs to keep track of selected
population members. </P></BLOCKQUOTE></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -