Como impedir que meu programa fique travado no máximo local (Alimente a rede neural artificial e o algoritmo genético)

Estou trabalhando em uma rede neural artificial de feed forward (ffann) que terá entrada na forma de um cálculo simples e retornará o resultado (atuando como uma calculadora de bolso). O resultado não será exato.
A rede artificial é treinada usando algoritmo genético nos pesos.

Atualmente, meu programa fica travado no máximo local em:

5-6% de respostas corretas, com margem de erro de 1%30% de respostas corretas, com margem de erro de 10%40% de respostas corretas, com margem de erro de 20%45% de respostas corretas, com margem de erro de 30%60% de respostas corretas, com margem de erro de 40%

Atualmente, uso dois algoritmos genéticos diferentes:
O primeiro é uma seleção básica, escolhendo dois aleatórios da minha população, nomeando um com melhor condicionamento físico como vencedor e o outro como perdedor. O perdedor recebe um dos pesos do vencedor.

A segunda é a mutação, em que o perdedor da seleção recebe uma pequena modificação com base na quantidade de erros resultantes. (o condicionamento físico é decidido por respostas corretas e incorretas). Portanto, se a rede emitir muitos erros, ela receberá uma grande modificação, onde, como se tivesse muitas respostas corretas, estamos perto de uma meta aceitável e a modificação será menor.

Então, para a pergunta: Quais são as maneiras pelas quais posso impedir que meu namorado fique preso no máximo local?
Devo modificar meu algoritmo genético atual para algo mais avançado com mais variáveis?
Devo criar mutação ou cruzamento adicional?
Ou devo tentar modificar minhas variáveis de mutação para algo maior / menor?

Este é um tópico importante, por isso, se eu tiver perdido alguma informação que possa ser necessária, deixe um comentário

Editar: Ajustar os números da mutação para um valor mais adequado obteve uma taxa de resposta melhor, mas longe de ser aprovada:

10% de respostas corretas, com margem de erro de 1%33% de respostas corretas, com margem de erro de 10%43% de respostas corretas, com margem de erro de 20%65% de respostas corretas, com margem de erro de 30%73% de respostas corretas, com margem de erro de 40%

Atualmente, a rede é uma estrutura muito simples de 3 camadas com 3 entradas, 2 neurônios na única camada oculta e um único neurônio na camada de saída.
A função de ativação usada é Tanh, colocando valores entre -1 e 1.
O cruzamento do tipo de seleção é muito simples, funcionando da seguinte maneira:

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

O perdedor acabará recebendo um dos valores do vencedor, movendo o valor para baixo, pois acredito que a posição na matriz (de pesos) é importante para o desempenho.

A mutação é muito simples, adicionando um valor muito pequeno (atualmente entre 0,01 e 0,001) a um peso aleatório no conjunto de pesos dos perdedores, com uma chance de 50/50 de ser um valor negativo.

Aqui estão alguns exemplos de dados de treinamento:

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)

questionAnswers(3)

yourAnswerToTheQuestion