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

 

Novo artigo Algoritmos de otimização populacional: simulação de têmpera (Simulated Annealing, SA). Parte I foi publicado:

O algoritmo de simulação de têmpera é uma metaheurística inspirada no processo de têmpera de metais. Neste artigo, realizaremos uma análise detalhada do algoritmo e mostraremos como muitas concepções comuns e mitos em torno deste método de otimização popular e amplamente conhecido podem ser equivocados e incompletos. Anúncio da segunda parte do artigo: "Conheça nosso algoritmo autoral de simulação de têmpera isotrópica (Simulated Isotropic Annealing, SIA)!"

O algoritmo de otimização por simulação de têmpera surgiu em 1983, graças aos estudos de Scott Kirkpatrick, George Gelatt e Mario Vecchi. Eles exploraram como líquidos e sólidos se comportam sob altas temperaturas, notando que os metais, ao se liquefazerem, permitem que as partículas se espalhem aleatoriamente. Sob condições ideais de alta temperatura inicial e um resfriamento prolongado, o material atinge um estado de energia mínima. Caso contrário, ele permanece num estado metaestável, com energia mais alta, fenômeno conhecido como têmpera, que envolve o resfriamento rápido do material, resultando em uma estrutura atômica anisotrópica e variável dentro do cristal.

Diante dessa observação, surgiu a ideia de aplicar esse processo gradual de resfriamento para desenvolver um algoritmo que conseguisse identificar soluções ótimas em problemas complexos. Assim, além de inspirar novos métodos em otimização física, o algoritmo começou a ser utilizado para solucionar desafios de otimização combinatória.

A inspiração por trás do algoritmo de simulação de têmpera vem de um paralelo matemático com o processo de têmpera de metais. Durante a têmpera, para uma distribuição homogênea de energia interna, o metal é aquecido até altas temperaturas e depois resfriado de maneira controlada.Isso permite que as moléculas metálicas se reorganizem em uma configuração mais estável, reduzindo tensões internas e corrigindo defeitos nos cristais. Além disso, o termo "têmpera" relaciona-se à energia livre termodinâmica do material, que varia de acordo com seu estado físico.

No contexto do algoritmo de otimização de simulação de têmpera, adota-se um procedimento similar. O algoritmo realiza etapas análogas ao aquecimento e ao resfriamento do metal, iniciando com uma solução inicial que pode ser aleatória ou baseada em dados de iterações anteriores. Seguidamente, o algoritmo executa modificações no estado dessa solução, através de mudanças que podem ser aleatórias ou planejadas, para alcançar uma nova configuração, mesmo que esta seja inicialmente menos favorável. A decisão de aceitar estados piores é controlada por uma função de "resfriamento", que diminui gradualmente a probabilidade de aceitar soluções inferiores, possibilitando assim que o algoritmo explore além dos ótimos locais e encontre soluções superiores em outras regiões do espaço de busca

Autor: Andrey Dik

 
Um bom livro de referência sobre algoritmos de otimização, obrigado!
 
fxsaber #:
Um bom livro de referência sobre algoritmos de otimização, obrigado!

Muito obrigado.

 
Bro, conteúdo fenomenal, adoro como você expressa o algoritmo de forma tão compacta e, ao mesmo tempo, fácil de ler.

Gostaria de lhe fazer uma pergunta rápida relacionada à função de objetivo de teste. Como podemos criar uma função objetiva que retorne o lucro ou prejuízo histórico de nosso consultor especialista sob suas configurações atuais, dessa forma otimizamos os parâmetros especializados para obter lucro. Espero ter expressado a pergunta com clareza.
 
Gamuchirai Zororo Ndawana #:
Bro, conteúdo fenomenal, adoro a forma como você expressa o algoritmo de maneira tão compacta e, ao mesmo tempo, fácil de ler.

Gostaria de lhe fazer uma pergunta rápida relacionada à função de objetivo de teste. Como podemos criar uma função objetiva que retorne o lucro ou prejuízo histórico de nosso consultor especialista sob suas configurações atuais, dessa forma otimizamos os parâmetros especializados para obter lucro. Espero ter expressado a pergunta com clareza.

