📄 galib revision history.htm
字号:
<UL>
<LI>Project files are (finally) available for metrowerks and borland
compilers. Others will appear as I get them.
<LI>Fixed the constructors for 2D and 3D array allele genomes so that you can
construct them with allele set arrays as well as allele sets. You must define
your own initializer to take advantage of the allele set arrays, however
(initialization using the default initializer will ignore the additional
allele sets).
<LI>Fixed a problem with ios::out and other stream flags in the statistics and
parameters modules. If your compiler is ANSI standard and uses the STL streams
then you may need to use the NO_STREAMS directive to turn off the streams in
GAlib (GAlib is not yet STL-streams compliant).
<LI>Added blend crossover (BLX) and arithmetic crossover for real number
genomes. An implementation of the edge recombination crossover (ERX) for list
genomes is included in two of the examples (for the travelling salesman
problems).
<LI>A new revision, Revision B, of the PostScript documentation.
<LI>Fixed a problem in the statistics object that caused it to record the
wrong scores when minimizing the objective.
<LI>Fixed the scaling, statistics, and population objects to handle large
objective scores properly (scores that are near FLT_MAX and/or FLT_MIN).
<LI>Major cleanup of the MacOS and DOS/Windows versions of GAlib. Installation
is an order of magnitude easier.
<LI>Added a graphic travelling salesman example (graphic examples are only
available for unix versions - Mac and PC versions will come as soon as I have
the basic code to do graphic display and rudimentary GUI on those platforms).
<LI>Fixed the simple genetic algorithm class to do elitism properly when
minimizing.
<LI>Added virtual destructors to the Node and NodeBASE classes so that derived
node classes will work properly.
<LI>Fixed the formating problems in the DOS/Windows package, including both
the end-of-line characters and the GIF images. </LI></UL><STRONG>Changes in
version 2.4</STRONG><BR><I>released 3 June 1996</I><BR>
<UL>
<LI>The base genetic algorithm class, 'GA', was renamed to
'GAGeneticAlgorithm'
<LI>Function prototypes for genome operators are now defined in the genome
scope. Similarly, function prototypes for genetic algorithm and population
object operators are defined in their respective scopes.
<LI>The 'score' member of the genome can now be used on const genomes.
<LI>The documentation is now distributed with GAlib. The documentation now
contains a page illustrating how to define your own operators and derive your
own GAlib-based classes.
<LI>GAlib now compiles warning-free when you use the -Wall flag for the g++
compiler. The number of warnings when compiled with Borland, Metrowerks, and
Symantec compilers has also been reduced (although Borland still won't let you
inline for, while, or switch statements).
<LI>The config.h header file now figures out as much as possible about your
system so that you should not have to tweak it nearly as much as in previous
releases.
<LI>GASUSSelector was renamed to GAUniformSelector
<LI>The GASharing object has been reworked to better match the description of
scaling proposed by Goldberg. It now lets you select both the sigma cutoff and
alpha values for tuning the scaling radius and importance.
<LI>The steady-state genetic algorithm will now work properly with the sharing
method of fitness scaling (although Goldberg typically refers to sharing in
the context of non-overlapping populations, you can use it with overlapping
populations if you do the replacement right).
<LI>GAlib works with PVM 3.3.10 or later. This release of GAlib includes
examples that show how to use GAlib with PVM for two types of parallelization:
(1) one genome per process/CPU and (2) one population per process/CPU. I'm
also considering an MPI example (if only there were stable C++ bindings for
PVM and MPI).
<LI>Parallel populations on a single CPU are now possible using the island
model with migration rates and (custom) replacement between populations. Each
population can have its own selection and replacement methods, independent of
the other populations. By default all populations are clones of each other
(same initialization, mutation, crossover, selection, replacement). The
parallel populations are evolved using steady-state genetic algorithm model
with user-specified overlap, etc. This is illustrated in one of the examples.
<LI>Default and built-in operators are now defined as static member function
of the genome classes with which they are associated. This cleans up the
namespace quite a bit.
<LI>Template classes now have default operators whereever they can be defined
- no more ARRAY_TYPE or LIST_TYPE.
<LI>The genome files have been consolidated. Rather than a bunch of files
(typically 6) for each genome, the library uses a single pair (.h and .C) for
each genome. For example, binstr1.[ch|xs|op].[C|h] is now simply
binstr1.[C|h].
<LI>Genomes now contain an 'evaluation data' object. This is a pointer to an
object derived from the EvalData class. Its purpose is to provide a mechanism
for storing custom information with each genome. The userData member is
similar in function, but whereas the userData object is the same for all
genomes, the evalData object may be different for each genome. (the evalData
object supercedes the 'ObjectiveVector')
<LI>The ArrayGenome class has been restructured as ArrayGenome and
ArrayAlleleGenome (derived from ArrayGenome). The library includes
instantiations of char and double versions of the ArrayAlleleGenome class to
form the StringGenome and RealGenome classes. The RealGenome class provides a
mechanism for doing an array of bounded real numbers and/or sets of real
numbers. Sample uniform and gaussian mutator are included for the RealGenome
class.
<LI>A new compile-time flag, NO_STREAMS, has been added to let you compile-out
the GAlib dependencies on the streams library. When you compile-out the
streams dependencies you cannot use the default GAlib routines for reading
from and writing to file, but the error routines will still work properly.
<LI>Error handling has been improved a little. Error messages are now sent to
a GAlib error message handler. You can override the library's error handler to
redirect (or ignore) the messages as you see fit.
<LI>A converter architecture has been added to the binary string objects.
GAlib contains two default converters: Gray and Binary encode/decode. You can
use either of these or define your own for mapping decimal values into the
binary strings. The binary-to-decimal conversions now support more bits - up
to 128 (depending on the system you're running on).
<LI>The statistics object has been cleaned up and more statistics have been
added. GAs can now flush stats periodically to file or on-demand, and the
types of stats that get recorded can be controlled. The interface for
recording scores, score buffering, and flushing to file has been revamped.
<LI>The parameters object has been completely overhauled. It can now read from
the command line and/or a settings file using (user definable) strings to set
the GA parameters. Since each GA contains a parameters object, these
capabilities have also been extended to the GA classes.
<LI>The base genome class has been cleaned up. In particular, the clone method
and dimension enums have been declared in the genome scope to reduce namespace
clutter. Also changed are the read/write member functions. They have been
renamed (no underscore) and return an integer status. The crossover interface
is completely different (see below). Now each genome contains a crossover hint
that suggests to a GA how it should mate. By default, the GAs use this
information to do the crossovers, but a custom GA can ignore the suggested
crossover and do its own mating if it wants to. The equal/not equal members
are now public and the underscore has been removed.
<LI>A compare member function has been added to the genome class. This member
function (customizable) provides a mechanism for measuring the diversity of a
population.
<LI>The CrossSite object no longer exists. A new member function, 'crossover',
and two access functions, 'sexual' and 'asexual', have taken its place. The
crossover function operates on one or two children, so the site information is
no longer stored with each genome. The new interface also defines a mechanism
for doing asexual reproduction, so it is easier now to implement GAs that use
this kind of mating. You can also define crossovers that operate on genomes
with mixed data types (this will require a special GA, but you can derive that
from one of the standard GA objects then modify the crossover part).
<LI>The allele set now does reference counting. This allows you to define an
allele set in a scope other than the scope in which the genome(s) is defined.
It also reduces overhead - each genome does not need to keep its own copy of
the allele set.
<LI>Binary-to-decimal phenotypes now do reference counting. Like the allele
sets, phenotypes are needed by many genomes. But there's too much overhead to
require each genome to keep its own copy of the phenotype. So now you can
create a single phenotype (for your prototype genome) and subsequent clones of
your genome will refer to the same phenotype, even if it goes out of scope.
<LI>A new object, BoundsSet, has been defined to work with the bounded array
genome types. It behaves much like an allele set.
<LI>The constants for tree and list return codes have been rolled into their
respective objects to reduce namespace clutter.
<LI>Genome comparators now return 0 for identical genomes and greater than 0
for completely different genomes. This makes better lexical sense: as the
diversity decreases, so does the absolute measure. Notice that previous
versions of GAlib expected the opposite measure.
<LI>I made a number of changes to typedef names to make things more
consistent. These changes include:
<UL>
<LI>'GAInitializationOperator' is now 'GAGenome::Initializer'
<LI>'GAMutationOperator' is now 'GAGenome::Mutator'
<LI>'GADistanceFunction' is now 'GAGenome::Comparator' </LI></UL>
<LI>Changed name of 'GAReplacementGA' to 'GAIncrementalGA'. The functionality
of this genetic algorithm type has not changed.
<LI>Changed the name of 'types.h' to 'gatypes.h' to avoid conflicts with the
system types.h file on many platforms.
<LI>The selection function is now a member of the population object. The
signature has not changed, and the selection function is still custimizable,
but now housekeeping of population statistics is much more uniform and less
convoluted. This also allows you to define a different selection method for
each of the populations when using multiple populations.
<LI>Fixed the bug in the population copy method. The bug caused the population
to clone the worst individual multiple times rather than cloning each
individual in the population. The patch is descibed in the <A
href="http://lancet.mit.edu/ga/Bugs.html">bugs</A> page.
<LI>Changing the population size during an evolution now works without the
extra call to evaluate. Fixed the bug in the scaling object that prevented the
updates after initialization. The patch is descibed in the <A
href="http://lancet.mit.edu/ga/Bugs.html">bugs</A> page.
<LI>Lots of minor const-correctness tweaks and cleanup of the code, plus fixes
of all reported bugs. The new version is marginally faster than the previous.
<LI>Older versions of the library had problems when objects used by other
objects went out of scope. For example, if you created a genome using an
allele set then left the scope in which the allele set was active, the genome
would refer to garbage. These inconsistencies have been fixed. Objects now
make copies of the objects they need, but make no more copies than necessary.
There's a whole lot of reference counting and caching going on now.
</LI></UL><STRONG>Changes in version 2.3.2</STRONG><BR><I>released 21 September
1995</I><BR><A href="http://lancet.mit.edu/ga/API232.html">programming
interface</A><BR>
<UL>
<LI>Added Borland makefile and project files for the DOS distribution (in a
projects directory) and a Metrowerks library project file and examples project
stationary file for the Mac distribution (in a projects directory).
<LI>Made the replacement method for SteadyStateGA customizable in the same
manner as the ReplacementGA. You can now specify gaReplaceBest,
gaReplaceWorst, gaReplaceRandom, or gaReplaceCustom (or crowding) for the
SteadyState GA. gaReplaceParent still only works with the ReplacementGA. Fixed
a bug in the ReplacementGA that prevented some custom replacement schemes from
working properly.
<LI>Added the TAIL flag for doing inserts on lists. Now you can specify that a
new node should be inserted at the tail of the list directly instead of
popping down the list to the tail then doing your insert.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -