41using std::vector, std::ostream;
48 fRanges(ranges.
size()),
58 for (
unsigned int i = 0; i < ranges.size(); ++i )
62 for (
int i = 0; i <
size; ++i )
77 if (fRandomGenerator !=
NULL)
delete fRandomGenerator;
79 std::vector<GeneticRange*>::iterator it = fRanges.
begin();
80 for (;it!=fRanges.end(); ++it)
delete *it;
92 fRandomGenerator->SetSeed( seed );
104 for (std::vector<TMVA::GeneticGenes>::iterator it = fGenePool.begin();
105 it != fGenePool.end() && i < number;
107 GiveHint( it->GetFactors(), it->GetFitness() );
118#ifdef _GLIBCXX_PARALLEL
122 for (
int it = 0; it < (
int) (fGenePool.size() / 2); ++it )
124 Int_t pos = (
Int_t)fRandomGenerator->Integer( fGenePool.size()/2 );
125 fGenePool[(fGenePool.size() / 2) + it] = MakeSex( fGenePool[it], fGenePool[pos] );
136 vector< Double_t >
child(fRanges.size());
137 for (
unsigned int i = 0; i < fRanges.size(); ++i) {
138 if (fRandomGenerator->Integer( 2 ) == 0) {
168 vector< Double_t>::iterator vec;
169 vector< TMVA::GeneticRange* >::iterator
vecRange;
176 for (
int it =
startIndex; it < (
int) fGenePool.size(); ++it) {
178 for (vec = (fGenePool[it].GetFactors()).begin(); vec < (fGenePool[it].GetFactors()).end(); ++vec) {
179 if (fRandomGenerator->Uniform( 100 ) <=
probability) {
193 return &(fGenePool[
index]);
202 for (
unsigned int it = 0; it < fGenePool.size(); ++it )
209 Log() <<
"fitness: " << fGenePool[it].GetFitness() <<
" ";
210 for (vector< Double_t >::iterator vec = fGenePool[it].GetFactors().begin();
211 vec < fGenePool[it].GetFactors().end(); ++vec ) {
212 Log() <<
"f_" <<
n++ <<
": " << (*vec) <<
" ";
224 for (
unsigned int it = 0; it < fGenePool.size(); ++it ) {
230 out <<
"fitness: " << fGenePool[it].GetFitness() <<
" ";
231 for (vector< Double_t >::iterator vec = fGenePool[it].GetFactors().begin();
232 vec < fGenePool[it].GetFactors().end(); ++vec ) {
233 out <<
"f_" <<
n++ <<
": " << (*vec) <<
" ";
251 std::cout <<
"FAILED! TMVA::GeneticPopulation::VariableDistribution" << std::endl;
253 std::stringstream histName;
257 TH1F *hist =
new TH1F( histName.str().c_str(),histName.str().c_str(), bins,min,max );
267 std::cout <<
"FAILED! TMVA::GeneticPopulation::VariableDistribution" << std::endl;
279 for (std::vector<TMVA::GeneticGenes>::iterator it =
strangers->fGenePool.
begin();
281 GiveHint( it->GetFactors(), it->GetFitness() );
298 std::sort(fGenePool.begin(), fGenePool.end());
299 while ( fGenePool.size() > (
unsigned int) fPopulationSizeLimit )
300 fGenePool.pop_back();
312 fGenePool.push_back(
g );
320 std::sort(fGenePool.begin(), fGenePool.end());
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
int Int_t
Signed integer 4 bytes (int)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t child
const_iterator begin() const
const_iterator end() const
1-D histogram with a float per channel (see TH1 documentation)
Cut optimisation interface class for genetic algorithm.
Population definition for genetic algorithm.
void Mutate(Double_t probability=20, Int_t startIndex=0, Bool_t near=kFALSE, Double_t spread=0.1, Bool_t mirror=kFALSE)
Mutates the individuals in the genePool.
virtual ~GeneticPopulation()
destructor
Int_t fPopulationSizeLimit
std::vector< TMVA::GeneticRange * > fRanges
contains the ranges in between the values of the coefficients have to be
TRandom3 * fRandomGenerator
random Generator for this population
void Sort()
sort the genepool according to the fitness of the individuals
void MakeCopies(int number)
Produces offspring which is are copies of their parents.
void TrimPopulation()
trim the population to the predefined size
GeneticGenes * GetGenes(Int_t index)
gives back the "Genes" of the population with the given index.
GeneticPopulation(const std::vector< TMVA::Interval * > &ranges, Int_t size, UInt_t seed=0)
Constructor.
void Print(Int_t untilIndex=-1)
make a little printout of the individuals up to index "untilIndex" this means, .
void MakeChildren()
Creates children out of members of the current generation.
void GiveHint(std::vector< Double_t > &hint, Double_t fitness=0)
add an individual (a set of variables) to the population if there is a set of variables which is know...
std::vector< TMVA::GeneticGenes > fGenePool
the "genePool" where the individuals of the current generation are stored
void AddPopulation(GeneticPopulation *strangers)
add another population (strangers) to the one of this GeneticPopulation
void SetRandomSeed(UInt_t seed=0)
the random seed of the random generator
GeneticGenes MakeSex(GeneticGenes male, GeneticGenes female)
this function takes two individuals and produces offspring by mixing (recombining) their coefficients...
TH1F * VariableDistribution(Int_t varNumber, Int_t bins, Int_t min, Int_t max)
give back a histogram with the distribution of the coefficients.
Range definition for genetic algorithm.
ostringstream derivative to redirect and format output
Random number generator class based on M.
void SetSeed(ULong_t seed=0) override
Set the random generator sequence.
virtual Double_t Uniform(Double_t x1=1)
Returns a uniform deviate on the interval (0, x1).
MsgLogger & Endl(MsgLogger &ml)