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; }
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(); }
/* 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); } }