Se você não se importar em pesquisar códigos-fonte um pouco enigmáticos da fxsaber, dê uma olhada nesta implementação publicada no blog da fxsaber (pode ser necessária uma tradução de idioma).

Optimization - самостоятельная оптимизация торгового советника.
Optimization - самостоятельная оптимизация торгового советника.
  • 2024.03.26
  • www.mql5.com
После появления своего тикового тестера логичным продолжением было применить его на множестве алгоритмов оптимизации . Другими словами, научиться оптимизировать торговые советники самостоятельно - без
 
Gamuchirai Zororo Ndawana #:
Conteúdo fenomenal, adoro como você expõe o algoritmo de forma tão compacta e, ao mesmo tempo, fácil de ler.

Gostaria de lhe fazer uma pergunta relacionada à função de objetivo de teste. Como podemos criar uma função objetiva que retorne o histórico de lucros ou perdas de nosso EA em suas configurações atuais, para que possamos otimizar os parâmetros do EA para obter lucro. Espero ter expressado a pergunta com clareza.

Obrigado por suas palavras gentis, fico feliz que tenha gostado do artigo. Espero que o comentário de @Stanislav Korotky tenha lhe ajudado.

TesterStatistics () pode ser útil para compilar funções de adequação personalizadas para uso em OnTester ().

 

Existe algum exemplo de como implementar esses algoritmos em um EA?

Obrigado pela atenção

 
SergioTForex #:

Existe algum exemplo de como implementar esses algoritmos em um EA?

Obrigado pela atenção

https://www.mql5.com/pt/articles/14183
Использование алгоритмов оптимизации для настройки параметров советника "на лету"
Использование алгоритмов оптимизации для настройки параметров советника "на лету"
  • www.mql5.com
В статье рассматриваются практические аспекты использования алгоритмов оптимизации для поиска наилучших параметров советников "на лету", виртуализация торговых операций и логики советника. Данная статья может быть использована как своеобразная инструкция для внедрения алгоритмов оптимизации в торгового советника.
 

Como foi corretamente apontado, a principal vantagem do recozimento é a simplicidade de implementação. Portanto, a modificação da população desse algoritmo está apenas implorando por uma paralelização.

Lembrei-me da declaração do autor sobre a facilidade de escrever algoritmos paralelos em MQL5, mas ainda não vi isso confirmado em seus artigos. Corrija-me se eu estiver errado.

PS. Estou me referindo à paralelização normal, como a implementada no otimizador padrão, e não a truques com o lançamento de várias instâncias de programa. E, é claro, a implementação por meio da MQL5 sem usar dlls externas.

 
Aleksey Nikolayev dlls externas.

Se precisar de paralelização no nível do código, o OpenCL é amplamente utilizado - consulte os artigos de Gizlyk sobre redes neurais e seu livro didático.

Se precisar de otimização e paralelização em todo o nível do programa, como acontece no otimizador padrão, veja o exemplo do Booster, que usa paralelização de instâncias de EA em agentes (MQL5 puro é usado sem usar dlls externas).

A criação de trites para funções separadas, como no C#, e outras formas de paralelização de código não são compatíveis com a MQL5.

Нейросети в алготрейдинге — практическое пособие по использованию машинного обучения в алгоритмическом трейдинге
Нейросети в алготрейдинге — практическое пособие по использованию машинного обучения в алгоритмическом трейдинге
  • www.mql5.com
В эпоху цифровых технологий и искусственного интеллекта алгоритмическая торговля преобразует финансовые рынки, предлагая новые стратегии для...
 
Andrey Dik #:
A criação de trites para funções separadas, como no C#, e outras formas de paralelização de código não são compatíveis com a MQL5.
Exatamente.
Andrey Dik #:
aplicação do OpenCL

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

Andrey Dik #:
veja o exemplo do Booster

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