create NEAT app repo
This commit is contained in:
commit
9cd2d19fb9
34 files changed
+4454
No files matched your search
+73
@@ -0,0 +1,73 @@
|
||||
#include "Species.h"
|
||||
|
||||
#include "IteratorHelper.h"
|
||||
#include "Random.h"
|
||||
|
||||
#if 0
|
||||
|
||||
Species::Species(const Genotype& leader):
|
||||
m_leader(leader)
|
||||
{
|
||||
m_members.push_back(m_leader);
|
||||
}
|
||||
|
||||
void Species::Reset()
|
||||
{
|
||||
m_members.clear();
|
||||
}
|
||||
|
||||
void Species::AddMember(const Genotype& genome)
|
||||
{
|
||||
m_members.push_back(genome);
|
||||
if ( genome < m_leader )
|
||||
{
|
||||
m_leader = genome;
|
||||
}
|
||||
}
|
||||
|
||||
bool Species::AddIfCompatible(const Genotype& genome)
|
||||
{
|
||||
if ( m_leader.GetCompatibility(genome) < 3.0f )
|
||||
{
|
||||
// yes, it's compatible, add it to this species
|
||||
AddMember(genome);
|
||||
return true;
|
||||
}
|
||||
|
||||
// default case, not added
|
||||
return false;
|
||||
}
|
||||
|
||||
void Species::AdjustFitness()
|
||||
{
|
||||
float total_members = (float)m_members.size();
|
||||
iterate_each( std::vector<Genotype>::iterator, it, m_members )
|
||||
{
|
||||
(*it).SetFitness( (*it).GetFitness() / total_members );
|
||||
}
|
||||
}
|
||||
|
||||
float Species::GetFitness()
|
||||
{
|
||||
float total = 0.0f;
|
||||
iterate_each( std::vector<Genotype>::iterator, it, m_members )
|
||||
{
|
||||
total += (*it).GetFitness();
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
Genotype Species::Spawn() const
|
||||
{
|
||||
int a = RandomRange(0,(int)m_members.size()-1);
|
||||
int b = RandomRange(0,(int)m_members.size()-1);
|
||||
return Genotype(m_members[a],m_members[b]);
|
||||
}
|
||||
|
||||
Genotype Species::GetLeader() const
|
||||
{
|
||||
return m_leader;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in new issue
Block a user