NEAT::GeneticPopulation* AtariNoGeomNoiseExperiment::createInitialPopulation(int populationSize) { GeneticPopulation *population = new GeneticPopulation(); vector<GeneticNodeGene> genes; for (int y=0; y<substrate_height; y++) { for (int x=0; x<substrate_width; x++) { Node node(x, y, 0); genes.push_back(GeneticNodeGene(nameLookup[node],"NetworkSensor",0,false)); } } // Output Layer for (int i=0; i<numActions; i++) { Node node(i, 0, 2); genes.push_back(GeneticNodeGene(nameLookup[node],"NetworkOutputNode",1,false, ACTIVATION_FUNCTION_SIGMOID)); } // Bias node genes.push_back(GeneticNodeGene("Bias","NetworkSensor",0,false)); for (int a=0; a<populationSize; a++) { shared_ptr<GeneticIndividual> individual(new GeneticIndividual(genes,true,1.0)); for (int b=0; b<10; b++) { individual->testMutate(); } population->addIndividual(individual); } cout << "Finished creating population\n"; return population; }
NEAT::GeneticPopulation * ImageExperiment::createInitialPopulation( int populationSize) { cout << "Creating Image Experiment initial population..." << endl; GeneticPopulation *population = new GeneticPopulation(); vector<GeneticNodeGene> genes; genes.push_back(GeneticNodeGene("Bias", "NetworkSensor", 0, false)); genes.push_back(GeneticNodeGene("X", "NetworkSensor", 0, false)); genes.push_back(GeneticNodeGene("Y", "NetworkSensor", 0, false)); //genes.push_back(GeneticNodeGene("Gauss","HiddenNode", 0.5, false, ACTIVATION_FUNCTION_GAUSSIAN)); genes.push_back(GeneticNodeGene("XOUT", "NetworkOutputNode", 1, false, ACTIVATION_FUNCTION_SIGMOID)); genes.push_back(GeneticNodeGene("YOUT", "NetworkOutputNode", 1, false, ACTIVATION_FUNCTION_SIGMOID)); for (int a=0;a<populationSize;a++) { shared_ptr<GeneticIndividual> individual(new GeneticIndividual(genes,true,1.0)); for (int b=0;b<0;b++) { individual->testMutate(); } population->addIndividual(individual); } cout << "Finished creating population\n"; return population; }
NEAT::GeneticPopulation* AtariPixelExperiment::createInitialPopulation(int populationSize) { GeneticPopulation *population = new GeneticPopulation(); vector<GeneticNodeGene> genes; // Input Nodes genes.push_back(GeneticNodeGene("Bias","NetworkSensor",0,false)); // TODO: Check if this helps or not genes.push_back(GeneticNodeGene("X1","NetworkSensor",0,false)); genes.push_back(GeneticNodeGene("Y1","NetworkSensor",0,false)); genes.push_back(GeneticNodeGene("X2","NetworkSensor",0,false)); genes.push_back(GeneticNodeGene("Y2","NetworkSensor",0,false)); // Output Nodes for (int i=0; i<numColors; ++i) { genes.push_back(GeneticNodeGene("Output_Input" + boost::lexical_cast<std::string>(i) + "_Processing", "NetworkOutputNode",1,false, ACTIVATION_FUNCTION_SIGMOID)); } genes.push_back(GeneticNodeGene("Output_Processing_Output","NetworkOutputNode",1,false, ACTIVATION_FUNCTION_SIGMOID)); for (int a=0; a<populationSize; a++) { shared_ptr<GeneticIndividual> individual(new GeneticIndividual(genes,true,1.0)); for (int b=0;b<10;b++) { individual->testMutate(); } population->addIndividual(individual); } cout << "Finished creating population\n"; return population; }
NEAT::GeneticPopulation* XorExperiment::createInitialPopulation(int populationSize) { //Make stdout unbuffered. cliche needs that. //setvbuf (stdout, NULL, _IONBF, 0); GeneticPopulation *population = new GeneticPopulation(); vector<GeneticNodeGene> genes; genes.push_back(GeneticNodeGene("Bias","NetworkSensor",0,false)); genes.push_back(GeneticNodeGene("X1","NetworkSensor",0,false)); genes.push_back(GeneticNodeGene("X2","NetworkSensor",0,false)); genes.push_back(GeneticNodeGene("Output","NetworkOutputNode",1,false,ACTIVATION_FUNCTION_SIGMOID)); for (int a=0;a<populationSize;a++) { shared_ptr<GeneticIndividual> individual(new GeneticIndividual(genes,true,1.0)); for (int b=0;b<0;b++) { individual->testMutate(); } population->addIndividual(individual); } cout << "Finished creating population\n"; return population; }
GeneticPopulation* GoExperiment::createInitialPopulation(int populationSize) { GeneticPopulation *population = new GeneticPopulation(); vector<GeneticNodeGene> genes; genes.push_back(GeneticNodeGene("Bias","NetworkSensor",0,false)); int scalingType = int(NEAT::Globals::getSingleton()->getParameterValue("GoScalingType")+0.1); if( scalingType == GO_SCALING_NONE || scalingType == GO_SCALING_BASIC || scalingType == GO_SCALING_NO_RANGE ) { #if DEBUG_USE_SOURCE_ABSOLUTE genes.push_back(GeneticNodeGene("X1","NetworkSensor",0,false)); genes.push_back(GeneticNodeGene("Y1","NetworkSensor",0,false)); #endif #if DEBUG_USE_ABSOLUTE genes.push_back(GeneticNodeGene("X2","NetworkSensor",0,false)); genes.push_back(GeneticNodeGene("Y2","NetworkSensor",0,false)); #endif } #if DEBUG_USE_DELTAS genes.push_back(GeneticNodeGene("DeltaX","NetworkSensor",0,false)); genes.push_back(GeneticNodeGene("DeltaY","NetworkSensor",0,false)); #endif genes.push_back(GeneticNodeGene("Output_WhitePieces_Processing1","NetworkOutputNode",1,false,ACTIVATION_FUNCTION_SIGMOID)); genes.push_back(GeneticNodeGene("Output_BlackPieces_Processing1","NetworkOutputNode",1,false,ACTIVATION_FUNCTION_SIGMOID)); genes.push_back(GeneticNodeGene("Output_OutOfBounds_Processing1","NetworkOutputNode",1,false,ACTIVATION_FUNCTION_SIGMOID)); genes.push_back(GeneticNodeGene("Output_Processing1_Output","NetworkOutputNode",1,false,ACTIVATION_FUNCTION_SIGMOID)); #if DEBUG_DIRECT_LINKS genes.push_back(GeneticNodeGene("Output_0_4","NetworkOutputNode",1,false,ACTIVATION_FUNCTION_SIGMOID)); genes.push_back(GeneticNodeGene("Output_1_4","NetworkOutputNode",1,false,ACTIVATION_FUNCTION_SIGMOID)); genes.push_back(GeneticNodeGene("Output_2_4","NetworkOutputNode",1,false,ACTIVATION_FUNCTION_SIGMOID)); #endif #if GO_EXPERIMENT_ENABLE_BIASES throw CREATE_LOCATEDEXCEPTION_INFO("NOT IMPLEMENTED"); genes.push_back(GeneticNodeGene("Bias_b","NetworkOutputNode",1,false,ACTIVATION_FUNCTION_SIGMOID)); genes.push_back(GeneticNodeGene("Bias_c","NetworkOutputNode",1,false,ACTIVATION_FUNCTION_SIGMOID)); #endif for (int a=0;a<populationSize;a++) { shared_ptr<GeneticIndividual> individual(new GeneticIndividual(genes,true,1.0)); for (int b=0;b<0;b++) { individual->testMutate(); } population->addIndividual(individual); } cout << "Finished creating population\n"; return population; }
NEAT::GeneticPopulation* CoCheckersExperiment::createInitialPopulation(int populationSize) { GeneticPopulation *population = new GeneticPopulation( shared_ptr<CoCheckersExperiment>((CoCheckersExperiment*)this->clone()) ); vector<GeneticNodeGene> genes; genes.push_back(GeneticNodeGene("Bias","NetworkSensor",0,false)); genes.push_back(GeneticNodeGene("X1","NetworkSensor",0,false)); genes.push_back(GeneticNodeGene("Y1","NetworkSensor",0,false)); genes.push_back(GeneticNodeGene("X2","NetworkSensor",0,false)); genes.push_back(GeneticNodeGene("Y2","NetworkSensor",0,false)); genes.push_back(GeneticNodeGene("DeltaX","NetworkSensor",0,false)); genes.push_back(GeneticNodeGene("DeltaY","NetworkSensor",0,false)); genes.push_back(GeneticNodeGene("Output_ab","NetworkOutputNode",1,false,ACTIVATION_FUNCTION_SIGMOID)); genes.push_back(GeneticNodeGene("Output_bc","NetworkOutputNode",1,false,ACTIVATION_FUNCTION_SIGMOID)); genes.push_back(GeneticNodeGene("Output_ac","NetworkOutputNode",1,false,ACTIVATION_FUNCTION_SIGMOID)); #if CHECKERS_EXPERIMENT_ENABLE_BIASES genes.push_back(GeneticNodeGene("Bias_b","NetworkOutputNode",1,false,ACTIVATION_FUNCTION_SIGMOID)); genes.push_back(GeneticNodeGene("Bias_c","NetworkOutputNode",1,false,ACTIVATION_FUNCTION_SIGMOID)); #endif for (int a=0;a<populationSize;a++) { shared_ptr<GeneticIndividual> individual(new GeneticIndividual(genes,true,1.0)); for (int b=0;b<0;b++) { individual->testMutate(); } population->addIndividual(individual); } shared_ptr<NEAT::CoEvoGeneticGeneration> coEvoGeneration = static_pointer_cast<NEAT::CoEvoGeneticGeneration>(population->getGeneration()); //Create the tests for (int a=0;a<(population->getIndividualCount()/10);a++) { shared_ptr<NEAT::GeneticIndividual> individual(new GeneticIndividual(genes,true,1.0)); //This function clones the individual to make a test coEvoGeneration->addTest(individual); } coEvoGeneration->bootstrap(); cout << "Finished creating population\n"; return population; }
GeneticPopulation* ModNeatExperiment7::createInitialPopulation(int populationSize) { GeneticPopulation *population = new GeneticPopulation(); vector<GeneticNodeGene> genes; // Set-up the CCPPN which encodes the substrate weights ////// CCPPN encoding a 3 layered sandwich substrate's weights // Configuration of the CCPPN's Input layer genes.push_back(GeneticNodeGene("X1", "NetworkSensor", 0, false)); // position on the X axis in the substrate's link start layers genes.push_back(GeneticNodeGene("Y1", "NetworkSensor", 0, false)); // position on the Y axis in the substrate's link start layers genes.push_back(GeneticNodeGene("Z1", "NetworkSensor", 0, false)); // position on the Z axis in the substrate's link start layers genes.push_back(GeneticNodeGene("X2", "NetworkSensor", 0, false)); // position on the X axis in the substrate's link end layers genes.push_back(GeneticNodeGene("Y2", "NetworkSensor", 0, false)); // position on the Y axis in the substrate's link end layers genes.push_back(GeneticNodeGene("Z2", "NetworkSensor", 0, false)); // position on the Z axis in the substrate's link end layers #ifdef USE_BIASES genes.push_back(GeneticNodeGene("Bias", "NetworkSensor", 0, false)); // bias for the CPPN #endif // USE_BIASES #ifdef USE_DELTAS genes.push_back(GeneticNodeGene("DeltaX", "NetworkSensor", 0, false)); // offset between the two nodes on the X axis genes.push_back(GeneticNodeGene("DeltaY", "NetworkSensor", 0, false)); // offset between the two nodes on the Y axis genes.push_back(GeneticNodeGene("DeltaZ", "NetworkSensor", 0, false)); // offset between the two nodes on the Z axis #endif // USE_DELTAS #ifdef MODULAR_HNEAT screen << "Laying out a heterogeneous controller CPPN" << endl; genes.push_back(GeneticNodeGene("T1", "NetworkSensor", 0, false)); // position in the body genes.push_back(GeneticNodeGene("T2", "NetworkSensor", 0, false)); // offset between the two nodes on the Z axis #ifdef USE_DELTAS genes.push_back(GeneticNodeGene("DeltaT", "NetworkSensor", 0, false)); // offset between the two nodes on the Z axis #endif // USE_DELTAS #endif // MODULAR_HNEAT #ifndef MODULAR_HNEAT screen << "Laying out a homogeneous controller CPPN" << endl; #endif // Configuration of the CCPPN's Output layer genes.push_back(GeneticNodeGene("Output", "NetworkOutputNode", 1, false, ACTIVATION_FUNCTION_SIGMOID)); // weight for link between layers A and B #ifdef USE_BIASES genes.push_back(GeneticNodeGene("Bias_out", "NetworkOutputNode", 1, false, ACTIVATION_FUNCTION_SIGMOID)); // bias for the second sandwich layer #endif // USE_BIASES // Create the initial population for (int a = 0; a < populationSize; a++) { shared_ptr<GeneticIndividual> individual(new GeneticIndividual(genes, true, 1.0)); for (int b = 0; b < 0; b++) { individual->testMutate(); } population->addIndividual(individual); } screen << "Finished creating population\n"; // store population and individual size popSize = population->getIndividualCount(); // screen << "\n individual count: " << popSize << "\n"; return population; }
GeneticPopulation* CheckersExperimentSubstrateGeom::createInitialPopulation(int populationSize) { GeneticPopulation *population = new GeneticPopulation(); vector<GeneticNodeGene> genes; vector<GeneticLinkGene> linkGenes; genes.push_back(GeneticNodeGene("Bias","NetworkSensor",0,false)); //Create the input layer int inputStartID=-1; int inputEndID; for (int x=0;x<8;x++) { for (int y=0;y<8;y++) { if ((x+y)%2==0) { Node node(x,y,0); //cout << (y1-numNodesY/2) << '/' << (x1-numNodesX/2) << endl; string name = (toString(x)+string("/")+toString(y) + string("/") + toString(0)); nameLookup[node] = name; genes.push_back(GeneticNodeGene(name,"NetworkSensor",0,false)); genes.back().setTopologyFrozen(true); if(inputStartID==-1) inputStartID = genes.back().getID(); //set inputEndID all the time to ensure we set it to the last one inputEndID = genes.back().getID(); } } } //Create the output layer Node node(0,0,2); //cout << (y1-numNodesY/2) << '/' << (x1-numNodesX/2) << endl; string name = (toString(0)+string("/")+toString(0) + string("/") + toString(2)); nameLookup[node] = name; genes.push_back(GeneticNodeGene(name,"NetworkOutputNode",1,false,ACTIVATION_FUNCTION_SIGMOID)); genes.back().setTopologyFrozen(true); int outputNodeID = genes.back().getID(); //Create the hidden layer for (int x=0;x<8;x++) { for (int y=0;y<8;y++) { Node node(x,y,1); //cout << (y1-numNodesY/2) << '/' << (x1-numNodesX/2) << endl; string name = (toString(x)+string("/")+toString(y) + string("/") + toString(1)); nameLookup[node] = name; genes.push_back(GeneticNodeGene(name,"HiddenNode",0,false)); genes.back().setTopologyFrozen(true); int curNodeID = genes.back().getID(); //While creating the hidden layer, connect up the links linkGenes.push_back(GeneticLinkGene(curNodeID,outputNodeID,0.0)); for (int curInputID = inputStartID;curInputID <= inputEndID;curInputID++) { linkGenes.push_back(GeneticLinkGene(curInputID,curNodeID,0.0)); } } } for (int a=0;a<populationSize;a++) { shared_ptr<GeneticIndividual> individual(new GeneticIndividual(genes,linkGenes,true,1.0)); population->addIndividual(individual); } cout << "Finished creating population\n"; return population; }
NEAT::GeneticPopulation* AtariFTNeatExperiment::createInitialPopulation(int populationSize) { GeneticPopulation *population = new GeneticPopulation(); vector<GeneticNodeGene> genes; vector<GeneticLinkGene> links; clock_t start = clock(); vector<int> inputNodeIndexes; vector<int> hiddenNodeIndexes; vector<int> outputNodeIndexes; int nodeCounter = 0; // One input layer for each object class and an extra for the self object for (int i=0; i<=numObjClasses; ++i) { for (int y=0; y<substrate_height; y++) { for (int x=0; x<substrate_width; x++) { int xmod = substrate_width*i+x; Node node(xmod, y, 0); genes.push_back(GeneticNodeGene(nameLookup[node],"NetworkSensor",0,false)); inputNodeIndexes.push_back(nodeCounter); nodeCounter++; } } } // Processing Layer for (int y=0; y<substrate_height; y++) { for (int x=0; x<substrate_width; x++) { Node node(x, y, 1); genes.push_back(GeneticNodeGene(nameLookup[node],"NetworkOutputNode",1,false, ACTIVATION_FUNCTION_SIGMOID)); hiddenNodeIndexes.push_back(nodeCounter); nodeCounter++; } } // Output Layer for (int i=0; i<numActions; i++) { Node node(i, 0, 2); genes.push_back(GeneticNodeGene(nameLookup[node],"NetworkOutputNode",1,false, ACTIVATION_FUNCTION_SIGMOID)); outputNodeIndexes.push_back(nodeCounter); nodeCounter++; } // Bias node // genes.push_back(GeneticNodeGene("Bias","NetworkSensor",0,false)); // inputNodeIndexes.push_back(nodeCounter); // nodeCounter++; clock_t end = clock(); cout << "Created " << nodeCounter << " nodes in " << float(end-start)/CLOCKS_PER_SEC << " seconds." << endl; start = clock(); // [Links] Input --> Processing for (int z=0; z<inputNodeIndexes.size(); z++) { for (int q=0; q<hiddenNodeIndexes.size(); q++) { int fromNodeIndex = inputNodeIndexes[z]; int toNodeIndex = hiddenNodeIndexes[q]; links.push_back(GeneticLinkGene(genes[fromNodeIndex].getID(),genes[toNodeIndex].getID())); } } // [Links] Processing --> Output for (int z=0; z<hiddenNodeIndexes.size(); z++) { for (int q=0; q<outputNodeIndexes.size(); q++) { int fromNodeIndex = hiddenNodeIndexes[z]; int toNodeIndex = outputNodeIndexes[q]; links.push_back(GeneticLinkGene(genes[fromNodeIndex].getID(),genes[toNodeIndex].getID())); } } end = clock(); cout << "Created " << links.size() << " links in " << float(end-start)/CLOCKS_PER_SEC << " seconds." << endl; for (int a=0; a<populationSize; a++) { shared_ptr<GeneticIndividual> individual(new GeneticIndividual(genes,links)); for (int b=0;b<10;b++) { individual->testMutate(); } population->addIndividual(individual); } cout << "Finished creating population\n"; return population; }