Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Sugiro que o tamanho da população seja calculado:
Muito obrigado pelo artigo! Se não fosse por ele, eu nunca teria aprendido o que são métodos genéticos :)
Mas há uma pergunta! Quando verificamos os cromossomos do banco de dados, no caso de uma correspondência, uma unidade será subtraída do índice do cromossomo do banco de dados. Por quê? E se o índice for zero?
Onde estou errando?
Sugiro que o tamanho da população seja calculado:
Não vou contestar a competência da fonte citada, mas tenho que discordar.
A viabilidade do uso de AG em problemas de otimização está na redução do número de execuções de FF necessárias para determinar o ótimo em comparação com a pesquisa direta.
Se seguirmos a recomendação
ChromosomeCount=GeneCount*11;o problema com 1.000 argumentos exigirá um tamanho de população de 11.000 indivíduos! E isso significa 11.000 execuções de FF em apenas uma época! Você também pode usar a geração aleatória de genes e o resultado não será muito inferior para encontrar o melhor. A fonte fornecida faz uma "aposta" de que, em uma população grande, haverá material genético suficiente para desenvolver ainda mais a população em direção ao aprimoramento a cada época. Estou tentando obter o mesmo resultado, mas jogando probabilidades com operadores genéticos sem o aumento total de execuções de FF.
Muito obrigado pelo artigo! Se não fosse por ele, eu nunca teria aprendido o que são métodos genéticos :)
Mas há uma pergunta! Quando verificamos os cromossomos do banco de dados, no caso de uma correspondência, uma unidade será subtraída do índice do cromossomo do banco de dados. Por quê? E se o índice for zero?
Onde estou errando???
O banco de dados só é verificado se houver pelo menos um cromossomo no banco de dados. Você não citou a seção inteira do código de pesquisa do banco de dados.
Portanto, o caso em que não há cromossomos na base, mas a ranhura é verificada, é impossível.
A verificação do banco de dados é realizada somente quando há pelo menos um cromossomo no banco de dados. Você não forneceu a seção inteira do código para a pesquisa por base.
Portanto, o caso em que não há cromossomos no banco de dados, mas a verificação do sulco é realizada, é impossível.
Obrigado por sua resposta tão rápida! Eu não quis dizer exatamente o que você está falando!
1) Suponha que haja de fato um cromossomo no banco de dados (ChrCountInHistory = 1 - ou seja, a dimensão da matriz é igual a um) - então seu índice no banco de dados é zero! (ChrCountInHistory é zero por padrão - o índice de um elemento na matriz é zero).
E subtraímos um desse índice:
Além disso, a pesquisa começa em Ch1=0.
2) Comparamos com HistoryHromosomes[Ge][Ch1 ] e atribuímos HistoryHromosomes[0][Ch1-1].
Você está certo, obrigado.
Essa é a maneira de fazer isso:
Você está certo, obrigado.
Esse é o caminho a seguir:
Hmm.
Agora"Array out of range" em HistoryHromosomes[0][Ch1], embora tudo pareça estar correto...
joo:
Você está certo, obrigado.
Não tem de quê! O principal é que ele funciona ainda melhor agora do que antes :)
joo:
Hmm.
Agora "Array out of range" em HistoryHromosomes[0][Ch1], embora tudo pareça estar correto...
É difícil dizer o motivo - temos códigos diferentes para analisar. Talvez seja a variável "position" - seu análogo no artigo é "chromos". Dei uma olhada no código do artigo provavelmente 10 vezes - não consegui entender onde está o erro :( Vou verificar mais tarde os exemplos do artigo - talvez algo fique mais claro.
P.S.: justifica-se o uso de um banco de memória se uma variável consistir em ~150 valores. E houver 100.000 indivíduos no histórico. Talvez , nesse caso, seja mais rápido calcular do que verificar (pesquisar) tudo? Você não verificou?
P.S.: justifica-se o uso de um banco de memória se uma variável consistir em ~150 valores. E houver 100.000 indivíduos no histórico. Talvez , nesse caso, seja mais rápido contar do que verificar (verificar novamente) tudo? Você não verificou?
Tudo depende do tempo necessário para calcular o FF. Se o FF for apenas uma função matemática, então o banco não é razoável. Mas se o FF usar execuções de histórico (aprendizado de neurônios, etc.) e outras tarefas que exigem muitos recursos, o banco será necessário e poderá reduzir significativamente o tempo de otimização.
Bem, isso também depende da precisão dos genes. Quanto mais "grosseiros" forem os genes, mais repetições ocorrerão e mais razoável será usar um banco de cromossomos.
....
:)
Ainda assim, não há erro, você me confundiu muito. Aqui, criei um script de teste, experimente-o e você entenderá tudo.
Aqui, embora ele compare o cromossomo com a posição de Ch1, mas no loop superior é atribuído +1, então eu subtraio -1 depois.
Concordo, está um pouco torto, poderia ser feito melhor.
Aqui está um script para verificar isso: