CAlgoritmoGenetico Class Reference

#include <CAlgoritmoGenetico.h>

List of all members.

Public Member Functions

 CAlgoritmoGenetico ()
 ~CAlgoritmoGenetico ()
void Limpiar ()
void Inicializar (int nEntradas, int nSalidas)
void CrearMente (IIndividuoIA *Individuo)
void Epoca (TPoblacionIA &vPoblacion)
int GetGeneracion () const
TFenotipos GetMejoresFenotipos ()

Private Member Functions

void OrdenarYSalvarIndividuos ()
void ResetearYEliminar ()
void AjustarIdoneidadEspecies ()
void EspeciarYCalcularHijosAExpandir ()
const CGenomaTournamentSelection (int nComparaciones)
CGenomaCruce (const CGenoma &madre, const CGenoma &padre)
void AddIDNeurona (int nID, vector< int > &v)

Private Attributes

int m_nIDSigGenoma
 Identificador que se asociará al siguiente genoma que se cree.
int m_nIDSigEspecie
 Número identificador de la siguiente especie a crear.
int m_nGeneracion
 Contador de generaciones transcurridas en la evolución.
int m_nMejorIndividuo
 Índice del mejor individuo de la población.
int m_nEntradasRedes
 Número de entradas para las redes neuronales.
int m_nSalidasRedes
 Número de salidas para las redes neuronales.
bool m_bMejorIdoneidadValida
 Antes de la primera generación, no existe mejor idoneidad, empieza a ser válida cuando se coge la primera.
double m_dMejorIdoneidad
 Mejor idoneidad alcanzada por la evolución hasta la fecha.
double m_dIdoneidadTotalAjustada
 Suma de las idoneidades ajustadas de la población.
double m_dIdoneidadMediaAjustada
 Media de las idoneidadea ajustadas.
CInnovacionm_pBDInnovaciones
 Puntero a la Base de datos de innovaciones.
vector< CGenomam_vMejoresIndividuos
 Copia de los mejores individuos de la época anterior.
TEspecies m_vEspecies
 Vector de especies.
TPoblacionIAm_vPoblacion
 Puntero al vector de población.


Detailed Description

CLASE: CAlgoritmoGenetico

Clase que gestiona la realización de las epocas del algoritmo genético y
la evolución de los individuos.

Definition at line 58 of file CAlgoritmoGenetico.h.


Constructor & Destructor Documentation

CAlgoritmoGenetico::CAlgoritmoGenetico  )  [inline]
 

Definition at line 61 of file CAlgoritmoGenetico.h.

References Limpiar().

CAlgoritmoGenetico::~CAlgoritmoGenetico  )  [inline]
 

Definition at line 62 of file CAlgoritmoGenetico.h.

References Limpiar().


Member Function Documentation

void CAlgoritmoGenetico::AddIDNeurona int  nID,
vector< int > &  v
[inline, private]
 

Definition at line 97 of file CAlgoritmoGenetico.h.

Referenced by Cruce().

void CAlgoritmoGenetico::AjustarIdoneidadEspecies  )  [private]
 

Ajustar las idoneidades de las especies

Recorre el vector de especies y ajusta las idoneidades de los individuos que pertenecen
a cada una de ellas.

Definition at line 159 of file CAlgoritmoGenetico.cpp.

References m_vEspecies.

Referenced by EspeciarYCalcularHijosAExpandir().

void CAlgoritmoGenetico::CrearMente IIndividuoIA Individuo  ) 
 

Creación de la mente de un individuo

Este método crea la mente de uno de los individuos de una población entera,
asignándosela al objeto que representa dicho individuo. Por lo tanto, recibe
un puntero al individuo, al que se le ha hecho un cast previo a IIndividuoIA*,
de modo que este método maneje al individuo a través de la interfaz y pueda
rellenar su mente.

Parameters:
Individuo Puntero a la instancia del individuo, en tipo IIndividuoIA*.
nEntradas Número de entradas que tendrá el cerebro del individuo
nSalidas Número de salidas

Definition at line 74 of file CAlgoritmoGenetico.cpp.

References m_nEntradasRedes, m_nIDSigGenoma, and m_nSalidasRedes.

Referenced by CEntrenamiento::CrearMentes().

CGenoma * CAlgoritmoGenetico::Cruce const CGenoma madre,
const CGenoma padre
[private]
 

Método para cuzar dos genomas y producir un hijo.

Este método coge dos genomas, padre y madre, y los combina siguiendo las leyes establecidas
para realizar el cruce entre ambos, produciendo un nuevo genoma hijo que es combinación de
ambos dos.

Parameters:
mum Genoma que hace las veces de madre
dad Genoma que hace de padre
Returns:
Genoma resultado de cruzar padre y madre

Definition at line 320 of file CAlgoritmoGenetico.cpp.

References AddIDNeurona(), CInnovacion::CrearNeuronaDesdeID(), CSucesos::Log(), m_nIDSigGenoma, m_pBDInnovaciones, SGenEnlace::nIDInnovacion, and RandomInt().

Referenced by Epoca().

void CAlgoritmoGenetico::Epoca TPoblacionIA vPoblacion  ) 
 

Método de paso de una época genética.

Este es el método principal que gobierna el funcionamiento del algoritmo genético. Lo que hace,
básicamente, es generar una nueva población de individuos evolucionados a partir de la antigua
población. Para esto, va seleccionando individuos, cruzándolos y mutándolos para obtener nuevos
individuos evolucionados.

Parameters:
vPoblacion Vector con la población de IIndividuoIA*

Definition at line 466 of file CAlgoritmoGenetico.cpp.

References CGenoma::AddEnlace(), CGenoma::AddNeurona(), Cruce(), EspeciarYCalcularHijosAExpandir(), CGenoma::GetID(), COpcionesEntrena::GetMaxIntentosEnlace(), COpcionesEntrena::GetMaxIntentosEnlaceAnt(), COpcionesEntrena::GetMaxIntentosRecurrenre(), COpcionesEntrena::GetMaxPerturbacionPeso(), COpcionesEntrena::GetMaxPerturbacionSigma(), CGenoma::GetNumGenesNeurona(), CBaseDeDatos::GetOpciones(), COpcionesEntrena::GetProbAnyadirEnlace(), COpcionesEntrena::GetProbAnyadirNeurona(), COpcionesEntrena::GetProbAnyadirRecurrente(), COpcionesEntrena::GetProbSustituirPeso(), COpcionesEntrena::GetRatioMutacion(), COpcionesEntrena::GetRatioMutacionSigma(), CSucesos::Log(), m_dIdoneidadMediaAjustada, m_dMejorIdoneidad, m_nGeneracion, m_nIDSigGenoma, m_pBDInnovaciones, m_vEspecies, m_vPoblacion, CGenoma::MutarCurvaturaActivacion(), CGenoma::MutarPesos(), CGenoma::OrdenarGenes(), OrdenarYSalvarIndividuos(), RandomDouble(), ResetearYEliminar(), CGenoma::SetID(), and TournamentSelection().

Referenced by CEntrenamiento::EvolucionarMentes().

void CAlgoritmoGenetico::EspeciarYCalcularHijosAExpandir  )  [private]
 

Dividir en especies y Calcular los hijos a expandir

Separa los individuos en distintas especies, calculando el test de compatibilidad entre
cada uno de los individuos de la población con cada uno de los líderes de las especies.
Si un individuo no encuentra una especie compatible, crea una especie nueva.
Después de distribuir a todos los individuos en especies, ajusta sus idoneidades con respecto
a la especie a la que pertenezcan. Finalmente, calcula los hijos que debe expandir cada individuo
y los suma para saber cuantos debe expandir cada especie.

Definition at line 247 of file CAlgoritmoGenetico.cpp.

References AjustarIdoneidadEspecies(), CGenoma::CalcularCompatibilidad(), CGenoma::GetIdoneidadAjustada(), CBaseDeDatos::GetOpciones(), m_dIdoneidadMediaAjustada, m_dIdoneidadTotalAjustada, m_nIDSigEspecie, m_vEspecies, and CGenoma::SetNumHijosAExpandir().

Referenced by Epoca().

int CAlgoritmoGenetico::GetGeneracion  )  const [inline]
 

Definition at line 71 of file CAlgoritmoGenetico.h.

References m_nGeneracion.

TFenotipos CAlgoritmoGenetico::GetMejoresFenotipos  ) 
 

Obtener mejores fenotipos anteriores

Crea los fenotipos de los mejores individuos de la población anterior y los devuelve en
un vector de CRedNeuronal*.

Returns:
Vector de CRedNeuronal* conteniendo los mejores fenotipos de la época anterior.

Definition at line 140 of file CAlgoritmoGenetico.cpp.

References m_vMejoresIndividuos.

void CAlgoritmoGenetico::Inicializar int  nEntradas,
int  nSalidas
 

Método para inicializar el algoritmo genético.

Utilizando este método, podemos poner a punto el algoritmo genético para empezar a evolucionar
los genomas de la población. Con él se crea la base de datos de innovaciones y se deciden las
entradas y salidas que deben tener las redes neuronales de los individuos.

Parameters:
nEntradas Número de neuronas de entrada en las redes neuronales de las mentes.
nSalidas Número de neuronas de salida.

Definition at line 21 of file CAlgoritmoGenetico.cpp.

References Err_SinMemoria, CSucesos::ErrorGrave(), GenerarSemillaRandom(), Limpiar(), m_nEntradasRedes, m_nSalidasRedes, and m_pBDInnovaciones.

Referenced by CEntrenamiento::IniciarEntrenamiento().

void CAlgoritmoGenetico::Limpiar  ) 
 

Borrado y puesta a 0 del A.G.

Con este método se elimina todo lo que el algoritmo genético haya podido reservar
y se preparan todos los parámetros para volver a comenzar desde 0.

Definition at line 42 of file CAlgoritmoGenetico.cpp.

References m_bMejorIdoneidadValida, m_dIdoneidadMediaAjustada, m_dIdoneidadTotalAjustada, m_dMejorIdoneidad, m_nEntradasRedes, m_nGeneracion, m_nIDSigEspecie, m_nIDSigGenoma, m_nMejorIndividuo, m_nSalidasRedes, and m_pBDInnovaciones.

Referenced by CAlgoritmoGenetico(), Inicializar(), and ~CAlgoritmoGenetico().

void CAlgoritmoGenetico::OrdenarYSalvarIndividuos  )  [private]
 

Ordenación y rescate de la población

Este método ordena el vector de población de mayor a menor según las puntuaciones de sus individuos.
Después de esto, actualiza la mejor puntuación de todos los tiempos, si es el caso, y salva a los
mejores individuos (la élite) para que perduren en la siguiente época.

Definition at line 89 of file CAlgoritmoGenetico.cpp.

References SOrdenPtrGenoma::dIdoneidad, Const_Globales::dMaxDouble, g_Constantes, SOrdenPtrGenoma::genoma, CBaseDeDatos::GetOpciones(), m_bMejorIdoneidadValida, m_dMejorIdoneidad, m_vMejoresIndividuos, and m_vPoblacion.

Referenced by Epoca().

void CAlgoritmoGenetico::ResetearYEliminar  )  [private]
 

Método de reseteo entre épocas

Resetea los valores que sean necesarios para la próxima época, se carga los fenotipos y, también,
elimina todas aquellas especies que no muestren mejora significativa.

Definition at line 171 of file CAlgoritmoGenetico.cpp.

References CBaseDeDatos::GetOpciones(), m_dIdoneidadMediaAjustada, m_dIdoneidadTotalAjustada, m_dMejorIdoneidad, and m_vEspecies.

Referenced by Epoca().

const CGenoma * CAlgoritmoGenetico::TournamentSelection int  nComparaciones  )  [private]
 

Selección por torneo de genomas

Se realiza la selección de un genoma cualquiera de la población a través de un torneo entre
tantos genomas como se le indique al algoritmo.

Parameters:
nComparaciones Número de individuos que son comparados antes de escoger uno.
Returns:
Referencia constante al genoma del individuo ganador del torneo.

Definition at line 213 of file CAlgoritmoGenetico.cpp.

References m_vPoblacion, and RandomInt().

Referenced by Epoca().


Member Data Documentation

