¿Cómo puedo evitar que mi programa se atasque en un máximo local?

Estoy trabajando en una red neuronal artificial de feed forward (ffann) que tomará información en forma de un cálculo simple y devolverá el resultado (actuando como una calculadora de bolsillo). El resultado no será exacto.
La red artificial se entrena utilizando algoritmos genéticos sobre los pesos.

Actualmente mi programa se atasca en un máximo local en:

5-6% de respuestas correctas, con 1% de margen de error30% de respuestas correctas, con 10% de margen de error40% de respuestas correctas, con 20% de margen de error45% de respuestas correctas, con 30% de margen de error60% de respuestas correctas, con 40% de margen de error

Actualmente utilizo dos algoritmos genéticos diferentes:
La primera es una selección básica, escogiendo dos al azar de mi población, nombrando a uno con mejor aptitud como ganador y al otro como perdedor. El perdedor recibe uno de los pesos del ganador.

El segundo es la mutación, donde el perdedor de la selección recibe una ligera modificación basada en la cantidad de errores resultantes. (La aptitud se decide por respuestas correctas y respuestas incorrectas). Entonces, si la red produce muchos errores, recibirá una gran modificación, donde, como si tuviera muchas respuestas correctas, estamos cerca de un objetivo aceptable y la modificación será más pequeña.

Entonces, para la pregunta: ¿De qué maneras puedo evitar que mi ffann se atasque en los máximos locales?
¿Debo modificar mi algoritmo genético actual a algo más avanzado con más variables?
¿Debo crear mutación adicional o cruce?
¿O debería tal vez intentar modificar mis variables de mutación a algo más grande / más pequeño?

Este es un tema importante, por lo que si omito cualquier información que pueda ser necesaria, deje un comentario

Edit: Ajustar los números de la mutación a un valor más adecuado ha sido una mejor tasa de respuesta, pero lejos de ser aprobada:

10% de respuestas correctas, con 1% de margen de error33% de respuestas correctas, con 10% de margen de error43% de respuestas correctas, con 20% de margen de error65% de respuestas correctas, con 30% de margen de error73% de respuestas correctas, con 40% de margen de error

La red es actualmente una estructura muy simple de 3 capas con 3 entradas, 2 neuronas en la única capa oculta y una sola neurona en la capa de salida.
La función de activación utilizada es Tanh, colocando valores entre -1 y 1.
El tipo de selección crossover es muy simple trabajando como el siguiente:

[a1, b1, c1, d1] // Selected as winner due to most correct answers
[a2, b2, c2, d2] // Loser

El perdedor terminará recibiendo uno de los valores del ganador, moviendo el valor hacia abajo ya que creo que la posición en la matriz (de pesos) es importante para su desempeño.

La mutación es muy simple, agregando un valor muy pequeño (actualmente en algún lugar entre aproximadamente 0.01 y 0.001) a un peso aleatorio en la matriz de pesos de los perdedores, con una probabilidad de 50/50 de ser un valor negativo.

Aquí hay algunos ejemplos de datos de entrenamiento:

1, 8, -7 // the -7 represents + (1+8)
3, 7, -3 // -3 represents - (3-7)
7, 7, 3  // 3 represents * (7*7)
3, 8, 7  // 7 represents / (3/8)

Respuestas a la pregunta(3)

Su respuesta a la pregunta