Files
neat/Species.cpp
T
2010-09-30 15:23:17 -07:00

74 lines
1.2 KiB
C++

#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