00001 #include "SIGEL_GP/SIG_GPPVMData.h"
00002
00003 #include <qtextstream.h>
00004 #include <pvm3.h>
00005
00006 #include "SIGEL_Tools/SIG_IO.h"
00007
00008 SIGEL_GP::SIG_GPPVMData::SIG_GPPVMData(SIGEL_Robot::SIG_Robot& robot,
00009 SIGEL_Environment::SIG_Environment& environment,
00010 SIGEL_Simulation::SIG_SimulationParameters& simulationParameter,
00011 QString fitnessName,
00012 bool visualize)
00013 : robot(robot),
00014 environment(environment),
00015 simulationParameter(simulationParameter),
00016 fitnessName(fitnessName),
00017 visualize(visualize) {};
00018
00019 SIGEL_GP::SIG_GPPVMData::~SIG_GPPVMData() {};
00020
00021
00022 void SIGEL_GP::SIG_GPPVMData::sendQStringToPVM(QString str, int taskId, int messageId)
00023 {
00024 int finalLength = str.length() + 1;
00025
00026 pvm_initsend(PvmDataDefault);
00027 pvm_pkint(&finalLength,1,1);
00028
00029 QCString qCStringBuffer = str.utf8();
00030 char const *cStringBuffer = qCStringBuffer;
00031 pvm_pkstr( const_cast<char*>( cStringBuffer ) );
00032 pvm_send(taskId, messageId);
00033 };
00034
00035 QString SIGEL_GP::SIG_GPPVMData::getQStringFromPVM(int taskId, int messageId)
00036 {
00037 int length;
00038
00039 pvm_recv(taskId,messageId);
00040 pvm_upkint(&length,1,1);
00041
00042 QArray< char > buffer( length );
00043
00044 pvm_upkstr( buffer.data() );
00045
00046 QString result( buffer.data() );
00047
00048 return result;
00049 };
00050
00051 QString SIGEL_GP::SIG_GPPVMData::cutAfterFiveHashes(QTextStream& source)
00052 {
00053 QString fiveHashes( "#####" );
00054 QString bufferString;
00055 QString resultString;
00056
00057 while ( (bufferString = source.readLine()) != fiveHashes )
00058 resultString += ( bufferString + "\n" );
00059
00060 return resultString;
00061 };
00062
00063 void SIGEL_GP::SIG_GPPVMData::loadPVMDataTransfer(QTextStream & file,
00064 SIGEL_Program::SIG_Program & program)
00065 {
00066 file.precision( 50 );
00067
00068 QString simParString = cutAfterFiveHashes( file );
00069 QString environmentString = cutAfterFiveHashes( file );
00070 QString programString = cutAfterFiveHashes( file );
00071 QString robotString = cutAfterFiveHashes( file );
00072 QString miscString = cutAfterFiveHashes( file );
00073
00074 QTextStream simParStream( &simParString, IO_ReadOnly );
00075 QTextStream environmentStream( &environmentString, IO_ReadOnly );
00076 QTextStream programStream( &programString, IO_ReadOnly );
00077 QTextStream robotStream( &robotString, IO_ReadOnly );
00078 QTextStream miscStream( &miscString, IO_ReadOnly );
00079
00080 simulationParameter.readFromFile( simParStream );
00081 environment.readFromFile( environmentStream );
00082 program.readFromFile( programStream );
00083 robot.readFromFileTransfer( robotStream );
00084
00085 QString bufferString;
00086 bufferString = miscStream.readLine();
00087 bufferString = miscStream.readLine();
00088 fitnessName = bufferString;
00089 bufferString = miscStream.readLine();
00090 bufferString = miscStream.readLine();
00091 int visuInt = bufferString.toInt();
00092 if (visuInt == 1)
00093 visualize=true;
00094 else
00095 visualize=false;
00096 };
00097
00098 void SIGEL_GP::SIG_GPPVMData::savePVMDataTransfer(QTextStream & file,
00099 SIGEL_Program::SIG_Program const &program)
00100 {
00101 file.precision( 50 );
00102
00103 SIGEL_Program::SIG_Program &usedProgram = const_cast< SIGEL_Program::SIG_Program& >(program);
00104
00105 QString fiveHashesLine("\n#####\n");
00106 simulationParameter.writeToFile(file);
00107 file << fiveHashesLine;
00108 environment.writeToFile(file);
00109 file << fiveHashesLine;
00110 usedProgram.writeToFile(file);
00111 file << fiveHashesLine;
00112 robot.writeToFileTransfer(file);
00113 file << fiveHashesLine;
00114 file << "FITNESSNAME\n";
00115 file << fitnessName << "\n";
00116 file << "VISUALIZE\n";
00117 if (visualize)
00118 file << 1 << "\n";
00119 else
00120 file << 0 << "\n";
00121 file << fiveHashesLine;
00122 };
00123
00124 void SIGEL_GP::SIG_GPPVMData::setVisualize(bool visu)
00125 {
00126 visualize=visu;
00127 };
00128
00129 bool SIGEL_GP::SIG_GPPVMData::getVisualize()
00130 {
00131 return visualize;
00132 };
00133
00134 QString SIGEL_GP::SIG_GPPVMData::getFitnessFunctionName()
00135 {
00136 return fitnessName;
00137 };
00138
00139 void SIGEL_GP::SIG_GPPVMData::setFitnessFunctionName( QString name )
00140 {
00141 fitnessName = name;
00142 };