📄 api.html
字号:
<html><head><title>GAlib: programming interface</title>
<!-- by matthew wall all rights reserved -->
<!-- Copyright (c) 1995-1996 Massachusetts Institute of Technology -->
<!-- distributed with version 2.4 -->
</head>
<body background="images/CrumpledPaper.gif" bgcolor="dfdfdf" text="000000">
<strong>Programming interface for <a href="GAlib.html">GAlib</a> classes</strong><br>
<i>version 2.4</i>
<p>
This document describes the programming interface for the library. The section for each class contains a description of the object's purpose followed by the creator signature and member functions. There are also sections for library constants, typedefs, and function signatures.
</p>
<p>
see also: <i><a href="Overview.html">library overview</a>, <a href="ClassHierarchy.html">class hierarchy</a>, <a href="Extensions.html">customization</a></i>
</p>
<br>
<big><strong>Table of contents</strong></big><br>
<hr>
<table border=0 cellspacing=0 cellpadding=6>
<tr valign=baseline>
<td width="50%">
<ul>
<p>
<strong>General library information</strong><br>
<li><a href="#typedefs">typedefs and enumerations</a>
<li><a href="#signatures">function prototypes</a>
<li><a href="#constants">globals and default values</a>
<li><a href="#random">random number functions</a>
<li><a href="#errors">error handling</a>
</p>
<p>
<strong>Genetic Algorithm</strong><br>
<li><a href="#ga_base">GA base class</a>
<li><a href="#ga_overlapping">GA with overlapping populations (steady-state)</a>
<li><a href="#ga_non_overlapping">GA with non-overlapping populations (simple)</a>
<li><a href="#ga_incremental">GA with 1 or 2 children per generation (incremental)</a>
<li><a href="#ga_deme">GA with parallel, migrating populations (deme)</a>
</p>
<p>
<li><a href="#defparms">parameters and command-line options</a>
<li><a href="#parameters">parameter list object</a>
<li><a href="#statistics">statistics object</a>
<li><a href="#completion">completion functions</a>
<li><a href="#replacement">replacement schemes</a>
</p>
<p>
<strong>Population, Scaling, and Selection</strong><br>
<li><a href="#pop">population</a>
<li><a href="#selection">selection schemes</a>
<li><a href="#scaling">fitness scaling schemes</a>
</p>
</ul>
</td>
<td width=6></td>
<td width="50%">
<ul>
<p>
<strong>Genomes</strong><br>
<li><a href="#genome_base">genome base class</a>
<li><a href="#genome_1dbinstr">1D binary string genome</a>
<li><a href="#genome_2dbinstr">2D binary string genome</a>
<li><a href="#genome_3dbinstr">3D binary string genome</a>
<li><a href="#genome_bin2dec">binary-to-decimal genome</a>
<li><a href="#genome_1darray">1D array genome</a>
<li><a href="#genome_1darrayallele">1D array genome with alleles</a>
<li><a href="#genome_2darray">2D array genome</a>
<li><a href="#genome_2darrayallele">2D array genome with alleles</a>
<li><a href="#genome_3darray">3D array genome</a>
<li><a href="#genome_3darrayallele">3D array genome with alleles</a>
<li><a href="#genome_string">string genome</a>
<li><a href="#genome_real">real number genome</a>
<li><a href="#genome_list">list genome</a>
<li><a href="#genome_tree">tree genome</a>
</p>
<p>
<li><a href="#phenotype_b2d">binary-to-decimal phenotype</a>
<li><a href="#alleleset">allele set</a>
<li><a href="#evaldata">evaluation data</a>
</p>
<p>
<strong>Data Structures</strong><br>
<li><a href="#binstr">binary string</a>
<li><a href="#array">array</a>
<li><a href="#tree">tree</a>
<li><a href="#list">list</a>
</p>
</ul>
</td></tr>
</table>
<br>
<br>
<br>
<br>
<a name="typedefs">
<big><strong>Global Typedefs and Enumerations</strong></big></a><br>
<hr>
<blockquote>
<pre>
typedef float <b>GAProbability, GAProb</b>
typedef enum <b>_GABoolean</b> {gaFalse, gaTrue} <b>GABoolean</b>, <b>GABool</b>
typedef enum <b>_GAStatus</b> {gaSuccess, gaFailure} <b>GAStatus</b>
typedef unsigned char <b>GABit</b>
</pre>
</blockquote>
<br>
<br>
<br>
<br>
<a name="signatures">
<big><strong>Function Prototypes</strong></big></a><br>
<hr>
<blockquote>
<pre>
GABoolean (*<b>GAGeneticAlgorithm::Terminator</b>)(GAGeneticAlgorithm & ga)
GAGenome& (*<b>GAIncrementalGA::ReplacementFunction</b>)(GAGenome &, GAPopulation &)
void (*<b>GAPopulation::Initializer</b>)(GAPopulation &)
void (*<b>GAPopulation::Evaluator</b>)(GAPopulation &)
void (*<b>GAGenome::Initializer</b>)(GAGenome &)
float (*<b>GAGenome::Evaluator</b>)(GAGenome &)
int (*<b>GAGenome::Mutator</b>)(GAGenome &, float)
float (*<b>GAGenome::Comparator</b>)(const GAGenome &, const GAGenome&)
int (*<b>GAGenome::SexualCrossover</b>)(const GAGenome&, const GAGenome&, GAGenome*, GAGenome*)
int (*<b>GAGenome::AsexualCrossover</b>)(const GAGenome&, GAGenome*)
int (*<b>GABinaryEncoder</b>)(float& value, GABit* bits,
unsigned int nbits, float min, float max)
int (*<b>GABinaryDecoder</b>)(float& value, const GABit* bits,
unsigned int nbits, float min, float max)
</pre>
</blockquote>
<br>
<br>
<br>
<a name="defparms">
<big><strong>Parameter Names and Command-Line Options</strong></big></a><br>
<hr>
<blockquote>
<pre>
#define name full name short name default value
gaNminimaxi minimaxi mm int gaDefMiniMaxi = 1
gaNnGenerations number_of_generations ngen int gaDefNumGen = 250
gaNpConvergence convergence_percentage pconv float gaDefPConv = 0.99
gaNnConvergence generations_to_convergence nconv int gaDefNConv = 20
gaNpCrossover crossover_probability pcross float gaDefPCross = 0.9
gaNpMutation mutation_probability pmut float gaDefPMut = 0.01
gaNpopulationSize population_size popsize int gaDefPopSize = 30
gaNnPopulations number_of_populations npop int gaDefNPop = 10
gaNpReplacement replacement_percentage prepl float gaDefPRepl = 0.25
gaNnReplacement replacement_number nrepl int gaDefNRepl = 5
gaNnBestGenomes number_of_best nbest int gaDefNumBestGenomes = 1
gaNscoreFrequency score_frequency sfreq int gaDefScoreFrequency1 = 1
gaNflushFrequency flush_frequency ffreq int gaDefFlushFrequency = 0
gaNscoreFilename score_filename sfile char* gaDefScoreFilename = "generations.dat"
gaNselectScores select_scores sscores int gaDefSelectScores = GAStatistics::Maximum
gaNelitism elitism el GABoolean gaDefElitism = gaTrue
gaNnOffspring number_of_offspring noffspr int gaDefNumOff = 2
gaNrecordDiversity record_diversity recdiv GABoolean gaDefDivFlag = gaFalse
gaNpMigration migration_percentage pmig float gaDefPMig = 0.1
gaNnMigration migration_number nmig int gaDefNMig = 5
</pre>
<p>
Parameters may be specified using the full name strings (for example in parameter files), short name strings (for example on the command line), or explicit member functions (such as those of the genetic algorithm objects). All of the #defined names are simply the full names declared as #defined strings; you can use either the string (e.g. number_of_generations) or the #defined name (e.g. gaNnGenerations), but if you use the #defined name then the compiler will be able to catch your spelling mistakes.
</p>
<p>
When you specify GAlib arguments on the command line, they must be in name-value pairs. You can use either the long or short name. For example, if my program is called <i>optimizer</i>, the command line for running the program with a population size of 150, mutation rate of 10%, and score filename of evolve.txt would be:
<pre>
optimizer popsize 150 pmut 0.1 sfile evolve.txt
</pre>
</p>
</blockquote>
<br>
<br>
<br>
<br>
<a name="constants">
<big><strong>Global Variables and Global Constants</strong></big></a><br>
<hr>
<blockquote>
<pre>
char* gaErrMsg; // globally defined pointer to current error message
</pre>
<pre>
int gaDefScoreFrequency1 = 1; // for non-overlapping populations
int gaDefScoreFrequency2 = 100; // for overlapping populations
float gaDefLinearScalingMultiplier = 1.2;
float gaDefSigmaTruncationMultiplier = 2.0;
float gaDefPowerScalingFactor = 1.0005;
float gaDefSharingCutoff = 1.0;
</pre>
</blockquote>
<br>
<br>
<br>
<br>
<a name="random">
<big><strong>Random Number Functions</strong></big></a><br>
<hr>
<blockquote>
GAlib includes the following functions for generating random numbers:
<pre>
void <b>GARandomSeed</b>(unsigned s = <i>0</i>)
int <b>GARandomInt</b>()
int <b>GARandomInt</b>(int low, int high)
double <b>GARandomDouble</b>()
double <b>GARandomDouble</b>(double low, double high)
float <b>GARandomFloat</b>()
float <b>GARandomFloat</b>(float low, float high)
int <b>GARandomBit</b>()
GABoolean <b>GAFlipCoin</b>(float p)
int <b>GAGaussianInt</b>(int stddev)
float <b>GAGaussianFloat</b>(float stddev)
double <b>GAGaussianDouble</b>(double stddev)
double <b>GAUnitGaussian</b>()
</pre>
<p>
If you call it with no argument, the GARandomSeed function uses the current time multiplied by the process ID (on systems that have PIDs) as the seed for a psuedo-random number generator. On systems with no process IDs it uses only the time. You can specify your own random seed if you like by passing a value to this function. Once a seed has been specified, subsequent calls to GARandomSeed with the same value have no effect. Subsequent calls to GARandomSeed with a different value will re-initialize the random number generator using the new value.
</p>
<p>
The functions that take low and high as argument return a random number from low to high, <i>inclusive</i>. The functions that take no arguments return a value in the interval [0,1]. GAFlipCoin returns a boolean value based on a biased coin toss. If you give it a value of 1 it will return a 1, if you give it a value of 0.75 it will return a 1 with a 75% chance.
</p>
<p>
The GARandomBit function is the most efficient way to do unbiased coin tosses. It uses the random bit generator described in <a href="http://nr.harvard.edu/nr/bookc.html">Numerical Recipes in C</a>.
</p>
<p>
The Gaussian functions return a random number from a Gaussian distribution with deviation that you specify. The GAUnitGaussian function returns a number from a unit Gaussian distribution with mean 0 and deviation of 1.
</p>
<p>
GAlib uses a single random number generator for the entire library. You may not change the random number generator on the fly - it can be changed only when GAlib is compiled. See the config.h and random.h header files for details. By default, GAlib uses the <i>ran2</i> generator described in <a href="http://nr.harvard.edu/nr/bookc.html">Numerical Recipes in C</a>.
</p>
</blockquote>
<br>
<br>
<br>
<br>
<a name="errors">
<big><strong>Error Handling</strong></big></a><br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -