Commit 541b0b9d authored by Joseph Pallamidessi's avatar Joseph Pallamidessi

Clean a bit the directories and the compiler have its own

parent 2c92732c
...@@ -28,12 +28,12 @@ FILE(GLOB boost_src boost/*.cpp) ...@@ -28,12 +28,12 @@ FILE(GLOB boost_src boost/*.cpp)
ADD_LIBRARY( program_options STATIC ${boost_src} ) ADD_LIBRARY( program_options STATIC ${boost_src} )
SET_TARGET_PROPERTIES(program_options PROPERTIES OUTPUT_NAME "program_options" PREFIX "" COMPILE_FLAGS "-O2") SET_TARGET_PROPERTIES(program_options PROPERTIES OUTPUT_NAME "program_options" PREFIX "" COMPILE_FLAGS "-O2")
#Easea compiler
SET(easea_src SET(easea_src
EaseaLex.cpp compiler/EaseaLex.cpp
EaseaParse.cpp compiler/EaseaParse.cpp
EaseaSym.cpp compiler/EaseaSym.cpp
EaseaYTools.cpp) compiler/EaseaYTools.cpp)
ADD_EXECUTABLE(easea ${easea_src}) ADD_EXECUTABLE(easea ${easea_src})
......
UNAME := $(shell uname) UNAME := $(shell uname)
ifeq ($(shell uname -o 2>/dev/null),Msys) ifeq ($(shell uname -o 2>/dev/null),Msys)
OS := MINGW OS := MINGW
endif endif
EXEC = bin/easea EXEC = bin/easea
CPPFLAGS += -DUNIX_OS -Ialexyacc/include/ -g -Wno-deprecated -DDEBUG -DLINE_NUM_EZ_FILE CPPFLAGS += -DUNIX_OS -Ialexyacc/include/ -g -Wno-deprecated -DDEBUG -DLINE_NUM_EZ_FILE
LDFLAGS = LDFLAGS =
OBJ= build/EaseaSym.o build/EaseaParse.o build/EaseaLex.o alexyacc/libalex.a build/EaseaYTools.o boost/program_options.a libeasea/libeasea.a OBJ= build/EaseaSym.o build/EaseaParse.o build/EaseaLex.o alexyacc/libalex.a build/EaseaYTools.o boost/program_options.a libeasea/libeasea.a
#ifeq ($(UNAME),Darwin) #ifeq ($(UNAME),Darwin)
$(EXEC):build bin $(OBJ) $(EXEC):build bin $(OBJ)
$(CXX) $(CPPFLAGS) $(LDFLAGS) $(OBJ) -o $@ $(CXX) $(CPPFLAGS) $(LDFLAGS) $(OBJ) -o $@
ifneq ("$(OS)","") ifneq ("$(OS)","")
# #
# Congratulations ! It looks like you compiled EASEA successfully. # Congratulations ! It looks like you compiled EASEA successfully.
# #
# You can use easea from this directory by typing : # You can use easea from this directory by typing :
# For example : # For example :
# easea.exe examples\weierstrass_std\weierstrass.ez # easea.exe examples\weierstrass_std\weierstrass.ez
# Go to the target directory and type make -f weierstrass.mak # Go to the target directory and type make -f weierstrass.mak
# #
# Thanks for using EASEA. # Thanks for using EASEA.
# #
else else
# #
# Congratulations ! It looks like you compiled EASEA successfully. # Congratulations ! It looks like you compiled EASEA successfully.
# #
# You can now install easea into your system or use it from # You can now install easea into your system or use it from
# its current directory. # its current directory.
# #
# System Installation (you need admnistration rights): # Installation:
# EASEA will be installed into /usr/local/easea/ directory, # To install EASEA into your system, type:
# including, the binary, its libraries and the templates. # ". install.sh ".
# Finally, environment variables will be updated (EZ_PATH and PATH), # EASEA will be installed into /usr/local/easea/ directory,
ifeq ($(UNAME),Darwin) # including, the binary, its libraries and the templates.
# into your .bash_profile file. # Finaly, environment variables will be updated (EZ_PATH and PATH),
else ifeq ($(UNAME),Darwin)
# into your .bashrc file. # into your .bash_profile file.
endif else
# To install EASEA into your system, type: # into your .bashrc file.
# "source install.sh " endif
# #
# Local Usage: # Local Usage:
# All EASEA elements will stay in the current directory, # All EASEA elements will stay in the current directory,
# but some environment variables need to be updated into your # but some environment variables need to be updated into your
ifeq ($(UNAME),Darwin) ifeq ($(UNAME),Darwin)
# .bash_profile file (EZ_PATH). To do so type: # .bash_profile file (EZ_PATH and). To do so type:
else else
# .bashrc file (EZ_PATH). To do so type: # .bashrc file (EZ_PATH and). To do so type:
endif endif
# "source install.sh local" # ". install.sh local".
# #
# Thanks for using EASEA. # Thanks for using EASEA.
# #
endif endif
# $(EXEC):EaseaSym.o EaseaParse.o EaseaLex.o alexyacc/libalex.so # $(EXEC):EaseaSym.o EaseaParse.o EaseaLex.o alexyacc/libalex.so
# $(CXX) $(CPPFLAGS) $(LDFLAGS) $^ -o $@ # $(CXX) $(CPPFLAGS) $(LDFLAGS) $^ -o $@
# $(EXEC)_bin:EaseaSym.o EaseaParse.o EaseaLex.o # $(EXEC)_bin:EaseaSym.o EaseaParse.o EaseaLex.o
# $(CXX) $(CPPFLAGS) $(LDFLAGS) $^ -o $@ -lalex # $(CXX) $(CPPFLAGS) $(LDFLAGS) $^ -o $@ -lalex
install: install:
mkdir -p /usr/local/easea/ /usr/local/easea/bin /usr/local/easea/tpl /usr/local/easea/libeasea/include /usr/local/easea/boost /usr/local/easea/easeagrapher/ mkdir -p /usr/local/easea/ /usr/local/easea/bin /usr/local/easea/tpl /usr/local/easea/libeasea/include /usr/local/easea/boost /usr/local/easea/easeagrapher/
cp bin/easea /usr/local/easea/bin/ cp bin/easea /usr/local/easea/bin/
cp tpl/* /usr/local/easea/tpl/ cp tpl/* /usr/local/easea/tpl/
cp libeasea/include/* /usr/local/easea/libeasea/include/ cp libeasea/include/* /usr/local/easea/libeasea/include/
cp libeasea/libeasea.a /usr/local/easea/libeasea/ cp libeasea/libeasea.a /usr/local/easea/libeasea/
cp boost/program_options.a /usr/local/easea/boost cp boost/program_options.a /usr/local/easea/boost
cp -r boost/boost/ /usr/local/easea/boost/boost/ cp -r boost/boost/ /usr/local/easea/boost/boost/
cp easeagrapher/EaseaGrapher.jar /usr/local/easea/easeagrapher/ cp easeagrapher/EaseaGrapher.jar /usr/local/easea/easeagrapher/
build: build:
@test -d build || mkdir build || echo "Cannot make dir build" @test -d build || mkdir build || echo "Cannot make dir build"
bin: bin:
@test -d bin || mkdir bin || echo "Cannot make dir bin" @test -d bin || mkdir bin || echo "Cannot make dir bin"
build/EaseaParse.o: EaseaParse.cpp EaseaLex.cpp build/EaseaParse.o: compiler/EaseaParse.cpp compiler/EaseaLex.cpp
$(CXX) $(CPPFLAGS) $< -o $@ -c -w $(CXX) $(CPPFLAGS) $< -o $@ -c -w
build/EaseaLex.o: EaseaLex.cpp build/EaseaLex.o: compiler/EaseaLex.cpp
$(CXX) $(CPPFLAGS) $< -o $@ -c -w $(CXX) $(CPPFLAGS) $< -o $@ -c -w
build/%.o:%.cpp build/%.o:compiler/%.cpp
$(CXX) $(CPPFLAGS) -c -o $@ $< $(CXX) $(CPPFLAGS) -c -o $@ $<
#compile library for alex and ayacc unix version #compile library for alex and ayacc unix version
alexyacc/libalex.so:alexyacc/*.cpp alexyacc/libalex.so:alexyacc/*.cpp
cd alexyacc && make libalex.so cd alexyacc && make libalex.so
alexyacc/libalex.a:alexyacc/*.cpp alexyacc/libalex.a:alexyacc/*.cpp
cd alexyacc && make libalex.a cd alexyacc && make libalex.a
#ifeq ($(UNAME),Darwin) #ifeq ($(UNAME),Darwin)
boost/program_options.a:boost/*.cpp boost/program_options.a:boost/*.cpp
cd boost && make program_options.a cd boost && make program_options.a
#endif #OS #endif #OS
#compile libeasea #compile libeasea
libeasea/libeasea.a:libeasea/*.cpp libeasea/libeasea.a:libeasea/*.cpp
cd libeasea && make libeasea.a cd libeasea && make libeasea.a
clean: clean:
rm -f build/*.o $(EXEC) $(EXEC)_bin rm -f build/*.o $(EXEC) $(EXEC)_bin
cd alexyacc && make clean cd alexyacc && make clean
cd libeasea && make clean cd libeasea && make clean
cd boost && make clean cd boost && make clean
#ifeq ($(UNAME),Darwin) #ifeq ($(UNAME),Darwin)
cd boost && make clean cd boost && make clean
#endif #endif
#install:$(EXEC) #install:$(EXEC)
# sudo cp $< /usr/bin/dev-easea # sudo cp $< /usr/bin/dev-easea
#ifeq ($(UNAME),Linux) #ifeq ($(UNAME),Linux)
#realclean: clean #realclean: clean
# rm -f EaseaParse.cpp EaseaParse.h EaseaLex.cpp EaseaLex.h # rm -f EaseaParse.cpp EaseaParse.h EaseaLex.cpp EaseaLex.h
# AT commented these lines, because they imply the presence of wine + programs in a specific location # AT commented these lines, because they imply the presence of wine + programs in a specific location
#EaseaParse.cpp: EaseaParse.y #EaseaParse.cpp: EaseaParse.y
# wine ~/.wine/drive_c/Program\ Files/Parser\ Generator/BIN/ayacc.exe $< -Tcpp -d # wine ~/.wine/drive_c/Program\ Files/Parser\ Generator/BIN/ayacc.exe $< -Tcpp -d
#EaseaLex.cpp: EaseaLex.l #EaseaLex.cpp: EaseaLex.l
# wine ~/.wine/drive_c/Program\ Files/Parser\ Generator/BIN/ALex.exe $< -Tcpp -i # wine ~/.wine/drive_c/Program\ Files/Parser\ Generator/BIN/ALex.exe $< -Tcpp -i
#endif #endif
...@@ -81,8 +81,10 @@ bin: ...@@ -81,8 +81,10 @@ bin:
build/EaseaParse.o: EaseaParse.cpp EaseaLex.cpp build/EaseaParse.o: EaseaParse.cpp EaseaLex.cpp
cd compiler
$(CXX) $(CPPFLAGS) $< -o $@ -c -w $(CXX) $(CPPFLAGS) $< -o $@ -c -w
build/EaseaLex.o: EaseaLex.cpp build/EaseaLex.o: EaseaLex.cpp
cd compiler
$(CXX) $(CPPFLAGS) $< -o $@ -c -w $(CXX) $(CPPFLAGS) $< -o $@ -c -w
......
...@@ -2423,7 +2423,7 @@ int CEASEALexer::create(CEASEAParser* pParser, CSymbolTable* pSymTable) ...@@ -2423,7 +2423,7 @@ int CEASEALexer::create(CEASEAParser* pParser, CSymbolTable* pSymTable)
if (bVERBOSE) { if (bVERBOSE) {
printf("\n "); printf("\n ");
printf("\n E A S E A (v1.1)"); printf("\n E A S E A (v1.0.3)");
printf("\n ___________________ "); printf("\n ___________________ ");
printf("\n "); printf("\n ");
printf("\n Stochastic Optimisation and Nature Inspired Computing"); printf("\n Stochastic Optimisation and Nature Inspired Computing");
......
...@@ -8,76 +8,89 @@ ...@@ -8,76 +8,89 @@
#ifndef CCMAES_H_ #ifndef CCMAES_H_
#define CCMAES_H_ #define CCMAES_H_
#include "define.h" #include "define.h"
/**
* \class Caleatoire
* \brief Random generator for CMA-ES
* \details Randomness using Gaussian or Uniform distribution
*
**/
class Caleatoire class Caleatoire
{ {
public: public:
/* Variables for Uniform() */ /* Variables for Uniform() */
long int startseed; long int startseed;
long int aktseed; long int aktseed;
long int aktalea; long int aktalea;
long int rgalea[32]; long int rgalea[32];
/* Variables for Gauss() */ /* Variables for Gauss() */
short flgstored; short flgstored;
double hold; double hold;
public: public:
long alea_Start(long unsigned inseed); long alea_Start(long unsigned inseed);
long alea_init(long unsigned inseed); long alea_init(long unsigned inseed);
double alea_Gauss(); double alea_Gauss();
double alea_Uniform(); double alea_Uniform();
}; };
/**
* \class CCmaes
* \brief Covariance Matrix Adaptation Evolution Strategy
* \details Is set before entering the main evolutionary loop
*
**/
class CCmaes{ class CCmaes{
//random_t rand; /* random number generator */ //random_t rand; /* random number generator */
public: public:
int dim; int dim;
double sigma; /* step size */ double sigma; /* step size */
double *rgxmean; /* mean x vector, "parent" */ double *rgxmean; /* mean x vector, "parent" */
double chiN; double chiN;
double **C; /* lower triangular matrix: i>=j for C[i][j] */ double **C; /* lower triangular matrix: i>=j for C[i][j] */
double **B; /* matrix with normalize eigenvectors in columns */ double **B; /* matrix with normalize eigenvectors in columns */
double *rgD; /* axis lengths */ double *rgD; /* axis lengths */
double *rgpc; double *rgpc;
double *rgps; double *rgps;
double *rgxold; double *rgxold;
double *rgout; double *rgout;
double *rgBDz; /* for B*D*z */ double *rgBDz; /* for B*D*z */
double *rgdTmp; /* temporary (random) vector used in different places */ double *rgdTmp; /* temporary (random) vector used in different places */
short flgEigensysIsUptodate; short flgEigensysIsUptodate;
short flgCheckEigen; /* control via signals.par */ short flgCheckEigen; /* control via signals.par */
double genOfEigensysUpdate; double genOfEigensysUpdate;
short flgIniphase;
int lambda; /* -> mu, <- N */
int mu; /* -> weights, (lambda) */
double mucov, mueff; /* <- weights */
double *weights; /* <- mu, -> mueff, mucov, ccov */
double damps; /* <- cs, maxeval, lambda */
double cs; /* -> damps, <- N */
double ccumcov; /* <- N */
double ccov; /* <- mucov, <- N */
int gen;
short flgIniphase; double * xstart;
double * typicalX;
int lambda; /* -> mu, <- N */ int typicalXcase;
int mu; /* -> weights, (lambda) */ double * rgInitialStds;
double mucov, mueff; /* <- weights */ double * rgDiffMinChange;
double *weights; /* <- mu, -> mueff, mucov, ccov */
double damps; /* <- cs, maxeval, lambda */
double cs; /* -> damps, <- N */
double ccumcov; /* <- N */
double ccov; /* <- mucov, <- N */
int gen;
double * xstart; struct { int flgalways; double modulo; double maxtime; } updateCmode;
double * typicalX; double facupdateCmode;
int typicalXcase;
double * rgInitialStds;
double * rgDiffMinChange;
struct { int flgalways; double modulo; double maxtime; } updateCmode; Caleatoire alea; /* random number generator */
double facupdateCmode; int seed;
public:
Caleatoire alea; /* random number generator */ CCmaes(int lambda, int mu, int problemdim);
int seed; ~CCmaes();
public: void cmaes_update(double **popparent, double *fitness);
CCmaes(int lambda, int mu, int problemdim); void Cmaes_init_param(int lambda, int mu);
~CCmaes(); void TestMinStdDevs();
void cmaes_update(double **popparent, double *fitness); void cmaes_UpdateEigensystem(int flgforce);
void Cmaes_init_param(int lambda, int mu); void Adapt_C2(int hsig, double **parents);
void TestMinStdDevs();
void cmaes_UpdateEigensystem(int flgforce);
void Adapt_C2(int hsig, double **parents);
}; };
int Check_Eigen(int taille, double **C, double *diag, double **Q); int Check_Eigen(int taille, double **C, double *diag, double **Q);
......
...@@ -8,76 +8,91 @@ ...@@ -8,76 +8,91 @@
#ifndef CCMAES_H_ #ifndef CCMAES_H_
#define CCMAES_H_ #define CCMAES_H_
#include "define.h" #include "define.h"
/**
* \class CaleatoireCuda
* \brief Random generator for CMA-ES CUDA
* \details Randomness using Gaussian or Uniform distribution.CUDA version of
* class Caleatoire.
*
**/
class CaleatoireCuda class CaleatoireCuda
{ {
public: public:
/* Variables for Uniform() */ /* Variables for Uniform() */
long int startseed; long int startseed;
long int aktseed; long int aktseed;
long int aktalea; long int aktalea;
long int rgalea[32]; long int rgalea[32];
/* Variables for Gauss() */ /* Variables for Gauss() */
short flgstored; short flgstored;
float hold; float hold;
public: public:
long alea_Start(long unsigned inseed); long alea_Start(long unsigned inseed);
long alea_init(long unsigned inseed); long alea_init(long unsigned inseed);
float alea_Gauss(); float alea_Gauss();
float alea_Uniform(); float alea_Uniform();
}; };
/**
* \class CCmaesCuda
* \brief Covariance Matrix Adaptation Evolution Strategy for CUDA
* \details Is set before entering the main evolutionary loop. CUDA version of
* class CCmaes
*
**/
class CCmaesCuda{ class CCmaesCuda{
//random_t rand; /* random number generator */ //random_t rand; /* random number generator */
public: public:
int dim; int dim;
float sigma; /* step size */ float sigma; /* step size */
float *rgxmean; /* mean x vector, "parent" */ float *rgxmean; /* mean x vector, "parent" */
float chiN; float chiN;
float **C; /* lower triangular matrix: i>=j for C[i][j] */ float **C; /* lower triangular matrix: i>=j for C[i][j] */
float **B; /* matrix with normalize eigenvectors in columns */ float **B; /* matrix with normalize eigenvectors in columns */
float *rgD; /* axis lengths */ float *rgD; /* axis lengths */
float *rgpc; float *rgpc;
float *rgps; float *rgps;
float *rgxold; float *rgxold;
float *rgout; float *rgout;
float *rgBDz; /* for B*D*z */ float *rgBDz; /* for B*D*z */
float *rgdTmp; /* temporary (random) vector used in different places */ float *rgdTmp; /* temporary (random) vector used in different places */
short flgEigensysIsUptodate; short flgEigensysIsUptodate;
short flgCheckEigen; /* control via signals.par */ short flgCheckEigen; /* control via signals.par */
float genOfEigensysUpdate; float genOfEigensysUpdate;
short flgIniphase;
int lambda; /* -> mu, <- N */
int mu; /* -> weights, (lambda) */
float mucov, mueff; /* <- weights */
float *weights; /* <- mu, -> mueff, mucov, ccov */
float damps; /* <- cs, maxeval, lambda */
float cs; /* -> damps, <- N */
float ccumcov; /* <- N */
float ccov; /* <- mucov, <- N */
int gen;
short flgIniphase; float * xstart;
float * typicalX;
int lambda; /* -> mu, <- N */ int typicalXcase;
int mu; /* -> weights, (lambda) */ float * rgInitialStds;
float mucov, mueff; /* <- weights */ float * rgDiffMinChange;
float *weights; /* <- mu, -> mueff, mucov, ccov */
float damps; /* <- cs, maxeval, lambda */
float cs; /* -> damps, <- N */
float ccumcov; /* <- N */
float ccov; /* <- mucov, <- N */
int gen;
float * xstart; struct { int flgalways; float modulo; float maxtime; } updateCmode;
float * typicalX; float facupdateCmode;
int typicalXcase;
float * rgInitialStds;
float * rgDiffMinChange;
struct { int flgalways; float modulo; float maxtime; } updateCmode; CaleatoireCuda alea; /* random number generator */
float facupdateCmode; int seed;
public:
CaleatoireCuda alea; /* random number generator */ CCmaesCuda(int lambda, int mu, int problemdim);
int seed; ~CCmaesCuda();
public: void cmaes_update(float **popparent, float *fitness);
CCmaesCuda(int lambda, int mu, int problemdim); void Cmaes_init_param(int lambda, int mu);
~CCmaesCuda(); void TestMinStdDevs();
void cmaes_update(float **popparent, float *fitness); void cmaes_UpdateEigensystem(int flgforce);
void Cmaes_init_param(int lambda, int mu); void Adapt_C2(int hsig, float **parents);
void TestMinStdDevs();
void cmaes_UpdateEigensystem(int flgforce);
void Adapt_C2(int hsig, float **parents);
}; };
int Check_Eigen(int taille, float **C, float *diag, float **Q); int Check_Eigen(int taille, float **C, float *diag, float **Q);
......
/**
* @file CGPNode.h
* @version 1.0
*
**/
#ifndef __C_GPNODE__ #ifndef __C_GPNODE__
#define __C_GPNODE__ #define __C_GPNODE__
...@@ -7,76 +13,100 @@ using namespace std; ...@@ -7,76 +13,100 @@ using namespace std;
#define MAX_ARITY 2 // maximum arrity for GP node #define MAX_ARITY 2 // maximum arrity for GP node
/**
* \class GPNode
* \brief Genetic Programming
* \details Used to modelised nodes of abstract syntax tree
*
**/
class GPNode { class GPNode {
public: public:
GPNode(){ // Constructor GPNode(){ // Constructor
for(int EASEA_Ndx=0; EASEA_Ndx<2; EASEA_Ndx++) for(int EASEA_Ndx=0; EASEA_Ndx<2; EASEA_Ndx++)
children[EASEA_Ndx]=NULL; children[EASEA_Ndx]=NULL;
} }
GPNode(int var_id, double erc_value, char opCode, GPNode** childrenToAdd) : var_id(var_id), erc_value(erc_value), opCode(opCode)// other constructor GPNode(int var_id, double erc_value, char opCode, GPNode** childrenToAdd) : var_id(var_id), erc_value(erc_value), opCode(opCode)// other constructor
{ {
for(int EASEA_Ndx=0; EASEA_Ndx<2; EASEA_Ndx++) for(int EASEA_Ndx=0; EASEA_Ndx<2; EASEA_Ndx++)
this->children[EASEA_Ndx]=childrenToAdd[EASEA_Ndx]; this->children[EASEA_Ndx]=childrenToAdd[EASEA_Ndx];
} }
GPNode(const GPNode &EASEA_Var) { // Copy constructor
var_id=EASEA_Var.var_id; GPNode(const GPNode &EASEA_Var) { // Copy constructor
erc_value=EASEA_Var.erc_value; var_id=EASEA_Var.var_id;
//arity=EASEA_Var.arity; erc_value=EASEA_Var.erc_value;
opCode=EASEA_Var.opCode; //arity=EASEA_Var.arity;
for(int EASEA_Ndx=0; EASEA_Ndx<2; EASEA_Ndx++) opCode=EASEA_Var.opCode;
for(int EASEA_Ndx=0; EASEA_Ndx<2; EASEA_Ndx++)
if( EASEA_Var.children[EASEA_Ndx] ) children[EASEA_Ndx] = new GPNode(*(EASEA_Var.children[EASEA_Ndx])); if( EASEA_Var.children[EASEA_Ndx] ) children[EASEA_Ndx] = new GPNode(*(EASEA_Var.children[EASEA_Ndx]));
else children[EASEA_Ndx] = NULL; else children[EASEA_Ndx] = NULL;
} }
virtual ~GPNode() { // Destructor
for(int EASEA_Ndx=0; EASEA_Ndx<2; EASEA_Ndx++)
virtual ~GPNode() { // Destructor
for(int EASEA_Ndx=0; EASEA_Ndx<2; EASEA_Ndx++)
if( children[EASEA_Ndx] ) delete children[EASEA_Ndx]; if( children[EASEA_Ndx] ) delete children[EASEA_Ndx];
} }
GPNode& operator=(const GPNode &EASEA_Var) { // Operator=
if (&EASEA_Var == this) return *this;
var_id = EASEA_Var.var_id; GPNode& operator=(const GPNode &EASEA_Var) { // Operator=
erc_value = EASEA_Var.erc_value; if (&EASEA_Var == this) return *this;
//arity = EASEA_Var.arity; var_id = EASEA_Var.var_id;
opCode = EASEA_Var.opCode; erc_value = EASEA_Var.erc_value;
for(int EASEA_Ndx=0; EASEA_Ndx<2; EASEA_Ndx++) //arity = EASEA_Var.arity;
if(EASEA_Var.children[EASEA_Ndx]) children[EASEA_Ndx] = new GPNode(*(EASEA_Var.children[EASEA_Ndx])); opCode = EASEA_Var.opCode;
return *this;
} for(int EASEA_Ndx=0; EASEA_Ndx<2; EASEA_Ndx++)
if(EASEA_Var.children[EASEA_Ndx]) children[EASEA_Ndx] = new GPNode(*(EASEA_Var.children[EASEA_Ndx]));
bool operator==(GPNode &EASEA_Var) const { // Operator==
if (var_id!=EASEA_Var.var_id) return false; return *this;
if (erc_value!=EASEA_Var.erc_value) return false; }
//if (arity!=EASEA_Var.arity) return false;
if (opCode!=EASEA_Var.opCode) return false;
{for(int EASEA_Ndx=0; EASEA_Ndx<2; EASEA_Ndx++) bool operator==(GPNode &EASEA_Var) const { // Operator==
if (children[EASEA_Ndx]!=EASEA_Var.children[EASEA_Ndx]) return false;} if (var_id!=EASEA_Var.var_id) return false;
return true;