No estoy seguro si usar una cadena de bits es la mejor idea, prefiero representar al menos los pesos con valores reales. Sin embargo, las cadenas de bits también pueden funcionar.
Si tiene una topología fija, entonces ambos cruce y mutación son bastante fácil (suponiendo que sólo se evolucionan los pesos de la red):
Crossover: tomar unas pesas de uno de los padres, el resto de la otra, se puede hacer muy fácilmente si representa los pesos como una matriz o lista. Para más detalles o alternativas, vea http://en.wikipedia.org/wiki/Crossover_%28genetic_algorithm%29.
Mutación: simplemente seleccione algunos de los pesos y ajústelos ligeramente.
Evolución de algunas otras cosas (por ejemplo, la función de activación) es bastante similar a estos.
Si también desea evolucionar la topología, las cosas se vuelven mucho más interesantes. Hay algunas posibilidades de mutación adicionales, como agregar un nodo (muy probablemente conectado a dos nodos ya existentes), dividir una conexión (en lugar de A-> B tener A-> C-> B), agregar una conexión, o los opuestos de estos.
Pero el cruce no será demasiado fácil (al menos si el número de nodos no es fijo), porque es probable que desee encontrar nodos "coincidentes" (donde la coincidencia puede ser cualquier cosa, pero probablemente relacionada con una similar " rol ", o un lugar similar en la red). Si también quieres hacerlo, te recomendaría estudiar técnicas ya existentes. Uno que conozco y me gusta se llama NEAT. Usted puede encontrar algo de información acerca de ello en
http://en.wikipedia.org/wiki/Neuroevolution_of_augmenting_topologies
http://nn.cs.utexas.edu/?neat
y http://www.cs.ucf.edu/~kstanley/neat.html
NEAT permite redes con ciclos/recurrencia en ellas. ¿Cómo manejas eso durante la evaluación? –
@iliacholy por lo general depende del problema que estás tratando de resolver. Para las tareas de control (como un robot de equilibrio de polos), las conexiones recurrentes pueden ser útiles, ya que pueden proporcionar una forma de calcular derivadas de valores a lo largo del tiempo. Al evaluar redes, puede realizar una única propagación de valores en cada paso de tiempo, o puede seguir propagando valores hasta que las salidas se estabilicen ... No estoy seguro de si hay una única respuesta "correcta". :) –