Discussão do artigo "Algoritmos de otimização populacional: simulação de têmpera (Simulated Annealing, SA). Parte I" - página 2

 
Aleksey Nikolayev #:
Exatamente.

É uma tecnologia extremamente inconveniente, tanto para codificação quanto para uso posterior na prática. Isso é confirmado, por exemplo, pelo fato de que o otimizador interno não a utiliza.

Essa abordagem dificilmente pode ser aplicada quando várias otimizações (um número indefinido de vezes e possivelmente com um conjunto indefinido de parâmetros a cada vez) precisam ser realizadas. Por exemplo, isso poderia ser um conjunto de modelos MO.

O que pode ser dito aqui... O OpenCL não é tão terrível e nem conveniente, o código nele sintaticamente não difere do MQL5 (a menos que você use funções específicas do MQL5). É possível paralelizar não apenas seções de código lógico separadas, mas também, por exemplo, toda a lógica de um Expert Advisor em OpenCL, organizando execuções através do histórico da maneira de um otimizador padrão em agentes. Assim, é possível organizar a otimização/treinamento no modo on-line do Expert Advisor.

A MetaQuotes forneceu recursos de paralelização, mas se os recursos de linguagem nativa estiverem disponíveis, isso seria ótimo. Acho que é mais fácil para os desenvolvedores implementar trites de funções (é mais rápido esperar pelos usuários) do que a paralelização automática de seções de código. Como um desejo para os desenvolvedores, espero que ele seja ouvido.

 
Andrey Dik #:
O que pode ser dito aqui... O OpenCL não é tão terrível e nem conveniente, o código nele sintaticamente não difere do MQL5 (a menos que você use funções específicas do MQL5). Você pode paralelizar não apenas seções de código lógico separadas, mas também, por exemplo, toda a lógica de um Expert Advisor em OpenCL, organizando execuções através do histórico da maneira de um otimizador padrão em agentes. É assim que se pode organizar a otimização/treinamento no modo on-line do Expert Advisor.
Os problemas não estão tanto na codificação em si, embora provavelmente se devam à falta de manuais. Até onde sei, há problemas na portabilidade de programas para GPUs diferentes daquela em que foram depurados. Novamente, não tenho certeza se isso vai decolar quando o MT5 estiver sendo executado no Linux via wyne. A solução encontrada para os problemas sempre pode ser interrompida devido a atualizações inesperadas do MT etc.
.
Andrey Dik #:
A MetaQuotes forneceu recursos de paralelização, mas se houver recursos de idioma nativo, seria ótimo. Acho que é mais fácil para os desenvolvedores implementar trites de funções (é mais rápido esperar pelos usuários) do que a paralelização automática de fragmentos de código. Como um desejo para os desenvolvedores, espero que ele seja ouvido.

Na minha opinião, as possibilidades são muito ruins.

 
Andrey Dik #:

Surgiu uma dúvida sobre o recozimento populacional. Faria sentido que cada solução da população escolhesse seus parâmetros de recozimento (aleatoriamente dentro de limites razoáveis). Isso poderia a) melhorar a convergência e b) ser um análogo da seleção de metaparametros ideais?

 
Aleksey Nikolayev #:
O problema não está tanto na codificação em si, embora provavelmente seja devido à falta de manuais. Até onde eu sei, há problemas ao portar programas para GPUs diferentes daquela em que foram depurados. Novamente, não tenho certeza se isso vai decolar quando o MT5 estiver sendo executado no Linux via wyne. A solução encontrada para os problemas sempre pode quebrar devido a atualizações inesperadas do MT, etc.

O OpenCL foi desenvolvido precisamente como uma forma universal de organizar cálculos paralelos em dispositivos com vários núcleos (não importa se GPU ou CPU). A probabilidade de problemas de programas OpenCL em diferentes dispositivos não é maior (e pode ser até menor) do que a de aplicativos comuns do Windows em computadores com hardware diferente.

Não sei como estão as coisas com o vyne, sempre houve problemas com ele, depende das especificidades e da qualidade da virtualização do ambiente Windows.

 
Aleksey Nikolayev #:

Surgiu uma dúvida sobre o recozimento populacional. Faria sentido que cada solução da população escolhesse seus parâmetros de recozimento (aleatoriamente dentro de limites razoáveis). Isso poderia a) melhorar a convergência e b) ser um análogo da seleção de metaparametros ideais?

Boa pergunta. Ao testar algoritmos e selecionar os parâmetros externos dos algoritmos, procedo a partir do desempenho agregado geral em um conjunto de funções de teste, embora em cada uma delas os melhores parâmetros possam ser diferentes (e geralmente são diferentes). Além disso, diferentes parâmetros externos também podem ser os melhores para diferentes dimensões do problema. Portanto, sim:

a) melhorará a precisão da convergência em diferentes tipos de problemas e reduzirá a probabilidade de ficar preso.

b) sim

A única coisa é que essa técnica provavelmente reduzirá um pouco (ou muito, você deve observar) a velocidade de convergência (enquanto aumenta a precisão da convergência).

 
Andrey Dik #:

Boa pergunta. Ao testar algoritmos e selecionar parâmetros externos de algoritmos, procedo a partir do desempenho agregado geral em um conjunto de funções de teste, embora os melhores parâmetros possam ser diferentes para cada função individual (e geralmente são, diferentes). Além disso, diferentes parâmetros externos também podem ser os melhores para diferentes dimensões do problema. Portanto, sim:

(a) melhorará a precisão da convergência em diferentes tipos de problemas e reduzirá a probabilidade de travamento.

b) sim

A única coisa é que essa técnica provavelmente reduzirá um pouco (ou muito, você precisa ver) a velocidade de convergência (enquanto aumenta a precisão da convergência).

Obrigado pela resposta informativa. Se chegarmos a experimentos práticos e houver resultados interessantes, escreverei aqui. Por enquanto, estou apenas me familiarizando com sua série de artigos sobre otimização por curiosidade.