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 };