📄 galib revision history.htm
字号:
<LI>Fixed the #ifndef _ga_xxxxxxxx.h_ problem in the DOS distribution. Some
DOS compilers did not like having a . in the #ifdef statements. The PERL
script I was using to trim filenames inadvertantly replaced preprocessor
#ifndef directives as well as #include directives.
<LI>Added a 'gnu' directory in the examples directory with an example of how
to create your own genome using a non-GAlib data structure. The gnu example
uses the BitString object from the GNU g++ library to implement a binary
string genome.
<LI>Fixed a bug in the base GA object's copy method that did not copy all of
the base GA components during a copy.
<LI>Minor changes to binstr2.op.h, bin2dec.h, bin2dec.C, array1.op.C and
list.op.C to get rid of compiler errors when compiling on the Mac (no function
prototypes).
<LI>Added two more examples, one with all of the DeJong functions and a second
with Holland's Royal Road problem.
<LI>Made the GARandomBit function more efficient. It is now no longer inlined
(a minus) but it caches bits so that it does one call to your system's random
function for each bit in a long in on your machine. So if you have a 32-bit
long int on your machine, random gets called only 1/32 as often as before.
This was pretty important for the uniform crossover operator.
<LI>Changed the name of the version header file from VERSION to version.h in
order to avoid confusion between the VERSION file in the installed include
directory (this file contains only the version number) and the version.h file
in the galib source directory (this file contains the rcsid string for
ident-ing the library).
<LI>Fixed the #include format for DOS and Mac systems. The UNIX #include lines
are of the form #include <ga/ga.h> whereas the DOS and Mac #include
lines are now of the form #include <ga.h>.
<LI>Fixed the ANSI C++ incompatibilities (using 'for' loop variables outside
the loop and implicit casting of void * as NULL). Also fixed a couple of
inline syntax problems in example 14.
<LI>The population object did not initialize newly cloned genomes when it was
resized to a larger size. This behaviour has been changed so that any new
genomes will be initialized when the population grows. Existing genomes are
not affected by the resize.
<LI>The objective vector's copy constructor did not initialize the array
pointer to NULL, so seemingly spurious segmentation errors could occur.
<LI>There was a bug in the SimpleGA that would delay convergence (a workaround
was to use a SteadyStateGA with 100% replacement). This has been fixed.
<LI>Cleaned up the examples. There were a lot of old comments left that were
no longer up-to-date. Added some comments to parts of the code that weren't
clear.
<LI>Cleaned up the error messages and removed old error strings that are no
longer used.
<LI>Update the documentation for the programming interface (more array, list,
and tree details) and the overview.
<LI>The signature for the custom replacement function has changed. It now
includes a reference to the child that is to be inserted: <BR><CODE>typedef
GAGenome & (*GAReplacementFunction)(GAGenome&,
GAPopulation&);</CODE><BR>This makes it easier to do custom parent-child
comparisons. Previously it took only the population as its argument.
<LI>Added the uniform crossover operator for binary string and array genomes
(yes, even after all this time I actually forgot that the library did not have
uniform crossover).
<LI>Added a score-flushing feature to the statistics object. Now you can
specify a file to which the best-of-generation scores will go <I>before</I>
you run the GA. The statistics object will cache the scores then flush them to
the specified file periodically. When no file is specified, the statistics
object keeps growing to hold all of the scores.
<LI>Added another termination function: GATerminateUponPopConvergence. This
function causes the GA to terminate when the population average comes close to
the score of the best individual in the population.
<LI>GATerminateUponGenOrConv and GATerminateUponGenAndConv are no longer built
in to the library. You can make your own logical combinations of the built in
termination functions.
<LI>There was a problem in the population object when calculating the
deviation of the population. Due to roundoff errors, it was possible to get a
negative number which was then passed to the sqrt function, resulting in a
crash on some platforms. The crash would typically occur when the population
converged to the point where the population's deviation was zero. This has
been fixed.
<LI>In array1.xs.h the clone member function of the GA1DArrayOrderedCrossSite
object did not have the <T> in it, so it would not compile on some
machines.
<LI>The trailing comma at the end of the GAReplacementScheme enum in ga.h
caused some compilers grief, so I removed it.
<LI>In node.h in the GANodeBASE object there was no return value for the
operator() function. </LI></UL><STRONG>Changes in version
2.3.1</STRONG><BR><I>released 5 July 1995</I><BR><A
href="http://lancet.mit.edu/ga/API231.html">programming interface</A><BR>
<UL>
<LI>Added some more comments to the programming interface documentation.
<LI>DOS and Mac versions of the library are now available - if you use DOS or
MacOS you won't have to change the UNIX filenames/paths as you did in earlier
releases. I have also added DOS- and MacOS-specific instructions in the README
for installation.
<LI>Some of the header filenames have changed. You will have to do a 'make
depend' to update your makefile dependencies before compiling your code with
the new library. Here is a list of the changes to the filenames (the names for
the DOS distribution do not have the extra . in them):
<UL>
<LI>list.tmpl.h is now listtmpl.h
<LI>tree.tmpl.h is now treetmpl.h
<LI>tree.h is now treebase.h
<LI>list.h is now listbase.h
<LI>array.ch.h is now array1.ch.h, array2.ch.h, and array3.ch.h
<LI>array.xs.h is now array1.xs.h, array2.xs.h, and array3.xs.h
<LI>array.op.h is now array1.op.h, array2.op.h, and array3.op.h
<LI>binstr.ch.h is now binstr1.ch.h, binstr2.ch.h, and binstr3.ch.h
<LI>binstr.xs.h is now binstr1.xs.h, binstr2.xs.h, and binstr3.xs.h
<LI>binstr.op.h is now binstr1.op.h, binstr2.op.h, and binstr3.op.h
<LI>You no longer need to define USE_?DARRAY before including the array
operators file. </LI></UL>
<LI>There are now convenience headers for each genome type. For example, you
can include "binstr1.h" rather than "binstr1.ch.h", "binstr1.xs.h", and
"binstr1.op.h". As before, normal use of the library requires that you include
only "ga.h" - the convenience headers are to help when deriving your own
genome class.
<LI>Added some significant configuration options. You can now specify at
compile time which parts of the library you want to compile and which you do
not need using the 'config.h' header file. This can be useful if you're
working under a 640K limit. The minimum library size for DOS is around 200K,
the maximum is around 400K.
<LI>Modified the makefiles to make UNIX installation a bit easier.
<LI>Made the resize work more consistantly. When you resize an array or binary
string genome, the contents are not changed. In previous versions of the
library a resize could change the contents. Resizing to a larger size will
fill the additional space with randomly set values (random bits for binary
strings, random alleles for arrays). Previously the new space was not
explicitly set.
<LI>Changed bin2dec phenotype object to use short ints rather than ints for
keeping track of number of bits. Fixed a bug in the Bin2DecPhenotype copy
method that used delete nbits rather than delete [] nbits when allocating more
space for a phenotype.
<LI>Fixed bug in the Population/Scaling interaction that caused the scaling
object to evaluate itself too often. Batch replacements of individuals caused
a recalculation on each replacement rather than at then end of all the
replacements.
<LI>Fixed a bug in the 1DArray2PtCrossSite and 1DBinStr2PtCrossSite objects
that caused errors in the 1DArray2PtCrossover and 1DBinStr2PtCrossover methods
when used on resizable genomes.
<LI>Fixed a bug in the GAListPartialMatchCrossover operator. The bug caused
unnecessary clipping of the last node whether the crossover site was just
before or after the last node. The behaviour now is to treat a site beyond the
last node as if it were just after the last node.
<LI>Some of the Array crossover operators (partial match and order) copied the
mother's crossover site during crossover. This has been fixed so that
crossover operators modify the crossover site only if the crossover site was
not set a priori.
<LI>Put in code for SRS, SUS, and DS selection methods; also code for cycle
and order crossover for array and list genome types (I forgot to put it in the
distribution version of the library. oops!)
<LI>Fixed the copy method in the array genome. The previous version did not
copy the allele set, so copy initializer didn't work properly in the 1D, 2D,
and 3D arrays.
<LI>Fixed bug in population copy operator that didn't copy the population's
user data or GA.
<LI>Fixed a typo in the utilities header file that shows up as a syntax error
when NO_RANDOM is defined.
<LI>Fixed a couple of lines of code that did assignments in 'if' conditional
statements. There was no bug, but some compilers complained.
<LI>Added routines to the test code (not part of the standard distribution) to
exercise the crossover methods more consistently.
<LI>Added links in the documentation for backward compatibility. The
documentation for older versions of the library will stay on the http server
indefinitely (starting with 2.3.0). I will continue to update the
documentation and make it more useable, but the changes will be regulated so
that the documentation changes with official code releases.
<LI>Removed all of the RCS Log comments from the distribution sources and
headers so the distribution wouldn't be so big. </LI></UL><STRONG>Changes in
version 2.3</STRONG><BR><I>released 30 May 1995</I><BR><A
href="http://lancet.mit.edu/ga/API230.html">programming interface</A><BR>
<UL>
<LI>The GA creators have changed. They now take only the minimum arguments
needed to create a GA (this is in an effort to make deriving new GAs less
convoluted). The GA creators now take only two arguments: a genome and
(optional) a pointer to user data. The objective function can be set using the
objectiveFunction member of the GA object, but it is probably easier to set
the objective function on the individual that you pass to the GA.
<LI>Changed the behaviour of the overlapping population object. There are now
3 basic GA types in the library: GASimpleGA, GASteadyStateGA, and
GAReplacementGA. GASimpleGA is Goldberg's non-overlapping genetic algorithm
with optional elitism. GASteadyStateGA allows you to define the amount of
overlapping that you want from generation to generation. At most it will
replace the entire population, at least it allows replacement of a single
individual. GAReplacementGA replaces one or two individuals each "generation"
and allows you to specify a replacement scheme.
<LI>The signature for the objective function has changed. It is now
<CODE>typedef float (*GAObjectiveFunction)(GAGenome &);</CODE> rather than
<CODE>typedef float (*GAObjectiveFunction)(GA &, GAChromosome &, void
*);</CODE> This should make it easier to write test routines for your
objective functions (you won't have to instantiate a GA to test an objective
function that does not use the GA argument). If you need to use the GA in the
objective function you can get it using the geneticAlgorithm member of the
genome. Also, we had to remove the user data argument to get rid of he
abiguity about which user data is being passed (see next item).
<LI>Major change to user data usage. Previously the user data member of the GA
was the same as that of each chromosome. Now each genome can have a unique
user data structure. And the user data structure of the GA can be different
than that of any of the chromosomes. If you want to use the user data element
in the objective function, you must now explicitly extract it from either the
GA or the chromsome. (Note that there is no long a user data pointer in the
objective function signature.) The population object now has its own user data
member as well.
<LI>The genome score is now accessed through the 'score' member function -
'evaluate' no longer exists. You can set the score on a chromosome by passing
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -