BUG scoreFilename???

Jan Braun Jan.Braun at zerberus.escape.de
Thu Jun 11 05:00:26 EDT 1998


Good morning,

(please answear me with a Cc, because I didn't even get a copy of my
own recent submissions :-()

I'm having problems with the scorefilename()-function.  This is my
code in complete:
//
// @(#) rastrigin -- testing the genetic-algorithms with a difficiult function
//

//
// Time-stamp:  <Thu Jun 11 08:46:22 1998 -- Jan Braun>
//


/* ======================================================== &Includes === */
#include <stdio.h>		// Std- Ein- und Ausgabe
#include <iostream>		// Ausgabe in Stršmen
#include <fstream>		// Ausgabe in Dateien
#include <math.h>		// Mathefunktionen fŸr Sinus, ...
#include <ga/ga.h>		// Die Mutterklasse aller GA-Klassen 
#include <ga/GARealGenome.h>	// Die Header-Datei fŸr Real-Zahlen
#include <ga/GARealGenome.C>	// Wichtig fŸr die Instanzierung der
				// Templates.
#include <ga/GAPopulation.h>	// Bevšlkerungsdetails
#include "rastrigin.h"		// Die Header zu diesem Programm.

using namespace std;




/* ============================================================ &Code === */

// ------------------------------------------------------------ &main ---
int main(int argc, char ** argv)
{
  ofstream outfile;
  
  // ......................................................... GAReal ...
  GARealAlleleSetArray allele;	// Liste mit den Genen anlegen.
  allele.add(X_MIN, X_MAX);	// Wertebereich des einen Genes festlegen
  allele.add(Y_MIN, Y_MAX);	// Wertebereich des anderen Genes festlegen.
  GARealGenome genome(allele, Objective); // Aus den Allelen und der
					  // Fitnessfunktion wird ein Genom!

  GASimpleGA ga(genome);	// Bei dem Algorithmus handelt es sich
				// um einen einfachen GA, der auf die
				// Genome angewandt wird.


  ga.populationSize(250);	// Anzahl der Indiviuen in einem Jahrgang
  ga.nGenerations(250);		// Anzahl der zu berechnenden Generationen
  ga.pMutation(0.01);		// Mutations-Wahrscheinlichkeit
  ga.pCrossover(0.9);		// Crossover-Wahrscheinlichkeit
  ga.scoreFilename("rastrigin.score"); // Filename der Datei, in die die
  ga.selectScores(GAStatistics::Minimum | GAStatistics::Maximum);// alles wichtige soll
				// Ergebnisse geschrieben werden sollen.
  ga.nBestGenomes(10);		// die besten 10 sollen Ÿbernommen werden.
  ga.scoreFrequency(1);		// Die Ergebnisse sollen fŸr _jede_
				// Generation geschrieben werden.
  ga.flushFrequency(10);	// nach 10 Generationen soll in die
				// Datei geschrieben werden.
					   // notiert werden.
  ga.parameters(argc, argv, gaTrue); // Anweisungen aus der
				     // Kommandozeile Ÿbernehmen.

  
  /* Jetzt geht es richtig los!  */
  ga.initialize();
  // Optimierung auf den kleinsten Fitnesswert.
  ga.population().order(GAPopulation::LOW_IS_BEST);
  
  /* Ausgabe der ersten Bevšlkerung in eine Datei! */
  cerr << "printing initial population to file ..." << endl;
  outfile.open("pop_1.dat", (ios::out | ios::trunc));
  // FŸr jedes Individuum einmal
  for(int ii=0; ii<ga.population().size(); ii++)
    {
      genome = ga.population().individual(ii);
      outfile << genome.gene(0) << "\t"
	      << genome.gene(1) << "\t"
	      << genome.score() << "\n";
  }
  outfile << endl;
  /* Fertig  */
  outfile.close();


  /* Solange wir nicht fertig sind, wird berechnet.  */
  while(!ga.done()) ga.step();

  
  /* Die Ergebnisse werden wieder in eine Datei ausgegeben.  */

  /* Ausgabe der ersten Bevšlkerung in eine Datei! */
  cerr << "printing final population to file ... " << endl;
  outfile.open("pop_2.dat", (ios::out | ios::trunc));
  // FŸr jedes Individuum einmal
  for(int ii=0; ii<ga.population().size(); ii++)
    {
      genome = ga.population().individual(ii);
      outfile << genome.gene(0) << "\t"
	      << genome.gene(1) << "\t"
	      << genome.score() << "\n";
  }
  outfile << endl;
  /* Fertig  */
  outfile.close();

  // Ausgabe des Siegers!
  cout << "the ga generated:\t" << ga.statistics().bestIndividual() << endl
       << "Date can be found in file \"" << ga.scoreFilename() << "\"" << endl;
  return(0);
  

} /* main() */




// ------------------------------------------------------- &Objective ---
float Objective(GAGenome& g)
{
  
  GARealGenome& genome = (GARealGenome &)g;
  double x = genome.gene(0);
  double y = genome.gene(1);
  
  return(20 + (x*x - 10 * cos (2 * PI * x)) +
	    (y*y -10 * cos(2 * PI * y))
	    );
  
} /* Objective()  */


/* ============================================================= &EOF === */

But instead of file "rastrigin.score" I get something like:
  -rw-r--r--   1 jb       users        4769 Jun 11 10:48 ¹@¹@
  -rw-r--r--   1 jb       users        4827 Jun 11 10:47 €@€@n.score

(funny, isn't it?).

I tried some commandline-switches and with with some popsize the
problem did not occur, but that was not reliable.

Has anybody else had this kind of problem?

I'm looking forward to read you

	Jan






More information about the galib mailing list