Estou programando um algoritmo genético usando evolução gramatical. Meu problema é que alcanço valores ótimos locais (convergência prematura) e, quando isso acontece, não sei o que fazer. Estou pensando em aumentar a taxa de mutação (5% é o valor padrão), mas não sei como decidir quando é necessário.
Os dados que tenho em todas as gerações são uma matriz bidimensional cuja primeira coluna é sua adequação
adn[i][0] ← fitness
row → is the values of the Grammar
column ↓ Each indiviual result
Se precisar de esclarecimentos, pergunte e terei o prazer de modificar. Note que esta não é a minha língua materna e lamento pelos erros e pelos inconvenientes.
Atendendo a uma solicitação, minhas operações são as seguintes e exatamente nesta ordem:
- Gero uma população aleatória (uma matriz com números aleatórios)
- Eu gero uma matriz que contém o resultado desejado. Para fazer isso, implementei algumas funções que possuem adicionalmente +5% de variação, por exemplo: fun (x) = (2 * cos (x) + sen (x) - 2X) * (0,95+ (um número oscilando entre 0 e 0,1) , x contém todos os f (x) com seqüencialmente de 0 a N (sendo N o tamanho da linha), y contém exatamente o mesmo (mais resultados)
- Inicia o algoritmo (gerações que começam a mudar
As ações que fazem toda geração são:
- Mutação: Um número aleatório de cada cromossomo pode sofrer mutação em qualquer gene → e [i] [aleatório] = número aleatório (com uma probabilidade de 5% disso acontecer)
- Crossover: eu cruzo todos os ADNs com outros ADNs (80% é a chance de mutação para cada par). Para o emparelhamento, escolho um número aleatório e enfrento os adN [i] e adn [(i + j) mod NumADNs]
Traduzir. Eu recebo uma matriz que contém os valores que f (0 a N) fazem em uma etapa da transcrição e traduzo aplicando a gramática na imagem
-fit: Comparo os valores obtidos com os esperados e atualizo o fitness.
-Elitismo: Depois disso, eu escolho os 4 melhores e vou para o topo, eles serão selecionados
-Seleção: Qualquer usuário não elitista enfrentará um usuário totalmente aleatório, e se sua aptidão for menor (menor é melhor) prevalecerá, sendo uma possibilidade do pior sobrevivente