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 Strmen
#include <fstream> // Ausgabe in Dateien
#include <math.h> // Mathefunktionen fr Sinus, ...
#include <ga/ga.h> // Die Mutterklasse aller GA-Klassen
#include <ga/GARealGenome.h> // Die Header-Datei fr Real-Zahlen
#include <ga/GARealGenome.C> // Wichtig fr die Instanzierung der
// Templates.
#include <ga/GAPopulation.h> // Bevlkerungsdetails
#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 fr _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 Bevlkerung in eine Datei! */
cerr << "printing initial population to file ..." << endl;
outfile.open("pop_1.dat", (ios::out | ios::trunc));
// Fr 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 Bevlkerung in eine Datei! */
cerr << "printing final population to file ... " << endl;
outfile.open("pop_2.dat", (ios::out | ios::trunc));
// Fr 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