int main(int argc, char *args[]) { int n = 8; cerr << "argc:"<<argc<<endl; if(argc!=n){ hyperdatasetUsage(args[0]); exit(1); } int rands = 0; rands = atoi(args[1]); if(rands!=0) srand(rands); else{ rands = time(0); srand(rands); cout << "ny seed: " << rands << endl; } //1. load the example file NEATsettings * s = new NEATsettings(); ifstream ifs(args[2],ios::in); ifs>>s; ifs.close(); //2. generate the pop TransferFunctions * tfs = new TransferFunctions(s); Population * pop = makePopulation(args[3],s,tfs); //3. then the selector Selector * sel = makeSelector(args[4]); int g = atoi(args[5]); int iter = atoi(args[6]); string dfile = args[7]; DataSet * set = new DataSet(false,dfile,0.0); FitnessEvaluator * de = new DatasetHyperNEAT(s,tfs,set); Evaluator * ev = new Evaluator(de); LocalReproducer * rp = new LocalReproducer(); int gc = 0; double sum=0; double sum2=0; double sum3=0; Phenotype * cbest = NULL; Phenotype * sbest = NULL; Phenotype * best = NULL; int osize=pop->getMembers()->size(); int ss=0; double ocomp=0; time_t startt; double timesum = 0; for(int i2=0;i2<iter;i2++){ gc = 0; best = NULL; startt = time(0); for(int i=0;i<g;i++){ gc++; // cout << "before eval.." << endl; ev->evaluate(pop->getMembers(),pop->getMembers()->size()); // cout << "after eval.." << endl; if((unsigned int)pop->getOriginalSize()!=pop->getMembers()->size()) cout << "size not right after eval.." << endl; ss=pop->getSpecies()->size(); // cout << "before pop juggling.." << endl; pop->updateSpeciesStats(); pop->sortmembers(); pop->sortspecies(); cbest = pop->getCopyOfCurrentBest(); de->f(cbest); // cout << "before best juggling.." << endl; if(best==NULL){ best = cbest; }else if(cbest->getFitness()>best->getFitness()){ delete best; best = cbest; }else{ delete cbest; } // cout << "after best juggling.." << endl; cout << "gen: "<<i<<" best: " << best->getFitness() << "worst: " << pop->getMembers()->at(pop->getMembers()->size()-1)->getFitness() << endl; if(((DatasetHyperNEAT*)de)->done(best)){ i = g; // cout << best; ((DatasetHyperNEAT*)de)->runTest(best); } // cout << "after xor testing.." << endl; sel->select(pop,0); rp->reproduce(pop); // cout << "after select and reproduce.." << endl; } if(sbest==NULL) sbest = best; else if(best->getFitness()>sbest->getFitness()) sbest = best; time_t ft = time(0)-startt; timesum += ft; cout << "run: "<<i2+1<<" gc: "<<gc<<" maxfitness: " << pop->getHighestFitness() << " sbest fitness: " << sbest->getFitness() << " species: " << ss << " time: " << ft << " time/gen: " << (double)ft/(double)gc << endl; sum += gc; sum2 += best->getGenome()->extrons(); sum3 += best->getGenome()->countHidden(); if(i2!=iter){ if(pop->getOriginalSeed()!=NULL){ Genome * oseed = pop->getOriginalSeed(); int oelitism = pop->getOriginalInitialElitism(); ocomp = pop->getOcomp(); delete pop; pop = new Population(s,ocomp,tfs); // oseed->setTfs(pop->getTfs()); pop->genesis(oseed,osize,oelitism); }else{ pop->resetSpawn(); } } } ((DatasetHyperNEAT*)de)->runTest(sbest); cout << ((DatasetHyperNEAT*)de)->output(sbest); }