GENEIAL  0.2=/
 All Classes Pages
MultiValueChromosomeFactory.hpp
1 #pragma once
2 
3 #include <geneial/namespaces.h>
4 #include <geneial/core/population/builder/BaseChromosomeFactory.h>
5 #include <geneial/core/population/builder/MultiValueBuilderSettings.h>
6 #include <geneial/core/population/chromosome/MultiValueChromosome.h>
7 #include <geneial/utility/Random.h>
8 
9 geneial_private_namespace(geneial)
10 {
11 geneial_private_namespace(population)
12 {
13 geneial_private_namespace(chromosome)
14 {
15 using ::geneial::utility::Random;
16 
17 geneial_export_namespace
18 {
19 
20 template<typename VALUE_TYPE, typename FITNESS_TYPE>
21 typename BaseChromosome<FITNESS_TYPE>::ptr MultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>::doCreateChromosome(
22  typename BaseChromosomeFactory<FITNESS_TYPE>::PopulateBehavior populateValues)
23 {
24 
25  auto new_chromosome = this->allocateNewChromsome();
26 
27 
28  if (populateValues == BaseChromosomeFactory<FITNESS_TYPE>::CREATE_VALUES)
29  {
30  auto &container= new_chromosome->getContainer();
31  for(unsigned int i=0;i<this->_settings.getNum();i++)
32  {
33  container[i] = Random::generate<VALUE_TYPE>(this->_settings.getRandomMin(), this->_settings.getRandomMax());
34  }
35  }
36 
37  assert(new_chromosome->getSize() == _settings.getNum());
38 
39  return std::move(new_chromosome);
40 }
41 
42 } /* geneial_export_namespace */
43 } /* private namespace chromosome */
44 } /* private namespace population */
45 } /* private namespace geneial */