Commit 80302dde authored by kruger's avatar kruger
Browse files

Nouvelle Version avec Version CUDA Memetic

parent d3b11d7c
...@@ -29,6 +29,7 @@ Centre de Math ...@@ -29,6 +29,7 @@ Centre de Math
#define CUDA_FLAVOR_MO 1 #define CUDA_FLAVOR_MO 1
#define CUDA_FLAVOR_CMAES 2 #define CUDA_FLAVOR_CMAES 2
#define CUDA_FLAVOR_GP 3 #define CUDA_FLAVOR_GP 3
#define CUDA_FLAVOR_MEMETIC 4
#define UNIX 1 #define UNIX 1
......
...@@ -73,7 +73,7 @@ Centre de Math ...@@ -73,7 +73,7 @@ Centre de Math
%start GENOME_ANALYSIS TEMPLATE_ANALYSIS MACRO_IDENTIFIER MACRO_DEFINITION %start GENOME_ANALYSIS TEMPLATE_ANALYSIS MACRO_IDENTIFIER MACRO_DEFINITION
%start COPY_USER_DECLARATIONS COPY_INITIALISATION_FUNCTION ANALYSE_USER_CLASSES %start COPY_USER_DECLARATIONS COPY_INITIALISATION_FUNCTION ANALYSE_USER_CLASSES
%start COPY_EO_INITIALISER %start COPY_EO_INITIALISER
%start COPY COPY_INITIALISER COPY_CROSSOVER COPY_MUTATOR COPY_EVALUATOR COPY_FINALIZATION_FUNCTION COPY_OPTIMISER %start COPY COPY_INITIALISER COPY_CROSSOVER COPY_MUTATOR COPY_EVALUATOR COPY_OPTIMISER COPY_FINALIZATION_FUNCTION
%start COPY_DISPLAY COPY_USER_FUNCTION COPY_USER_GENERATION PARAMETERS_ANALYSIS GET_PARAMETERS %start COPY_DISPLAY COPY_USER_FUNCTION COPY_USER_GENERATION PARAMETERS_ANALYSIS GET_PARAMETERS
%start COPY_USER_FUNCTIONS COPY_GENERATION_FUNCTION_BEFORE_REPLACEMENT GET_METHODS COPY_MAKEFILE_OPTION COPY_BOUND_CHECKING_FUNCTION COPY_BEG_GENERATION_FUNCTION COPY_END_GENERATION_FUNCTION COPY_INSTEAD_EVAL %start COPY_USER_FUNCTIONS COPY_GENERATION_FUNCTION_BEFORE_REPLACEMENT GET_METHODS COPY_MAKEFILE_OPTION COPY_BOUND_CHECKING_FUNCTION COPY_BEG_GENERATION_FUNCTION COPY_END_GENERATION_FUNCTION COPY_INSTEAD_EVAL
...@@ -398,6 +398,23 @@ exponent ([Ee][+-]?[0-9]+) ...@@ -398,6 +398,23 @@ exponent ([Ee][+-]?[0-9]+)
} }
} }
<TEMPLATE_ANALYSIS>"\\COPY_CUDA_CTOR" {
CListItem<CSymbol*> *pSym;
if (bVERBOSE) printf ("Creating default copy constructor.\n");
fprintf (fpOutputFile,"// Memberwise copy\n");
pGENOME->pSymbolList->reset();
while (pSym=pGENOME->pSymbolList->walkToNextItem()){
if (pSym->Object->ObjectQualifier==1) continue; // 1=Static
if (pSym->Object->ObjectType==oObject)
fprintf(fpOutputFile," dest->%s=src->%s;\n",pSym->Object->sName,pSym->Object->sName);
if (pSym->Object->ObjectType==oArray){
fprintf(fpOutputFile," {for(int EASEA_Ndx=0; EASEA_Ndx<%d; EASEA_Ndx++)\n",pSym->Object->nSize/pSym->Object->pType->nSize);
fprintf(fpOutputFile," dest->%s[EASEA_Ndx]=src->%s[EASEA_Ndx];}\n",pSym->Object->sName,pSym->Object->sName);
}
}
}
<TEMPLATE_ANALYSIS>"\\GENOME_DTOR" { <TEMPLATE_ANALYSIS>"\\GENOME_DTOR" {
CListItem<CSymbol*> *pSym; CListItem<CSymbol*> *pSym;
if (bVERBOSE) printf ("Creating default destructor.\n"); if (bVERBOSE) printf ("Creating default destructor.\n");
...@@ -552,9 +569,9 @@ exponent ([Ee][+-]?[0-9]+) ...@@ -552,9 +569,9 @@ exponent ([Ee][+-]?[0-9]+)
<TEMPLATE_ANALYSIS>"\\INSERT_OPTIMISER" { <TEMPLATE_ANALYSIS>"\\INSERT_OPTIMISER" {
yyreset(); yyreset();
yyin = fpGenomeFile; // switch to .ez file and analyser yyin = fpGenomeFile; // switch to .ez file and analyser
lineCounter=1;
BEGIN COPY_OPTIMISER; BEGIN COPY_OPTIMISER;
} }
<TEMPLATE_ANALYSIS>"\\INSERT_CUDA_EVALUATOR" { <TEMPLATE_ANALYSIS>"\\INSERT_CUDA_EVALUATOR" {
yyreset(); yyreset();
yyin = fpGenomeFile; // switch to .ez file and analyser yyin = fpGenomeFile; // switch to .ez file and analyser
...@@ -562,6 +579,13 @@ exponent ([Ee][+-]?[0-9]+) ...@@ -562,6 +579,13 @@ exponent ([Ee][+-]?[0-9]+)
lineCounter=1; lineCounter=1;
BEGIN COPY_EVALUATOR; BEGIN COPY_EVALUATOR;
} }
<TEMPLATE_ANALYSIS>"\\INSERT_CUDA_OPTIMISOR" {
yyreset();
yyin = fpGenomeFile; // switch to .ez file and analyser
bWithinCUDA_Evaluator = 1;
lineCounter=1;
BEGIN COPY_OPTIMISER;
}
<TEMPLATE_ANALYSIS>"\\ANALYSE_PARAMETERS" { <TEMPLATE_ANALYSIS>"\\ANALYSE_PARAMETERS" {
yyreset(); yyreset();
...@@ -1368,7 +1392,8 @@ if(OPERATING_SYSTEM=WINDOWS) ...@@ -1368,7 +1392,8 @@ if(OPERATING_SYSTEM=WINDOWS)
fprintf(fpOutputFile,"#line %d \"%s.ez\"\n",lineCounter, sRAW_PROJECT_NAME); fprintf(fpOutputFile,"#line %d \"%s.ez\"\n",lineCounter, sRAW_PROJECT_NAME);
return USER_OPTIMISER; return USER_OPTIMISER;
} }
<COPY_OPTIMISER>.|\n {lineCounter++;} <COPY_OPTIMISER>. {}
<COPY_OPTIMISER>\n {lineCounter++;}
//**************************************** //****************************************
// Basic copy to .cpp file with major changes // Basic copy to .cpp file with major changes
...@@ -1530,7 +1555,7 @@ if(OPERATING_SYSTEM=WINDOWS) ...@@ -1530,7 +1555,7 @@ if(OPERATING_SYSTEM=WINDOWS)
// takes care of C++-like comments // takes care of C++-like comments
<COPY_USER_FUNCTION>\/\/[^\n]* {fprintf(fpOutputFile,yytext);} // blah blah on a line containing sth else <COPY_USER_FUNCTION>\/\/[^\n]* {fprintf(fpOutputFile,yytext);} // blah blah on a line containing sth else
<COPY_USER_FUNCTION>^[ \t]*\/\/[^\n]*\n {fprintf(fpOutputFile,yytext);} // blah blah on its own on a single line <COPY_USER_FUNCTION>^[ \t]*\/\/[^\n]*\n {fprintf(fpOutputFile,yytext);} // blah blah on its own on a single line
<COPY_USER_FUNCTION>\/\*[^\*]*\*\/ {fprintf(fpOutputFile,yytext);} /* blah blah on a line containing sth else */ <COPY_USER_FUNCTION>\/\*[^\*]*\*\/\n {fprintf(fpOutputFile,yytext);printf("%s\n",yytext);} /* blah blah on a line containing sth else */
<COPY_USER_FUNCTION>^[ \t]*\/\*[^\*]*\*\/[ \t]*\n {fprintf(fpOutputFile,yytext);} /* blah blah with nothing before the comment */ <COPY_USER_FUNCTION>^[ \t]*\/\*[^\*]*\*\/[ \t]*\n {fprintf(fpOutputFile,yytext);} /* blah blah with nothing before the comment */
<COPY_USER_FUNCTION>"GenomeClass" { <COPY_USER_FUNCTION>"GenomeClass" {
...@@ -1555,7 +1580,7 @@ if(OPERATING_SYSTEM=WINDOWS) ...@@ -1555,7 +1580,7 @@ if(OPERATING_SYSTEM=WINDOWS)
<COPY_USER_FUNCTION>"initOpts." { <COPY_USER_FUNCTION>"initOpts." {
if( (bWithinEvaluator && !bWithinCUDA_Evaluator) && ( TARGET==STD || TARGET==CUDA )){ if( ((bWithinEvaluator || bWithinOptimiser) && !bWithinCUDA_Evaluator) && ( TARGET==STD || TARGET==CUDA )){
fprintf(fpOutputFile,""); fprintf(fpOutputFile,"");
} }
else else
...@@ -1844,6 +1869,8 @@ int CEASEALexer::create(CEASEAParser* pParser, CSymbolTable* pSymTable) ...@@ -1844,6 +1869,8 @@ int CEASEALexer::create(CEASEAParser* pParser, CSymbolTable* pSymTable)
strcat(sTemp,"CUDA.tpl"); strcat(sTemp,"CUDA.tpl");
else if(TARGET_FLAVOR == CUDA_FLAVOR_CMAES ) else if(TARGET_FLAVOR == CUDA_FLAVOR_CMAES )
strcat(sTemp,"CMAES_CUDA.tpl"); strcat(sTemp,"CMAES_CUDA.tpl");
else if(TARGET_FLAVOR == CUDA_FLAVOR_MEMETIC )
strcat(sTemp,"CUDA_MEM.tpl");
else else
strcat(sTemp,"CUDA_MO.tpl"); strcat(sTemp,"CUDA_MO.tpl");
......
...@@ -448,15 +448,11 @@ StandardFunctionAnalysis ...@@ -448,15 +448,11 @@ StandardFunctionAnalysis
| USER_EVALUATOR { | USER_EVALUATOR {
if (bVERBOSE) printf("Inserting user genome evaluator (taken from .ez file).\n"); if (bVERBOSE) printf("Inserting user genome evaluator (taken from .ez file).\n");
} }
END_OF_FUNCTION { END_OF_FUNCTION {}
if (TARGET!=CUDA && TARGET!=STD) fprintf(fpOutputFile,"}\n");
}
| USER_OPTIMISER { | USER_OPTIMISER {
if (bVERBOSE) printf("Inserting user genome optimiser (taken from .ez file).\n"); if (bVERBOSE) printf("Inserting user genome optimiser (taken from .ez file).\n");
} }
END_OF_FUNCTION { END_OF_FUNCTION {}
if (TARGET!=CUDA && TARGET!=STD) fprintf(fpOutputFile,"}\n");
}
| MAKEFILE_OPTION END_OF_FUNCTION { | MAKEFILE_OPTION END_OF_FUNCTION {
//DEBUG_PRT("User makefile options have been reduced"); //DEBUG_PRT("User makefile options have been reduced");
} }
...@@ -682,7 +678,6 @@ int main(int argc, char *argv[]){ ...@@ -682,7 +678,6 @@ int main(int argc, char *argv[]){
TARGET=STD; TARGET=STD;
TARGET_FLAVOR = CUDA_FLAVOR_GP; TARGET_FLAVOR = CUDA_FLAVOR_GP;
} }
else if (!mystricmp(sTemp,"std")) { else if (!mystricmp(sTemp,"std")) {
TARGET=STD; TARGET=STD;
TARGET_FLAVOR = STD_FLAVOR_SO; TARGET_FLAVOR = STD_FLAVOR_SO;
...@@ -703,7 +698,10 @@ int main(int argc, char *argv[]){ ...@@ -703,7 +698,10 @@ int main(int argc, char *argv[]){
TARGET=STD; TARGET=STD;
TARGET_FLAVOR = STD_FLAVOR_MEMETIC; TARGET_FLAVOR = STD_FLAVOR_MEMETIC;
} }
else if (!mystricmp(sTemp,"memetic_cuda")) {
TARGET=CUDA;
TARGET_FLAVOR = CUDA_FLAVOR_MEMETIC;
}
else if (!mystricmp(sTemp,"v")) bVERBOSE=true; else if (!mystricmp(sTemp,"v")) bVERBOSE=true;
else if (!mystricmp(sTemp,"tl")){ else if (!mystricmp(sTemp,"tl")){
......
...@@ -146,10 +146,12 @@ return NbMut; ...@@ -146,10 +146,12 @@ return NbMut;
\end \end
\GenomeClass::optimiser : // Optimises the Genome \GenomeClass::optimiser : // Optimises the Genome
for(int i=0; i<SIZE; i++){ /*for(int i=0; i<SIZE; i++){
if(random(0.,1.)<0.2) if(random(0.,1.)<0.2)
Genome.x[i]+=0.1; Genome.x[i]+=0.1;
} }*/
float pas = .01;
Genome.x[currentIteration%SIZE]+=pas;
\end \end
\User Makefile options: \User Makefile options:
......
...@@ -67,13 +67,13 @@ public: ...@@ -67,13 +67,13 @@ public:
void evaluatePopulation(CIndividual** population, size_t populationSize); void evaluatePopulation(CIndividual** population, size_t populationSize);
virtual void optimisePopulation(CIndividual** population, size_t populationSize); virtual void optimisePopulation(CIndividual** population, size_t populationSize);
virtual void evaluateParentPopulation(); virtual void evaluateParentPopulation();
void optimiseParentPopulation(); virtual void optimiseParentPopulation();
void strongElitism(size_t elitismSize, CIndividual** population, size_t populationSize, CIndividual** outPopulation, size_t outPopulationSize); void strongElitism(size_t elitismSize, CIndividual** population, size_t populationSize, CIndividual** outPopulation, size_t outPopulationSize);
void weakElitism(size_t elitismSize, CIndividual** parentsPopulation, CIndividual** offspringPopulation, size_t* parentPopSize, size_t* offPopSize, CIndividual** outPopulation, size_t outPopulationSize); void weakElitism(size_t elitismSize, CIndividual** parentsPopulation, CIndividual** offspringPopulation, size_t* parentPopSize, size_t* offPopSize, CIndividual** outPopulation, size_t outPopulationSize);
virtual void evaluateOffspringPopulation(); virtual void evaluateOffspringPopulation();
void optimiseOffspringPopulation(); virtual void optimiseOffspringPopulation();
CIndividual** reducePopulations(CIndividual** population, size_t populationSize, CIndividual** reducePopulations(CIndividual** population, size_t populationSize,
CIndividual** reducedPopulation, size_t obSize); CIndividual** reducedPopulation, size_t obSize);
CIndividual** reduceParentPopulation(size_t obSize); CIndividual** reduceParentPopulation(size_t obSize);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment