Discussão do artigo "Algoritmos genéticos - é fácil!" - página 12

 
Urain:

....

Em geral, deve-se entender que o AG não encontra uma solução exata, mas uma solução robusta. Ou seja, uma solução que seja bem-sucedida em comparação com o campo de soluções possíveis.

As funções de teste são "derrotadas". Elas devem ser derrotadas.

E assim, você diz tudo corretamente.

 
joo:

As funções de teste são "derrotadas". Elas devem ser derrotadas.

Mas você está dizendo todas as coisas certas.

Sim, sim, eu não elaborei, e é por isso que elas são funções de teste, o algoritmo deve aceitá-las, caso contrário, esse algoritmo não pode ser considerado bem-sucedido.

É difícil imaginar o que o algoritmo encontrará no campo desconhecido se ele nem mesmo passar no teste.

 

Obrigado a todos, está funcionando.

Eu tinha que ser tão estúpido para misturar menos e multiplicar.

 
ivandurak:

Obrigado a todos, está funcionando.

Está se referindo ao seu algoritmo? Parabéns!
 

Gostaria de saber como fazer o parafuso UGA corretamente, se precisarmos otimizar diferentes variáveis com o mesmo valor da função de adequação para minimizar o erro de aproximação? Problema clássico. Uma rede neural de duas camadas de cinco passagens com 4 neurônios, por exemplo, requer uma pesquisa de 22 coeficientes juntamente com a polarização no intervalo [-1...1] com uma precisão de 0,0001 e, simultaneamente, na mesma função de destino, a seleção de parâmetros de indicadores de entrada 5 peças*2parâmetros= 10 variáveis no intervalo 5...50. Ou separadamente, mas com um passo de 0,01.

É claro que você pode codificar os valores dos indicadores no intervalo de pesos. Mas isso é um pouco diferente.

E mais uma pergunta. É possível passar para o UGA as condições de pular genes? Ou seja, por exemplo, os genes responsáveis pelo indicador devem corresponder à condição G23< G24 G25<G26 e assim por diante.

 
miklelv:

Gostaria de saber como parafusar o UGA corretamente, se precisarmos otimizar diferentes variáveis com o mesmo valor da função de adequação para minimizar o erro de aproximação? Problema clássico. Uma rede neural de duas camadas de cinco passagens com 4 neurônios, por exemplo, requer uma pesquisa de 22 coeficientes juntamente com a polarização no intervalo [-1...1] com uma precisão de 0,0001 e, simultaneamente, na mesma função de destino, a seleção de parâmetros de indicadores de entrada 5 peças*2parâmetros= 10 variáveis no intervalo 5...50. Ou separadamente, mas com um passo de 0,01.

É claro que você pode codificar os valores dos indicadores no intervalo de pesos. Mas isso é um pouco diferente.

E mais uma pergunta. É possível passar para o UGA as condições de pular genes? Ou seja, por exemplo, os genes responsáveis pelo indicador devem corresponder à condição G23< G24 G25<G26 e assim por diante.

É isso, é isso mesmo,

há um intervalo no qual a maioria dos parâmetros funciona, o restante é simplesmente ajustado por deslocamento e escala.

Você entende que o código no artigo não é um desenvolvimento comercial polido para cada espirro do consumidor.

Há um desejo de definir intervalos para cada parâmetro, ninguém está segurando suas mãos, mas não se esqueça de que, com o número de parâmetros contado em milhares, definir intervalos manualmente se tornará muito problemático.


ter um intervalo de genes [-1;1] --> (int)NormaliseDouble( ((gene+1)/2)*45+5 ,0) --> [5;50]

Embora eu concorde que haverá muitos genes diferentes dando o mesmo resultado, aqui você pode criar um definidor de precisão para combinar genes, por exemplo, de 0 a 1000º gene com precisão de 3 dígitos, de 1000 a 1010 com precisão de 0 dígitos.

 
miklelv:

E mais uma pergunta. É possível passar as condições de pulo de genes para o UGA? Ou seja, por exemplo, os genes responsáveis pelo indicador devem atender à condição G23< G24 G25<G26 e assim por diante.

Podemos fazer isso da seguinte maneira: Parâmetro1=G23 Parâmetro2=G23+G24.
 
her.human:
Você pode fazer isso da seguinte maneira: Parâmetro1=G23 Parâmetro2=G23+G24.

Ao converter o intervalo, é melhor fazer uma conversão com uma verificação lógica, que incluirá a quebra.

Caso contrário, não haverá conexão entre uma parte do intervalo quebrado e outra. Aqui é necessário entender que os genes são emprestados de cromossomos diferentes apenas de acordo com isso, o segundo gene pode ser emprestado apenas para a produção do segundo gene do novo cromossomo.

Se um parâmetro for representado por dois genes, não haverá conexão entre eles.

 
Urain:

É melhor fazer uma transformação com uma verificação lógica, que incluirá a quebra.

Caso contrário, não haverá conexão entre uma parte do intervalo quebrado e outra. Deve-se entender que os genes são emprestados de cromossomos diferentes apenas de acordo com isso, o segundo gene pode ser emprestado apenas para a produção do segundo gene do novo cromossomo.

Se um parâmetro for representado por dois genes, não haverá conexão entre eles.

Talvez seja melhor assim.

Sugeri uma variante simples. O AG pode lidar com ela sem problemas.

Em geral, os genes nem sempre são emprestados, novos genes podem ser gerados.

 
Obrigado por seus comentários. Certamente é mais fácil codificar. Estou tentando replicar o Prediction Wizard do Neuroshell no mql. Lá, por 2-3 segundos, em um histórico de 200-2000 barras em um ciclo de 20 índices com 2-4 parâmetros, cada um no intervalo de 5...50 é formado por 2-3 segundos em um histórico de 200-2000 barras dos 20 melhores indicadores selecionados (por exemplo, 5 pcs). E tudo isso está escrito em VBbasic. Deve ser um algoritmo legal. O UGA funcionará muito bem.