[galib] Trying to implement ex26 into pvmind.

Moon Sup Choi totaljj at gmail.com
Fri Dec 8 06:15:54 EST 2006


I put below 2 functions to genome.c from ex26.

void
GenomeInitializer(GAGenome& g) {
GAListGenome<int> &child=(GAListGenome<int> &)g;
  while(child.head()) child.destroy(); // destroy any pre-existing list

  int i,town;
  static int visit[MAX_TOWNS];

  memset(visit, 0, MAX_TOWNS*sizeof(int));
  town=GARandomInt(0,ntowns-1);
  visit[town]=1;
  child.insert(town,GAListBASE::HEAD); // the head node

  for( i=1; i<ntowns; i++) {
    do {
      town=GARandomInt(0,ntowns-1);
    } while (visit[town]);
    visit[town]=1;
    child.insert(town);
  }        // each subsequent node
}


float
GenomeEvaluator(GAGenome& g) {
  GAListGenome<int> & genome = (GAListGenome<int> &)g;
  float dist = 0;
  if(genome.head()) {
    for(int i=0; i<ntowns; i++) {
      int xx = *genome.current();
      int yy = *genome.next();
      dist += DISTANCE[xx][yy];
    }
  }
  return dist;
}

I also added below into genome.c and declared in genome.h.

#define MAX_TOWNS 50
#define TSP_FILE "tsp_rect_20.txt"

float DISTANCE[MAX_TOWNS][MAX_TOWNS];
double x[MAX_TOWNS],y[MAX_TOWNS];
int ntowns = 0;

int   Mutator(GAGenome&, float);
float Comparator(const GAGenome&, const GAGenome&);
int   ERXover(const GAGenome&, const GAGenome&, GAGenome*, GAGenome*);
int   PMXover(const GAGenome&, const GAGenome&, GAGenome*, GAGenome*);
void  ERXOneChild(const GAGenome&, const GAGenome&, GAGenome*);


But aimk returns

g++ master.o -o master -L../. -L../../../ga -L/usr/msc501/pvm3/lib/LINUX
-lpvm3 -lga -lm
master.o(.text+0x5fc): In function `main':
../master.C:161: undefined reference to `GenomeEvaluator(GAGenome&)'
master.o(.text+0x61b): In function `main':
../../../ga/GAGenome.h:243: undefined reference to
`GenomeInitializer(GAGenome&)'
master.o(.text+0x625):../../../ga/GAGenome.h:247: undefined reference to
`Mutator(GAGenome&, float)'master.o(.text+0x62f):../../../ga/GAGenome.h:251:
undefined reference to `Comparator(GAGenome const&, GAGenome const&)'
master.o(.text+0x639):../../../ga/GAGenome.h:253: undefined reference to
`ERXover(GAGenome const&, GAGenome const&, GAGenome*, GAGenome*)'
collect2: ld returned 1 exit status
make: *** [master] Error 1


Global variables and functions declared in genome.h should be accessible by
master and slave as they include genome.h. Shouldn't it?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.mit.edu/pipermail/galib/attachments/20061208/0cabde14/attachment.htm


More information about the galib mailing list