Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members  

SIG_GPExperiment.cpp

00001 #include "SIGEL_GP/SIG_GPExperiment.h"
00002 
00003 #include <qfile.h>
00004 #include <qtextstream.h>
00005 
00006 #include "SIGEL_Tools/SIG_IO.h"
00007 
00008 #include <pvm3.h>
00009 
00010 SIGEL_GP::SIG_GPExperiment::SIG_GPExperiment(QString exp){};
00011 
00012 SIGEL_GP::SIG_GPExperiment::SIG_GPExperiment()
00013 {
00014   experimentHistory.setAutoDelete( true );
00015 };
00016 
00017 QString SIGEL_GP::SIG_GPExperiment::cutAfterFiveHashes(QTextStream& source)
00018 {
00019   QString fiveHashes( "#####" );
00020   QString bufferString;
00021   QString resultString;
00022 
00023   while ( (bufferString = source.readLine()) != fiveHashes )
00024     resultString += ( bufferString + "\n" );
00025 
00026   return resultString;
00027 };
00028 
00029 void SIGEL_GP::SIG_GPExperiment::loadExperiment(QTextStream & file)
00030 {
00031   QString simParString = cutAfterFiveHashes( file );
00032   QString environmentString = cutAfterFiveHashes( file );
00033   QString gpParameterString = cutAfterFiveHashes( file );
00034   QString populationString = cutAfterFiveHashes( file );
00035   QString robotString = cutAfterFiveHashes( file );
00036   QString experimentHistoryString = cutAfterFiveHashes( file );
00037 
00038   QTextStream simParStream( &simParString, IO_ReadOnly );
00039   QTextStream environmentStream( &environmentString, IO_ReadOnly );
00040   QTextStream gpParameterStream( &gpParameterString, IO_ReadOnly );
00041   QTextStream populationStream( &populationString, IO_ReadOnly );
00042   QTextStream robotStream( &robotString, IO_ReadOnly );
00043   QTextStream experimentHistoryStream( &experimentHistoryString, IO_ReadOnly );
00044 
00045   simulationParameter.readFromFile( simParStream );
00046   environment.readFromFile( environmentStream );
00047   gpParameter.readFromFile( gpParameterStream );
00048   population.readFromFile( populationStream );
00049   robot.readFromFileTransfer( robotStream );
00050   readHistoryFromFileTransfer( experimentHistoryStream );
00051 
00052   comment = file.read();
00053 };
00054 
00055 void SIGEL_GP::SIG_GPExperiment::saveExperiment(QTextStream & file)
00056 {
00057   QString fiveHashesLine("\n#####\n");
00058 
00059   simulationParameter.writeToFile(file);
00060   file << fiveHashesLine;
00061   environment.writeToFile(file);
00062   file << fiveHashesLine;
00063   gpParameter.writeToFile(file);
00064   file << fiveHashesLine;
00065   population.savePool(file);
00066   file << fiveHashesLine;
00067   robot.writeToFileTransfer(file);
00068   file << fiveHashesLine;
00069   writeHistoryToFileTransfer(file);
00070   file << fiveHashesLine;
00071 
00072   file << comment;
00073 };
00074 
00075 
00076 void SIGEL_GP::SIG_GPExperiment::writeHistoryToFileTransfer( QTextStream &file )
00077 {
00078   SIG_GPExperimentHistoryEntry *actEntry = experimentHistory.first();
00079 
00080   while (actEntry)
00081     {
00082       file << actEntry->print();
00083       actEntry = experimentHistory.next();
00084     };
00085 };
00086 
00087 void SIGEL_GP::SIG_GPExperiment::readHistoryFromFileTransfer( QTextStream &file )
00088 {
00089   experimentHistory.clear();
00090 
00091   QString buffer = file.readLine();
00092 
00093   while (!buffer.isEmpty())
00094     {
00095       SIG_GPExperimentHistoryEntry *newEntry = new SIG_GPExperimentHistoryEntry( buffer );
00096 
00097       experimentHistory.append( newEntry );
00098 
00099       buffer = file.readLine();
00100     };
00101 };
00102 
00103 double SIGEL_GP::SIG_GPExperiment::calculateFitness(SIGEL_Program::SIG_Program & program)
00104 {
00105  return 0;
00106 };
00107 
00108 SIGEL_GP::SIG_GPParameter& SIGEL_GP::SIG_GPExperiment::getGPParameter()
00109 { 
00110   return gpParameter;
00111 }
00112 
00113 SIGEL_GP::SIG_GPPopulation& SIGEL_GP::SIG_GPExperiment::getPopulation()
00114 {
00115   return population;
00116 }
00117 
00118 SIGEL_GP::SIG_GPPopulation *SIGEL_GP::SIG_GPExperiment::getPopulationPointer()
00119 {
00120   return &population;
00121 }
00122 
00123 void SIGEL_GP::SIG_GPExperiment::exportExperimentHistoryToGNUPlot( QString fileName )
00124 {
00125   QFile gnuPlotFile( fileName );
00126 
00127   if (gnuPlotFile.open( IO_WriteOnly ))
00128     {
00129       QTextStream gnuPlotStream( &gnuPlotFile );
00130 
00131       SIG_GPExperimentHistoryEntry *actEntry = experimentHistory.first();
00132 
00133       while (actEntry)
00134         {
00135           gnuPlotStream << actEntry->getGenerationNo()
00136                         << " "
00137                         << actEntry->getMaxFitness()
00138                         << " "
00139                         << actEntry->getMinFitness()
00140                         << " "
00141                         << actEntry->getAverageFitness()
00142                         << "\n";
00143 
00144           actEntry = experimentHistory.next();
00145         };
00146 
00147       gnuPlotFile.close();
00148     }
00149   else
00150     SIGEL_Tools::SIG_IO::cerr << "Could not export experiment history under "
00151                               << fileName
00152                               << "!\n";
00153 };

Generated at Mon Sep 3 01:32:22 2001 for PG 368 - SIGEL by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000