bool CAlgoritmoGenetico::m_bMejorIdoneidadValida [private]
 

Antes de la primera generación, no existe mejor idoneidad, empieza a ser válida cuando se coge la primera.

Definition at line 80 of file CAlgoritmoGenetico.h.

Referenced by Limpiar(), and OrdenarYSalvarIndividuos().

double CAlgoritmoGenetico::m_dIdoneidadMediaAjustada [private]
 

Media de las idoneidadea ajustadas.

Definition at line 83 of file CAlgoritmoGenetico.h.

Referenced by Epoca(), EspeciarYCalcularHijosAExpandir(), Limpiar(), and ResetearYEliminar().

double CAlgoritmoGenetico::m_dIdoneidadTotalAjustada [private]
 

Suma de las idoneidades ajustadas de la población.

Definition at line 82 of file CAlgoritmoGenetico.h.

Referenced by EspeciarYCalcularHijosAExpandir(), Limpiar(), and ResetearYEliminar().

double CAlgoritmoGenetico::m_dMejorIdoneidad [private]
 

Mejor idoneidad alcanzada por la evolución hasta la fecha.

Definition at line 81 of file CAlgoritmoGenetico.h.

Referenced by Epoca(), Limpiar(), OrdenarYSalvarIndividuos(), and ResetearYEliminar().

int CAlgoritmoGenetico::m_nEntradasRedes [private]
 

Número de entradas para las redes neuronales.

Definition at line 78 of file CAlgoritmoGenetico.h.

Referenced by CrearMente(), Inicializar(), and Limpiar().

int CAlgoritmoGenetico::m_nGeneracion [private]
 

Contador de generaciones transcurridas en la evolución.

Definition at line 76 of file CAlgoritmoGenetico.h.

Referenced by Epoca(), GetGeneracion(), and Limpiar().

int CAlgoritmoGenetico::m_nIDSigEspecie [private]
 

Número identificador de la siguiente especie a crear.

Definition at line 75 of file CAlgoritmoGenetico.h.

Referenced by EspeciarYCalcularHijosAExpandir(), and Limpiar().

int CAlgoritmoGenetico::m_nIDSigGenoma [private]
 

Identificador que se asociará al siguiente genoma que se cree.

Definition at line 74 of file CAlgoritmoGenetico.h.

Referenced by CrearMente(), Cruce(), Epoca(), and Limpiar().

int CAlgoritmoGenetico::m_nMejorIndividuo [private]
 

Índice del mejor individuo de la población.

Definition at line 77 of file CAlgoritmoGenetico.h.

Referenced by Limpiar().

int CAlgoritmoGenetico::m_nSalidasRedes [private]
 

Número de salidas para las redes neuronales.

Definition at line 79 of file CAlgoritmoGenetico.h.

Referenced by CrearMente(), Inicializar(), and Limpiar().

CInnovacion* CAlgoritmoGenetico::m_pBDInnovaciones [private]
 

Puntero a la Base de datos de innovaciones.

Definition at line 84 of file CAlgoritmoGenetico.h.

Referenced by Cruce(), Epoca(), Inicializar(), and Limpiar().

TEspecies CAlgoritmoGenetico::m_vEspecies [private]
 

Vector de especies.

Definition at line 86 of file CAlgoritmoGenetico.h.

Referenced by AjustarIdoneidadEspecies(), Epoca(), EspeciarYCalcularHijosAExpandir(), and ResetearYEliminar().

vector<CGenoma> CAlgoritmoGenetico::m_vMejoresIndividuos [private]
 

Copia de los mejores individuos de la época anterior.

Definition at line 85 of file CAlgoritmoGenetico.h.

Referenced by GetMejoresFenotipos(), and OrdenarYSalvarIndividuos().

TPoblacionIA* CAlgoritmoGenetico::m_vPoblacion [private]
 

Puntero al vector de población.

Definition at line 87 of file CAlgoritmoGenetico.h.

Referenced by Epoca(), OrdenarYSalvarIndividuos(), and TournamentSelection().


The documentation for this class was generated from the following files:
Generated on Fri May 13 16:32:36 2005 for Screaming Racers by  doxygen 1.4.2