Population::Population(const char *a_FileName) { m_BestFitnessEver = 0.0; m_Generation = 0; m_NumEvaluations = 0; m_NextSpeciesID = 1; m_GensSinceBestFitnessLastChanged = 0; m_GensSinceMPCLastChanged = 0; std::ifstream t_DataFile(a_FileName); if (!t_DataFile.is_open()) throw std::exception(); std::string t_str; // Load the parameters m_Parameters.Load(t_DataFile); // Load the innovation database m_InnovationDatabase.Init(t_DataFile); // Load all genomes for(unsigned int i=0; i<m_Parameters.PopulationSize; i++) { Genome t_genome(t_DataFile); m_Genomes.push_back( t_genome ); } t_DataFile.close(); m_NextGenomeID = 0; for(unsigned int i=0; i<m_Genomes.size(); i++) { if (m_Genomes[i].GetID() > m_NextGenomeID) { m_NextGenomeID = m_Genomes[i].GetID(); } } m_NextGenomeID++; // Initialize Speciate(); m_BestGenome = m_Species[0].GetLeader(); Sort(); // Set up the phased search variables CalculateMPC(); m_BaseMPC = m_CurrentMPC; m_OldMPC = m_BaseMPC; if (m_Parameters.PhasedSearching) { m_SearchMode = COMPLEXIFYING; } else { m_SearchMode = BLENDED; } }
// The constructor Population::Population(const Genome& a_Seed, const Parameters& a_Parameters, bool a_RandomizeWeights, double a_RandomizationRange) { m_RNG.TimeSeed(); //m_RNG.Seed(0); m_BestFitnessEver = 0.0; m_Parameters = a_Parameters; m_Generation = 0; m_NumEvaluations = 0; m_NextGenomeID = m_Parameters.PopulationSize; m_NextSpeciesID = 1; m_GensSinceBestFitnessLastChanged = 0; m_GensSinceMPCLastChanged = 0; // Spawn the population for(unsigned int i=0; i<m_Parameters.PopulationSize; i++) { Genome t_clone = a_Seed; t_clone.SetID(i); m_Genomes.push_back( t_clone ); } // Now now initialize each genome's weights for(unsigned int i=0; i<m_Genomes.size(); i++) { if (a_RandomizeWeights) m_Genomes[i].Randomize_LinkWeights(a_RandomizationRange, m_RNG); //m_Genomes[i].CalculateDepth(); } // Initialize the innovation database m_InnovationDatabase.Init(a_Seed); // Speciate Speciate(); m_BestGenome = m_Species[0].GetLeader(); Sort(); // Set up the phased search variables CalculateMPC(); m_BaseMPC = m_CurrentMPC; m_OldMPC = m_BaseMPC; if (m_Parameters.PhasedSearching) { m_SearchMode = COMPLEXIFYING; } else { m_SearchMode = BLENDED; } }
Population::Population(const char *a_FileName) { m_BestFitnessEver = 0.0; m_Generation = 0; m_NumEvaluations = 0; m_NextSpeciesID = 1; m_GensSinceBestFitnessLastChanged = 0; m_GensSinceMPCLastChanged = 0; std::ifstream t_DataFile(a_FileName); if (!t_DataFile.is_open()) throw std::exception(); std::string t_str; // Load the parameters m_Parameters.Load(t_DataFile); // Load the innovation database m_InnovationDatabase.Init(t_DataFile); // Load all genomes /*for(unsigned int i=0; i<m_Parameters.PopulationSize; i++) { Genome t_genome(t_DataFile); m_Genomes.push_back( t_genome ); }*/ // Fix a bug where populations with more than PopulationSize genomes wouldn't get parsed correctly while(t_DataFile.peek() != EOF) { streampos sp = t_DataFile.tellg(); string line; t_DataFile >> line; if (line == "GenomeStart") { t_DataFile.seekg(sp); Genome t_genome(t_DataFile); m_Genomes.push_back( t_genome ); } } t_DataFile.close(); m_NextGenomeID = 0; for(unsigned int i=0; i<m_Genomes.size(); i++) { if (m_Genomes[i].GetID() > m_NextGenomeID) { m_NextGenomeID = m_Genomes[i].GetID(); } } m_NextGenomeID++; // Initialize Speciate(); m_BestGenome = m_Species[0].GetLeader(); Sort(); // Set up the phased search variables CalculateMPC(); m_BaseMPC = m_CurrentMPC; m_OldMPC = m_BaseMPC; if (m_Parameters.PhasedSearching) { m_SearchMode = COMPLEXIFYING; } else { m_SearchMode = BLENDED; } }