[galib] Problem of partially intializing population
Essam Almasri
masryesam at yahoo.com
Thu Mar 24 05:52:35 EST 2005
Hallo
I have the problem of initial population. I have 30 population size and want to initial only 2 individuals (not all individual) with values, e.g. the firs one is (0.2,0.2) and the second one is (0.1, 0.1); each individual has 2 control variables. How can one do that?. Here is the example, from galib, I try. GABin2DecGenome is used.
/* ----------------------------------------------------------------------------
ex9.C
mbwall 10apr95
Copyright 1995-1996 Massachusetts Institute of Technology
DESCRIPTION:
Sample program that illustrates how to use a GA to find the maximum value
of a continuous function in two variables. This program uses a binary-to-
decimal genome.
---------------------------------------------------------------------------- */
#include <stdio.h>
#include <ga/ga.h>
#include <ga/std_stream.h>
#define cout STD_COUT
float objective(GAGenome &);
int
main(int argc, char **argv)
{
cout << "Example 9\n\n";
cout << "This program finds the maximum value in the function\n";
cout << " y = - x1^2 - x2^2\n";
cout << "with the constraints\n";
cout << " -5 <= x1 <= 5\n";
cout << " -5 <= x2 <= 5\n";
cout << "\n\n"; cout.flush();
// See if we've been given a seed to use (for testing purposes). When you
// specify a random seed, the evolution will be exactly the same each time
// you use that seed number.
unsigned int seed = 0;
for(int i=1; i<argc; i++) {
if(strcmp(argv[i++],"seed") == 0) {
seed = atoi(argv[i]);
}
}
// Declare variables for the GA parameters and set them to some default values.
int popsize = 30;
int ngen = 100;
float pmut = 0.01;
float pcross = 0.6;
// Create a phenotype for two variables. The number of bits you can use to
// represent any number is limited by the type of computer you are using. In
// this case, we use 16 bits to represent a floating point number whose value
// can range from -5 to 5, inclusive. The bounds on x1 and x2 can be applied
// here and/or in the objective function.
GABin2DecPhenotype map;
map.add(16, -5, 5);
map.add(16, -5, 5);
// Create the template genome using the phenotype map we just made.
GABin2DecGenome genome(map, objective);
// Now create the GA using the genome and run it. We'll use sigma truncation
// scaling so that we can handle negative objective scores.
GASimpleGA ga(genome);
GASigmaTruncationScaling scaling;
ga.populationSize(popsize);
ga.nGenerations(ngen);
ga.pMutation(pmut);
ga.pCrossover(pcross);
ga.scaling(scaling);
ga.scoreFilename("bog.dat");
ga.scoreFrequency(10);
ga.flushFrequency(50);
ga.evolve(seed);
// Dump the results of the GA to the screen.
genome = ga.statistics().bestIndividual();
cout << "the ga found an optimum at the point (";
cout << genome.phenotype(0) << ", " << genome.phenotype(1) << ")\n\n";
cout << "best of generation data are in '" << ga.scoreFilename() << "'\n";
return 0;
}
// This objective function tries to maximize the value of the function
//
// y = -(x1*x1 + x2*x2)
//
float
objective(GAGenome & c)
{
GABin2DecGenome & genome = (GABin2DecGenome &)c;
float y;
y = -genome.phenotype(0) * genome.phenotype(0);
y -= genome.phenotype(1) * genome.phenotype(1);
return y;
}
---------------------------------
Do you Yahoo!?
Yahoo! Small Business - Try our new resources site!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.mit.edu/pipermail/galib/attachments/20050324/d31f4225/attachment.htm
More information about the galib
mailing list