Não para desenvolvedores de MT! O que substituir INIT_PARAMETERS_INCORRECT por ? - página 2

 

Você pode criar seu próprio conjunto de otimização no OnTesterInit e fazer o otimizador pensar que apenas um sinput int NumPass está sendo otimizado.

É difícil dizer que efeito isso terá no resultado final - se o extremo global (local) desejado será encontrado.

Não estou pronto para lhe dar um exemplo, dê uma olhada na Documentação. Está bem escrito ali.

 
fxsaber:

Uma prescrição é que os desenvolvedores tenham o resultado do passe INCORRETO contado como o passe CORRETO mais próximo previamente contado. Isto irá nivelar os furos na superfície de otimização.

Isto é o que os desenvolvedores são contra. Neste caso, outros indivíduos da população "sobreviverão". E a genética começará a funcionar com erros.

 

Que tal escrever uma função que só produz cadeias válidas por número ?

A primeira coisa que vem à mente é uma tabela de 117649 valores, e deixar que a genética procure os números nessa tabela.

 
Sergey Savinkin:

Isto é o que os desenvolvedores estão contra. Neste caso, outros indivíduos da população "sobreviverão". E a genética começará a funcionar mal.

Eu também seria contra tal algoritmo. INCORRETO é um conjunto inaceitável de parâmetros, não pode ser substituído pelo "mais próximo aceitável".

 
Sergey Savinkin:

Isto é o que os desenvolvedores estão contra. Neste caso, outros indivíduos da população "sobreviverão". E a genética começará a funcionar em erro.

A genética na prática é quase sempre errada, que é a norma. Sem uma pesquisa adequada nesta área, eu não reclamaria nada sobre a opção proposta.

 
Georgiy Merts:

Que tal uma função que retorna apenas cadeias válidas por número ?

A primeira coisa que me vem à mente é uma tabela de 117649 valores e deixar que a genética procure os números nessa tabela.

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Não para desenvolvedores da MT! O que substituir INIT_PARAMETERS_INCORRECT por ?

fxsaber, 2018.07.10 16:22

Você pode criar seu conjunto de otimização no OnTesterInit e fazer o otimizador pensar que apenas um sinput int NumPass está sendo otimizado.

É difícil dizer que efeito isso terá no resultado final - se o extremo global (local) necessário será encontrado.

Depende fortemente do critério de satisfação com o resultado final.


É evidente que se seguirmos a enumeração completa de y = x^2. Em seguida, embaralhar aleatoriamente as filas e criar um novo conjunto baseado no embaralhamento. Então a GA não encontrará o vértice da parábola.

 
fxsaber:

Obviamente, se você traçar uma enumeração completa de y = x^2. Em seguida, embaralhar aleatoriamente as linhas de opimização e criar um novo conjunto com base no embaralhamento. A AG não vai encontrar o vértice da parábola.

Sim, aqui acontece que estes mesmos INCORRETOS "rasgam" demais o espaço da função fitness.

Receio que não haja nada a fazer exceto redesenhar os parâmetros de entrada. Saltar OnTick() como você sugere é apenas uma muleta substituindo o parâmetro INCORRECT, na realidade o algoritmo genético será "morto" de qualquer forma. A genética requer alguns "gradientes" de função de resultado, de modo que podemos usá-los para passar para os máximos. Mas quando você tem mais INCORRETOS do que valores válidos - como você encontra este máximo?

Eu suspeito que, exceto pela força bruta total, você não pode fazer nada, e mesmo a força bruta total encontrará uma solução altamente instável.
 

É preciso um pouco de habilidade para definir os parâmetros de entrada.

Um exemplo muito comum pode ser dado. Ao otimizar o intervalo comercial diário, os horários diários de início e fim são os dois parâmetros de entrada mais comuns.

Mas isto é muito pior para a AG do que, por exemplo, especificar a hora de início e a duração. Aparentemente a mesma coisa, mas não para a AG. No segundo caso, a AG faria melhor. Embora 'melhor' seja uma avaliação bastante subjetiva.

 

Georgiy Merts:

quando temos mais INCORRETOS do que valores válidos - como você encontra este máximo?

Tomemos a mesma parábola do acima. Suponha que façamos INCORRETO no intervalo de teste 90% do valor de um único parâmetro de entrada. A atual AG irá falhar em tal tarefa. No entanto, se você prosseguir com a opção sugerida, a AG se sairá bem.


Creio que @Andrey Dik pode ajudar nestas questões. Mas mesmo as críticas construtivas à AG regular não terminaram bem para ele.

 
fxsaber:

Pegue a mesma parábola como acima. Suponha que façamos INCORRETO no intervalo de teste 90% do valor do parâmetro de entrada único. A atual AG morreria em tal tarefa. No entanto, se você prosseguir com a variante sugerida, a AG se sairá bem.

Como? Substituindo as incorreções pelas correções mais próximas ??? Receio que tudo depende de como distribuímos essas mesmas incorreções. É bem possível que as correções mais próximas - estejam longe do topo.

Sim, e vai acontecer que ao invés de conjuntos errados de parâmetros - teremos resultados corretos - o que, em minha opinião, também não deve ser feito - o que encontramos então? Teremos um máximo e terá um conjunto incorreto de parâmetros ?

Razão: