Evolver create_evolver(size_t population_size, size_t genome_size){
	Evolver e;
	e.current_generation.reserve(population_size);
	for(size_t i = 0; i < population_size; ++i){
		e.current_generation.emplace_back(random_genome(genome_size), -1);
	}
	return e;
}
Example #2
0
SolverEvolver::SolverEvolver(int population_size, double combination_probability, double mutation_probability)
	:population_size_(population_size)
	, combination_p_(combination_probability)
	, mutation_p_(mutation_probability)
	, steps_(0)
{
	std::ifstream file("population.json");
	picojson::value v;
	std::string err;
	err = picojson::parse(v, file);
	if (err.empty()) 
	{
		auto arr = v.get("population").get<picojson::array>();
		for (int i = 0; i < population_size && i < arr.size(); ++i)
		{
			auto genome = arr[i].get<picojson::array>();
			population_.push_back(Individual());
			if (genome.size() == population_[i].genome.size())
			{
				for (int j = 0; j < population_[i].genome.size(); ++j)
				{
					population_[i].genome[j] = genome[j].get<double>();
				}
			}
			else
			{
				population_[i].genome = random_genome();
			}
		}
	}

	for (int i = population_.size(); i < population_size; ++i)
	{
		population_.push_back(Individual());
		population_[i].genome = random_genome();
	}

	initate_population();	
}
Example #3
0
/*
    Create a new, blank population, and return a pointer to the struct.
*/
static Population* new_population(VALUE phenome, int pop_size, int g_len, BOOL randomize) {
    Population *pop = ALLOC(Population);
    Candidate *candidates = ALLOC_N(Candidate, pop_size);

    int i;
    for(i=0; i < pop_size; ++i) {
        Candidate *c = (candidates + i);
        c->phenome = phenome;
        c->fitness = -INT_MAX;
        c->rq_update = TRUE;
        
        if(randomize) 
            c->genome = random_genome(g_len);       
    }

    pop->g_len = g_len;
    pop->pop_size = pop_size;
    pop->candidates = candidates;

    return pop;
}
void gen_random_population(struct organism pop[], int strlen)
{
	for(int i=0;i<POPSIZE;++i){
		random_genome(pop[i].genome, strlen);
	}
}