⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seed.c

📁 麻省理工开发的免费遗传算法类库GAlib,很好用
💻 C
字号:
/* ----------------------------------------------------------------------------  seed.C  mbwall 16nov98---------------------------------------------------------------------------- */#include <stdio.h>#include <stdlib.h>#include <iostream.h>#include <fstream.h>#include <ga/ga.h>float objective(GAGenome &);intmain(int argc, char *argv[]) {  cout << "Random Seed Test\n\n";  cout << "This program does three runs of a genetic algorithm, with the \n";  cout << "random seed resetting between each run.  Each of the three runs \n";  cout << "should be identical\n\n";  cout.flush();  GAParameterList params;  GASteadyStateGA::registerDefaultParameters(params);  params.set(gaNnGenerations, 100);  params.set(gaNflushFrequency, 5);  params.set(gaNpMutation, 0.001);  params.set(gaNpCrossover, 0.8);  params.parse(argc, argv, gaFalse);  int i,j;  char filename[128] = "smiley.txt";  unsigned int seed=0;  for(i=1; i<argc; i++){    if(strcmp("file", argv[i]) == 0 || strcmp("f", argv[i]) == 0){      if(++i >= argc){        cerr << argv[0] << ": the file option needs a filename.\n";        exit(1);      }      else{        sprintf(filename, argv[i]);        continue;      }    }    else if(strcmp("seed", argv[i]) == 0){      if(++i >= argc){        cerr << argv[0] << ": the seed option needs a filename.\n";        exit(1);      }      else {	seed = atoi(argv[i]);	continue;      }    }    else {      cerr << argv[0] << ":  unrecognized arguement: " << argv[i] << "\n\n";      cerr << "valid arguments include standard GAlib arguments plus:\n";      cerr << "  f\tfilename from which to read (" << filename << ")\n";      cerr << "\n";      exit(1);    }  }  const int n=5;  cout << n << " random numbers\n";  GAResetRNG(seed);  for(i=0; i<n; i++)    cout << " " << GARandomFloat();  cout << "\n";  cout << n << " random numbers\n";  GAResetRNG(seed);  for(i=0; i<n; i++)    cout << " " << GARandomFloat();  cout << "\n";  cout << n << " random numbers\n";  GAResetRNG(seed);  for(i=0; i<n; i++)    cout << " " << GARandomFloat();  cout << "\n";  cout.flush();  ifstream inStream(filename, ios :: in);  if(!inStream){    cerr << "Cannot open " << filename << " for input.\n";    exit(1);  }  int height, width;  inStream >> height >> width;  short **target = new short*[width];  for(i=0; i<width; i++)    target[i] = new short[height];  for(j=0; j<height; j++)    for(i=0; i<width; i++)      inStream >> target[i][j];  inStream.close();  GA2DBinaryStringGenome genome(width, height, objective, (void *)target);  GASimpleGA ga(genome);  ga.parameters(params);  // first run  GAResetRNG(seed);  genome.initialize();  cout << genome << "\n";  ga.set(gaNscoreFilename, "bog1.dat");  ga.evolve();  genome = ga.statistics().bestIndividual();  cout << "run 1:  the random seed is: " << GAGetRandomSeed() << "\n";  for(j=0; j<height; j++){    for(i=0; i<width; i++)      cout << (genome.gene(i,j) == 1 ? '*' : ' ') << " ";    cout << "\n";  }  cout << "\n"; cout.flush();  // second run  GAResetRNG(seed);  genome.initialize();  cout << genome << "\n";  ga.set(gaNscoreFilename, "bog2.dat");  ga.evolve();  genome = ga.statistics().bestIndividual();  cout << "run 2:  the random seed is: " << GAGetRandomSeed() << "\n";  for(j=0; j<height; j++){    for(i=0; i<width; i++)      cout << (genome.gene(i,j) == 1 ? '*' : ' ') << " ";    cout << "\n";  }  cout << "\n"; cout.flush();  // third run  GAResetRNG(seed);  genome.initialize();  cout << genome << "\n";  ga.set(gaNscoreFilename, "bog3.dat");  ga.evolve();  genome = ga.statistics().bestIndividual();  cout << "run 3:  the random seed is: " << GAGetRandomSeed() << "\n";  for(j=0; j<height; j++){    for(i=0; i<width; i++)      cout << (genome.gene(i,j) == 1 ? '*' : ' ') << " ";    cout << "\n";  }  cout << "\n"; cout.flush();  for(i=0; i<width; i++)    delete target[i];  delete [] target;  return 0;} floatobjective(GAGenome & c) {  GA2DBinaryStringGenome & genome = (GA2DBinaryStringGenome &)c;  short **pattern = (short **)c.userData();  float value=0.0;  for(int i=0; i<genome.width(); i++)    for(int j=0; j<genome.height(); j++)      value += (float)(genome.gene(i,j) == pattern[i][j]);  return(value);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -