void Evolver::doStep()
{
    judge->parent = this;

	if (genIdx == 0)
	{
		for (int i = 0; i < genSize; i++)
		{
			NeuralNet* n = new NeuralNet(1, 0, 1);
			for (int i = 0; i < 10; i++)
			{
				n->mutate();
			}
			generation.push_back( n );
		}
	}
	
	genIdx++;
	
	setlocale(LC_ALL, "C");
	generation = judge->rate(generation);
	
	while(generation.size() < genSize)
	{
		NeuralNet* n = new NeuralNet(1, 0, 1);
		*n = *generation[rand() % generation.size()];
		
        for (int i = 0; i < 20; i++)
		{
			n->mutate();
		}
		generation.push_back(n);
	}
}
Exemple #2
0
void NeuroEvo::generate_new_members() {
    // Mutate existing members to generate more
    list<NeuralNet*>::iterator popMember = population.begin();
    for (int i = 0; i < params->popSize; i++) {  // add k new members
        // commented out so that you take parent's evaluation
        // (*popMember)->evaluation = 0.0;
        // dereference pointer AND iterator
        NeuralNet* m = new NeuralNet(**popMember);
        m->mutate();
        population.push_back(m);
        ++popMember;
    }
}