English Русский Español Deutsch 日本語
preview
Algoritmos de otimização populacional: simulação de têmpera isotrópica (Simulated Isotropic Annealing, SIA). Parte II

Algoritmos de otimização populacional: simulação de têmpera isotrópica (Simulated Isotropic Annealing, SIA). Parte II

MetaTrader 5Exemplos | 23 maio 2024, 09:43
102 0
Andrey Dik
Andrey Dik

Conteúdo:

1. Introdução
2. Descrição do algoritmo
3. Resultados dos testes


1. Introdução

Na primeira parte do artigo, analisamos a versão canônica do algoritmo de têmpera simulada, ou Simulated Annealing (SA). O algoritmo é baseado em três conceitos principais: aplicação da aleatoriedade, toma de decisões piores e redução gradual da probabilidade de toma de decisões piores. A aplicação da aleatoriedade nos permite explorar diferentes áreas do espaço de busca e evitar ficar preso em ótimos locais. A toma de decisões piores com uma certa probabilidade permite que o algoritmo temporariamente "escape" de ótimos locais e busque melhores soluções em outras partes do espaço de busca, o que possibilita inicialmente explorar o espaço de busca de forma mais ampla e depois se concentrar em melhorar a solução.

A ideia central do SA é uma analogia com o processo de têmpera do metal. O metal previamente aquecido é gradualmente resfriado, mudando sua estrutura. Analogamente, o algoritmo de têmpera simulada começa com uma alta temperatura (alta probabilidade de tomar uma decisão pior) e gradualmente diminui a temperatura (reduz a probabilidade de tomar uma decisão pior), o que supostamente ajuda o algoritmo a convergir para a solução ótima.

O algoritmo começa com uma solução inicial, que pode ser aleatória ou baseada em iterações anteriores. Em seguida, são aplicadas operações de alteração do estado da solução, que podem ser aleatórias ou controladas, para obter um novo estado, mesmo que seja pior que o atual. A probabilidade de tomar uma decisão pior é determinada por uma função de "resfriamento", que ao longo do tempo reduz a probabilidade de tomar uma decisão pior.

Para descrever o processo de têmpera simulada, são usadas algumas fórmulas simples. A fórmula para calcular a mudança de energia permite determinar a diferença nos valores da função de adaptação em duas iterações consecutivas. A fórmula para calcular a probabilidade de tomar uma decisão pior determina a probabilidade de adotar o novo estado levando em conta a diferença de energia e a temperatura atual.

Os parâmetros importantes que precisam ser ajustados ao usar o algoritmo de têmpera simulada são a temperatura inicial e o coeficiente de resfriamento. A configuração desses parâmetros pode ter um impacto significativo no desempenho e na qualidade da solução e é um dos pontos fracos do algoritmo, há certa dificuldade na escolha dos parâmetros por seu impacto não evidente na eficácia. Além disso, ambos os parâmetros influenciam mutuamente: o aumento da temperatura pode ser praticamente substituído pela redução do coeficiente de resfriamento.

Na primeira parte do artigo, identificamos os principais problemas do algoritmo:

  • Configuração dos parâmetros: parâmetros do SA, como temperatura inicial e coeficiente de resfriamento, podem influenciar significativamente seu desempenho. A configuração desses parâmetros pode ser uma tarefa complexa, e requer experimentação para alcançar os valores ideais.
  • Problema de ficar preso em extremos locais: para superar esse problema, podem-se utilizar várias estratégias, como a escolha da distribuição mais adequada da variável aleatória ao gerar novas soluções em combinação com as ferramentas de estratégia do algoritmo, bem como a consideração de possíveis soluções para aumentar as capacidades combinatórias.
  • Melhoria da velocidade de convergência: para acelerar a convergência, podem-se aplicar modificações na função de resfriamento, que permitam reduzir a temperatura do sistema mais rapidamente (ou com outra forma da função de resfriamento). Também é possível revisar no algoritmo os métodos de escolha do próximo estado, que levam em conta informações dos estados anteriormente percorridos.
  • Melhoria da eficiência do SA com um grande número de variáveis: essa é uma das questões mais desafiadoras para a esmagadora maioria dos algoritmos, pois com o aumento do número de variáveis a complexidade do espaço de busca cresce muito mais rapidamente do que se pode lidar com metodologias especiais nas estratégias de busca. 

Um dos principais problemas em espaços multidimensionais é a explosão combinatória das possíveis combinações de variáveis. Com o aumento do número de variáveis, cresce exponencialmente a quantidade de possíveis estados do sistema que precisam ser investigados. Isso leva a algoritmos de otimização a enfrentarem o problema da complexidade espacial.

A complexidade espacial significa que o volume do espaço de busca cresce exponencialmente com o aumento do número de variáveis. Por exemplo, se temos 10 variáveis, cada uma podendo assumir 10 valores, o número total de combinações possíveis será de 10^10, que equivale a 10 bilhões, e isso considerando que temos apenas 10 mil tentativas (número de execuções da função de adaptação). Encontrar a solução ótima entre esse número de combinações se torna uma tarefa extremamente difícil. Vale destacar que em nossos testes realizamos a otimização dos parâmetros das funções com um passo 0, o que significa condições inimaginavelmente complexas para os algoritmos, e aqueles que conseguem lidar satisfatoriamente com esses testes extremamente difíceis, irão quase que garantidamente trabalhar melhor em tarefas reais menos complexas (ceteris paribus).


2. Descrição do algoritmo

O algoritmo de simulação de têmpera é tão simples que é verdadeiramente difícil imaginar como ele pode ser ainda mais aprimorado. É como transformar um copo de água em um vinho encantador, como um ato de magia. E realmente, o que pode ser aprimorado, se a geração de novos valores é uniformemente distribuída, e a ideia de tomar uma decisão pior contraria totalmente a lógica usual de construção de algoritmos de otimização.

Para uma comparação visual dos resultados subsequentes dos experimentos com o resultado de referência inicial do algoritmo original de simulação de têmpera (SA), apresentamos aqui a impressão dos resultados do artigo anterior:

C_AO_SA:50:1000.0:0.1:0.2
=============================
5 Rastrigin's; Func runs 10000 result: 65.78409729002105
Score: 0.81510
25 Rastrigin's; Func runs 10000 result: 52.25447043222567
Score: 0.64746
500 Rastrigin's; Func runs 10000 result: 40.40159931988021
Score: 0.50060
=============================
5 Forest's; Func runs 10000 result: 0.5814827554067439
Score: 0.32892
25 Forest's; Func runs 10000 result: 0.23156336186841173
Score: 0.13098
500 Forest's; Func runs 10000 result: 0.06760002887601002
Score: 0.03824
=============================
5 Megacity's; Func runs 10000 result: 2.92
Score: 0.24333
25 Megacity's; Func runs 10000 result: 1.256
Score: 0.10467
500 Megacity's; Func runs 10000 result: 0.33840000000000003
Score: 0.02820
=============================
All score: 2.83750

Então, vamos lá. Tentaremos melhorar os resultados substituindo a distribuição uniforme de variáveis aleatórias pela normal ao gerar novos estados do sistema.

Usaremos a classe do algoritmo de simulação de têmpera como base para o novo algoritmo SIA, por isso não descreveremos os métodos e funcionalidades dessa classe, pois tudo já foi apresentado na primeira parte do artigo.

Para gerar um número aleatório com distribuição normal, podemos usar o método da função inversa. Suponhamos que queremos gerar um número "x" com distribuição normal, mu (valor médio) e sigma (desvio padrão). Então, podemos usar a seguinte fórmula:

x = z0 * sigma + mu

onde:

  • z0 é calculado pela fórmula:

z0 = sqrt(-2 * log(u1)) * cos(2 * Pi * u2)

onde:

  • u1* - número aleatório no intervalo (0,0;1,0] (aqui o mínimo não está no intervalo)

  • u2** - número aleatório no intervalo [0,0;1,0]

  • * e ** - dois números aleatórios independentes com distribuição uniforme

No artigo anterior, adicionamos ao SA o parâmetro coeficiente de difusão, que limita a área de geração de números aleatórios. É nessa área que devemos gerar números aleatórios.

Escreveremos um método da classe C_AO_SIA, imitando a difusão - "Diffusion". O método gera um número aleatório com distribuição normal até dois desvios padrão. Os valores que excedem esses limites são "dobrados" para dentro sem perder a forma da distribuição (abordaremos isso em mais detalhes em um dos próximos artigos).

Conhecendo o valor do desvio padrão (sigma), podemos traduzir esse intervalo de valores em nosso intervalo desejado que simula a difusão.

//——————————————————————————————————————————————————————————————————————————————
double C_AO_SIA::Diffusion (const double value, const double rMin, const double rMax, const double step)
{
  double logN = 0.0;
  double u1   = RNDfromCI (0.0, 1.0);
  double u2   = RNDfromCI (0.0, 1.0);

  logN = u1 <= 0.0 ? 0.000000000000001 : u1;

  double z0 = sqrt (-2 * log (logN))* cos (2 * M_PI * u2);

  double sigma = 2.0;//Sigma > 8.583864105157389 ? 8.583864105157389 : Sigma;

  if (z0 >=  sigma) z0 = RNDfromCI (0.0,    sigma);
  if (z0 <= -sigma) z0 = RNDfromCI (-sigma, 0.0);

  double dist = d * (rMax - rMin);

  if (z0 >= 0.0) return Scale (z0, 0.0,    sigma, value,        value + dist, false);
  else           return Scale (z0, -sigma, 0.0,   value - dist, value,        false);
}
//——————————————————————————————————————————————————————————————————————————————

No método "Moving", usaremos o método "Diffusion" da seguinte forma:

for (int i = 0; i < popSize; i++)
{
   for (int c = 0; c < coords; c++)
   {
     a [i].c [c] = Diffusion (a [i].c [c], rangeMin [c], rangeMax [c], rangeStep [c]);
     a [i].c [c] = SeInDiSp  (a [i].c [c], rangeMin [c], rangeMax [c], rangeStep [c]);
   } 
}
Após realizar os testes com as alterações feitas (substituímos a distribuição uniforme pela normal), obtivemos os seguintes resultados:
C_AO_SIA:50:1000.0:0.1:0.2
=============================
5 Rastrigin's; Func runs 10000 result: 60.999013617749895
Score: 0.75581
25 Rastrigin's; Func runs 10000 result: 47.993562806349246
Score: 0.59467
500 Rastrigin's; Func runs 10000 result: 40.00575378955945
Score: 0.49569
=============================
5 Forest's; Func runs 10000 result: 0.41673083215719087
Score: 0.23572
25 Forest's; Func runs 10000 result: 0.16700842421505407
Score: 0.09447
500 Forest's; Func runs 10000 result: 0.049538421252065555
Score: 0.02802
=============================
5 Megacity's; Func runs 10000 result: 2.7600000000000002
Score: 0.23000
25 Megacity's; Func runs 10000 result: 0.9039999999999999
Score: 0.07533
500 Megacity's; Func runs 10000 result: 0.28
Score: 0.02333
=============================
All score: 2.53305

Quando alteramos a distribuição de variáveis aleatórias no algoritmo de simulação de têmpera, assim como em qualquer outro algoritmo, isso certamente influenciará seu funcionamento e resultados. Na fórmula original do algoritmo, é utilizada a distribuição uniforme para gerar passos aleatórios na exploração do espaço de soluções. Essa distribuição garante probabilidades iguais para todos os possíveis passos.

Quando substituímos a distribuição uniforme pela distribuição normal, as propriedades probabilísticas do algoritmo mudaram. A distribuição normal tem um pico ao redor do valor médio e diminui à medida que se afasta do médio. Isso significa que os passos aleatórios gerados usando a distribuição normal estarão concentrados em torno do valor médio, tornando improváveis os passos que estão muito distantes do médio. No nosso caso, o "valor médio" é o valor inicial da coordenada que queremos melhorar.

Essa mudança na distribuição, obviamente, leva a passos menos variados na exploração do espaço de soluções. Parece que o algoritmo se torna mais local e menos capaz de explorar regiões mais distantes ou menos prováveis do espaço de soluções.

Os testes apresentados acima mostram que, neste caso, o uso da distribuição normal levou a uma pequena, mas estatisticamente significativa, piora nos resultados finais em comparação com a variável aleatória uniformemente distribuída (como refletido na primeira parte do artigo). Esses resultados foram obtidos usando dois desvios padrão, e o aumento do valor de sigma (desvio padrão) leva a uma piora estatisticamente significativa nos resultados.

Assim, concluímos que alterar a forma da distribuição para uma mais pontiaguda, neste caso específico, piora os resultados.

Agora que percebemos que "afunilar" a forma da distribuição no algoritmo original não é útil, vamos considerar outra abordagem. Suponhamos que, no algoritmo original, as moléculas no metal, ou melhor, os cristais inteiros dentro da zona de difusão, não têm a capacidade de trocar energia para distribuí-la uniformemente por todo o volume do metal. Nesse caso, podemos propor a seguinte ideia: permitir que os cristais troquem moléculas no processo de troca de energia.

Esse processo de troca de moléculas entre cristais com diferentes energias permitirá a transferência de coordenadas entre os agentes. Assim, as moléculas se tornarão transportadoras de energia, capazes de suavizar a distribuição de energia por todo o volume do metal. Como resultado dessa interação entre a rede cristalina e as moléculas, a energia será distribuída mais uniformemente, permitindo alcançar uma configuração mais estável e ótima do sistema. Ou seja, tentaremos aumentar a isotropia na estrutura do metal.

A isotropia é a propriedade de um objeto ou sistema de manter as mesmas características ou propriedades em todas as direções. Em termos mais simples, um objeto ou sistema é isotrópico se parecer e se comportar da mesma maneira em qualquer direção. Assim, a isotropia implica a ausência de direção ou orientação preferencial, e o objeto ou sistema é considerado igual ou homogêneo em todas as direções.

Para realizar um alinhamento simulado das propriedades no metal em todas as direções (aumento da isotropia), precisaremos fazer alterações no método "Moving".

A lógica do código é a seguinte: ocorre uma iteração por cada elemento da população "popSize" e cada coordenada "coords":

  • gera-se um número inteiro aleatório "r" no intervalo de 0 a "popSize" usando a função RNDfromCI, escolhendo aleatoriamente um agente na população
  • verifica-se a condição: se o valor da função de adaptação do agente selecionado for maior que o valor da adaptabilidade do agente alterado, a coordenada do melhor é copiada, caso contrário, a coordenada do agente não muda
  • o número aleatório "rnd" no intervalo [-0,1;0,1] é gerado usando a função RNDfromCI
  • o valor da coordenada é atualizado adicionando a ele o produto de "rnd", (rangeMax[c] - rangeMin[c]) e "d", ou seja, adicionamos um incremento aleatório na faixa de difusão
  • a coordenada obtida é verificada com a função SeInDiSp para garantir que esteja dentro do intervalo permitido e com o passo requerido
int    r   = 0;
double rnd = 0.0;

for (int i = 0; i < popSize; i++)
{
  for (int c = 0; c < coords; c++)
  {
      
    r = (int)RNDfromCI (0, popSize);
    if (r >= popSize) r = popSize - 1;

    if (a [r].fPrev > a [i].fPrev)
    {
      a [i].c [c] = a [r].cPrev [c];
    }
    else
    {
      a [i].c [c] = a [i].cPrev [c];
    }
      
    rnd = RNDfromCI (-0.1, 0.1);
    a [i].c [c] = a [i].c [c] + rnd * (rangeMax [c] - rangeMin [c]) * d;
    a [i].c [c] = SeInDiSp (a [i].c [c], rangeMin [c], rangeMax [c], rangeStep [c]);
  }
}

Resultados da têmpera com os mesmos parâmetros com distribuição uniforme e com adição de isotropia:

C_AO_SIA:50:1000.0:0.1:0.1
=============================
5 Rastrigin's; Func runs 10000 result: 80.52391137534615
Score: 0.99774
25 Rastrigin's; Func runs 10000 result: 77.70887543197314
Score: 0.96286
500 Rastrigin's; Func runs 10000 result: 57.43358792423487
Score: 0.71163
=============================
5 Forest's; Func runs 10000 result: 1.5720970326889474
Score: 0.88926
25 Forest's; Func runs 10000 result: 1.0118351454323513
Score: 0.57234
500 Forest's; Func runs 10000 result: 0.3391169587652742
Score: 0.19182
=============================
5 Megacity's; Func runs 10000 result: 6.76
Score: 0.56333
25 Megacity's; Func runs 10000 result: 5.263999999999999
Score: 0.43867
500 Megacity's; Func runs 10000 result: 1.4908
Score: 0.12423
=============================
All score: 5.45188

O aumento da isotropia, processo em que ocorre a troca de moléculas entre cristais com diferentes energias, melhorou significativamente os resultados de desempenho do algoritmo, reivindicando uma posição de liderança.

Conclusões que podem ser tiradas, motivadas pelo processo descrito:

  • Transmissão de coordenadas entre agentes: a troca de moléculas entre cristais com diferentes energias permite a transmissão de informações de coordenadas entre os agentes no algoritmo. Isso contribui para uma busca mais eficiente e rápida da solução ótima, pois as informações sobre boas soluções são transmitidas a outros agentes.
  • Suavização da distribuição energética: o processo de troca de moléculas entre cristais com diferentes energias permite suavizar a distribuição energética por todo o volume do metal. Isso significa que a energia será mais uniformemente distribuída, ajudando a evitar mínimos locais e a alcançar uma configuração mais estável e otimizada do sistema.

Agora, após a melhoria significativa dos resultados com o aumento da isotropia, tentemos novamente adicionar a distribuição normal (primeiro realizamos a operação de aumento da isotropia e aos valores obtidos adicionamos o incremento com distribuição normal).

Resultados da têmpera com adição de aumento de isotropia + distribuição normal:

C_AO_SIA:50:1000.0:0.1:0.05
=============================
5 Rastrigin's; Func runs 10000 result: 78.39172420614801
Score: 0.97132
25 Rastrigin's; Func runs 10000 result: 66.41980717898778
Score: 0.82298
500 Rastrigin's; Func runs 10000 result: 47.62039509425823
Score: 0.59004
=============================
5 Forest's; Func runs 10000 result: 1.243327107341557
Score: 0.70329
25 Forest's; Func runs 10000 result: 0.7588262864735575
Score: 0.42923
500 Forest's; Func runs 10000 result: 0.13750740782669305
Score: 0.07778
=============================
5 Megacity's; Func runs 10000 result: 6.8
Score: 0.56667
25 Megacity's; Func runs 10000 result: 2.776
Score: 0.23133
500 Megacity's; Func runs 10000 result: 0.46959999999999996
Score: 0.03913
=============================
All score: 4.43177

Os resultados pioraram significativamente.

A hipótese de que, se a simples geração de incrementos com distribuição normal no algoritmo de simulação de têmpera não trouxe melhorias, então, talvez, após aplicar o aumento da isotropia, o incremento com distribuição normal daria o efeito esperado? As expectativas não se confirmaram. Isso pode ser explicado pelo fato de que, após aplicar o aumento da isotropia, a distribuição uniforme ainda proporciona uma exploração mais equilibrada do espaço de soluções, permitindo que o algoritmo explore diferentes áreas sem grandes distorções nas preferências. A tentativa de refinar as coordenadas existentes com a distribuição normal não teve sucesso, o que limita uma exploração mais ampla das áreas pelo algoritmo.

Realizaremos um último experimento para finalmente tirar conclusões a favor da distribuição uniforme de incrementos de variáveis aleatórias após aplicar o aumento da isotropia. Tentaremos explorar de forma ainda mais precisa as proximidades das coordenadas conhecidas, usando para isso a distribuição quadrática. Se uma variável aleatória com distribuição uniforme é elevada ao quadrado, a distribuição resultante será chamada de distribuição quadrática ou distribuição da variável aleatória ao quadrado.

Resultados do algoritmo de simulação de têmpera com os mesmos parâmetros e adição de aumento de isotropia + distribuição quadrática acentuada:

C_AO_SIA:50:1000.0:0.1:0.2
=============================
5 Rastrigin's; Func runs 10000 result: 70.23675927985173
Score: 0.87027
25 Rastrigin's; Func runs 10000 result: 56.86176837508631
Score: 0.70455
500 Rastrigin's; Func runs 10000 result: 43.100825665204596
Score: 0.53404
=============================
5 Forest's; Func runs 10000 result: 0.9361317757226002
Score: 0.52952
25 Forest's; Func runs 10000 result: 0.25320813586138297
Score: 0.14323
500 Forest's; Func runs 10000 result: 0.0570263375476293
Score: 0.03226
=============================
5 Megacity's; Func runs 10000 result: 4.2
Score: 0.35000
25 Megacity's; Func runs 10000 result: 1.296
Score: 0.10800
500 Megacity's; Func runs 10000 result: 0.2976
Score: 0.02480
=============================
All score: 3.29667

Os resultados da elevação ao quadrado de uma variável aleatória com distribuição uniforme também não tiveram um efeito positivo, com uma queda no desempenho ainda maior do que com a aplicação da distribuição normal.

Agora, vamos eliminar outro problema do algoritmo de simulação de têmpera, que é a dificuldade na escolha das configurações e da combinação da temperatura e do coeficiente de redução da temperatura, já que esses dois parâmetros se influenciam mutuamente. Para vincular os dois parâmetros, combinamos a função de redução de temperatura e a função de decisão probabilística do pior caso. Aplicaremos a função de arco cosseno hiperbólico:

(1 - delta) * (acosh (-(x^3 - 3))) / 1,765

onde:

  • delta - diferença normalizada no intervalo [0,0;1,0] dos valores da função de adaptação nas duas últimas iterações
  • x - passos normalizados das épocas do algoritmo

temp ch

Figura 1. Gráfico da dependência da toma de uma pior solução em relação à diferença de energias e ao número da época atual (y - diferença de energias, x - épocas).


3. Resultados dos testes

Impressão do funcionamento da versão final do algoritmo de simulação de têmpera isotrópico (SIA) na bancada de testes:

C_AO_SIA:100:0.01:0.1
=============================
5 Rastrigin's; Func runs 10000 result: 80.49732910930824
Score: 0.99741
25 Rastrigin's; Func runs 10000 result: 78.48411039606445
Score: 0.97246
500 Rastrigin's; Func runs 10000 result: 56.26829697982381
Score: 0.69720
=============================
5 Forest's; Func runs 10000 result: 1.6491133508905373
Score: 0.93282
25 Forest's; Func runs 10000 result: 1.3608802086313785
Score: 0.76978
500 Forest's; Func runs 10000 result: 0.31584037846210056
Score: 0.17866
=============================
5 Megacity's; Func runs 10000 result: 8.6
Score: 0.71667
25 Megacity's; Func runs 10000 result: 6.152
Score: 0.51267
500 Megacity's; Func runs 10000 result: 1.0544
Score: 0.08787
=============================
All score: 5.86552

Resultados impressionantes e, ao mesmo tempo, como você notou, agora há um parâmetro a menos.

A visualização do funcionamento do algoritmo mostra uma clara separação em clusters distintos de agentes, abrangendo todos os extremos locais significativos. A imagem lembra a cristalização real de um metal em solidificação. Chama a atenção a excelente convergência em todos os testes, incluindo, o que é muito importante, aqueles com muitas variáveis.

rastrigin

SIA na função de teste Rastrigin.

forest

SIA na função de teste Forest.

megacity

 SIA na função de teste Megacity.


O novo algoritmo de simulação de têmpera isotrópico (SIA, 2023) conquistou o segundo lugar na tabela de classificação, tirando a liderança do SDSm em dois dos testes mais difíceis (Forest aguda e Megacity discreta com 1000 variáveis).

AO

Description

Rastrigin

Rastrigin final

Forest

Forest final

Megacity (discrete)

Megacity final

Final result

10 p (5 F)

50 p (25 F)

1000 p (500 F)

10 p (5 F)

50 p (25 F)

1000 p (500 F)

10 p (5 F)

50 p (25 F)

1000 p (500 F)

1

SDSm

stochastic diffusion search M

0,99809

1,00000

0,69149

2,68958

0,99265

1,00000

0,84982

2,84247

1,00000

1,00000

0,79920

2,79920

100,000

2

SIA

simulated isotropic annealing

0,99236

0,93642

0,69858

2,62736

0,88760

0,64655

1,00000

2,53416

0,58695

0,74342

1,00000

2,33038

89,524

3

SSG

saplings sowing and growing

1,00000

0,92761

0,51630

2,44391

0,72120

0,65201

0,71181

2,08502

0,54782

0,61841

0,79538

1,96161

77,027

4

DE

differential evolution

0,98295

0,89236

0,51375

2,38906

1,00000

0,84602

0,55672

2,40274

0,90000

0,52237

0,09615

1,51852

74,777

5

HS

harmony search

0,99676

0,88385

0,44686

2,32747

0,99148

0,68242

0,31893

1,99283

0,71739

0,71842

0,33037

1,76618

71,983

6

IWO

invasive weed optimization

0,95828

0,62227

0,27647

1,85703

0,70170

0,31972

0,22616

1,24758

0,57391

0,30527

0,26478

1,14395

49,045

7

ACOm

ant colony optimization M

0,34611

0,16683

0,15808

0,67103

0,86147

0,68980

0,55067

2,10194

0,71739

0,63947

0,04459

1,40145

48,119

8

MEC

mind evolutionary computation

0,99270

0,47345

0,21148

1,67763

0,60244

0,28046

0,18122

1,06412

0,66957

0,30000

0,20815

1,17772

44,937

9

SDOm

spiral dynamics optimization M

0,69840

0,52988

0,33168

1,55996

0,59818

0,38766

0,31953

1,30537

0,35653

0,15262

0,20653

0,71568

40,713

10

NMm

Nelder-Mead method M

0,88433

0,48306

0,45945

1,82685

0,46155

0,24379

0,18613

0,89148

0,46088

0,25658

0,13435

0,85180

40,577

11

COAm

cuckoo optimization algorithm M

0,92400

0,43407

0,24120

1,59927

0,57881

0,23477

0,11764

0,93121

0,52174

0,24079

0,13587

0,89840

38,814

12

FAm

firefly algorithm M

0,59825

0,31520

0,15893

1,07239

0,50637

0,29178

0,35441

1,15256

0,24783

0,20526

0,28044

0,73352

32,943

13

ABC

artificial bee colony

0,78170

0,30347

0,19313

1,27829

0,53379

0,14799

0,09498

0,77676

0,40435

0,19474

0,11076

0,70985

30,528

14

BA

bat algorithm

0,40526

0,59145

0,78330

1,78002

0,20664

0,12056

0,18499

0,51219

0,21305

0,07632

0,13816

0,42754

29,964

15

CSS

charged system search

0,56605

0,68683

1,00000

2,25289

0,13961

0,01853

0,11590

0,27404

0,07392

0,00000

0,02769

0,10161

28,825

16

GSA

gravitational search algorithm

0,70167

0,41944

0,00000

1,12111

0,31390

0,25120

0,23635

0,80145

0,42609

0,25525

0,00000

0,68134

28,518

17

BFO

bacterial foraging optimization

0,67203

0,28721

0,10957

1,06881

0,39364

0,18364

0,14700

0,72428

0,37392

0,24211

0,15058

0,76660

27,966

18

EM

electroMagnetism-like algorithm

0,12235

0,42928

0,92752

1,47915

0,00000

0,02413

0,24828

0,27240

0,00000

0,00527

0,08689

0,09216

19,030

19

SFL

shuffled frog-leaping

0,40072

0,22021

0,24624

0,86717

0,19981

0,02861

0,01888

0,24729

0,19565

0,04474

0,05280

0,29320

13,588

20

SA

simulated annealing

0,36938

0,21640

0,10018

0,68595

0,20341

0,07832

0,07964

0,36137

0,16956

0,08422

0,08307

0,33685

13,295

21

MA

monkey algorithm

0,33192

0,31029

0,13582

0,77804

0,09927

0,05443

0,06358

0,21729

0,15652

0,03553

0,08527

0,27731

11,903

22

FSS

fish school search

0,46812

0,23502

0,10483

0,80798

0,12730

0,03458

0,04638

0,20827

0,12175

0,03947

0,06588

0,22710

11,537

23

IWDm

intelligent water drops M

0,26459

0,13013

0,07500

0,46972

0,28358

0,05445

0,04345

0,38148

0,22609

0,05659

0,04039

0,32307

10,675

24

PSO

particle swarm optimisation

0,20449

0,07607

0,06641

0,34696

0,18734

0,07233

0,15473

0,41440

0,16956

0,04737

0,01556

0,23250

8,423

25

RND

random

0,16826

0,09038

0,07438

0,33302

0,13381

0,03318

0,03356

0,20055

0,12175

0,03290

0,03915

0,19380

5,097

26

GWO

grey wolf optimizer

0,00000

0,00000

0,02093

0,02093

0,06514

0,00000

0,00000

0,06514

0,23478

0,05789

0,02034

0,31301

1,000


Considerações finais

Com base nos experimentos realizados e na análise dos resultados, podemos fazer as seguintes conclusões:

  1. O novo algoritmo de simulação de têmpera isotrópico (SIA) demonstra resultados impressionantes na otimização de funções com muitas variáveis. Isso indica a eficácia do algoritmo na busca de soluções ótimas em espaços de alta dimensionalidade.
  2. O algoritmo mostra resultados especialmente bons em funções com características agudas e discretas. Isso pode ser atribuído ao fato de que o SIA permite explorar uniformemente o espaço de soluções e encontrar pontos ótimos, mesmo em áreas complexas e irregulares.
  3. Em geral, o novo algoritmo SIA é uma ferramenta poderosa de otimização. Graças à combinação bem-sucedida de estratégias de busca, o algoritmo possui propriedades qualitativamente novas e demonstra alta eficiência na busca de soluções ótimas.

No novo algoritmo SIA, além do tamanho da população, há apenas dois parâmetros, a temperatura e o coeficiente de difusão, em vez de três como era no SA. Além disso, agora o parâmetro de temperatura é muito simples de entender e é expresso em partes de uma temperatura abstrata, sendo por padrão igual a 0.01.

Com base nos estudos realizados e na análise dos resultados, podemos recomendar com total confiança o algoritmo SIA para uso no treinamento de redes neurais, em tarefas de trading com muitos parâmetros e em problemas complexos de combinatória.

rating table

Figura 2. Graduação de cores dos algoritmos nos testes correspondentes.

chart

Figura 3. Histograma dos resultados dos testes dos algoritmos (na escala de 0 a 100, quanto maior, melhor,

no arquivo há um script para calcular a tabela de classificação de acordo com a metodologia descrita neste artigo).

Prós e contras do algoritmo de simulação de têmpera isotrópico (SIA):

Prós:
  1. Número mínimo de parâmetros externos.
  2. Alta eficiência na resolução de diversas tarefas.
  3. Baixa carga nos recursos computacionais.
  4. Facilidade na implementação do algoritmo.
  5. Resistência a travamentos.
  6. Altos resultados tanto em funções suaves quanto em complexas e discretas.
  7. Alta convergência.
Contras:
  1. Não foram observadas.

O artigo inclui um arquivo com as versões atualizadas e atuais dos códigos dos algoritmos descritos nos artigos anteriores. O autor do artigo não se responsabiliza pela precisão absoluta na descrição dos algoritmos canônicos, pois muitas modificações foram feitas para melhorar as capacidades de busca. As conclusões e opiniões apresentadas nos artigos são baseadas nos resultados dos experimentos conduzidos.

Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/13870

Arquivos anexados |
Ciência de Dados e Aprendizado de Máquina (Parte 16): Uma nova perspectiva sobre árvores de decisão Ciência de Dados e Aprendizado de Máquina (Parte 16): Uma nova perspectiva sobre árvores de decisão
Na última parte da nossa série sobre aprendizado de máquina e trabalho com big data, voltamos a falar sobre as árvores de decisão. Este artigo é destinado a traders que desejam entender o papel das árvores de decisão na análise de tendências de mercado. Aqui, reunimos todas as informações principais sobre a estrutura, o propósito e o uso dessas árvores. Vamos explorar as raízes e os ramos das árvores algorítmicas e descobrir como elas podem ser aplicadas na tomada de decisões de negociação. Vamos juntos dar um novo olhar às árvores de decisão e ver como elas podem ajudar a superar as dificuldades nos mercados financeiros.
EA de grid-hedge modificado em MQL5 (Parte I): Criando um EA de hedge simples EA de grid-hedge modificado em MQL5 (Parte I): Criando um EA de hedge simples
Criaremos um EA de hedge simples como base para nosso EA Grid-Hedge mais avançado, que será uma mistura de estratégias clássicas de grade e de hedge clássicas. Ao final deste artigo, você saberá como criar uma estratégia de hedge simples e o que as pessoas estão dizendo sobre a lucratividade dessa estratégia.
Desenvolvendo um sistema de Replay (Parte 50): Complicando as coisas (II) Desenvolvendo um sistema de Replay (Parte 50): Complicando as coisas (II)
Vamos resolver a questão da ID do gráfico, mas ao mesmo tempo, vamos começar a garantir que o usuário possa fazer uso de um template pessoal, voltado para analisar o ativo que ele gostaria de efetuar estudos e simulações. O conteúdo exposto aqui, visa e tem como objetivo, pura e simplesmente a didática. De modo algum deve ser encarado como sendo, uma aplicação cuja finalidade não venha a ser o aprendizado e estudo dos conceitos mostrados.
Paradigmas de programação (Parte 1): Abordagem procedural para desenvolvimento de Expert Advisors com base na dinâmica de preços Paradigmas de programação (Parte 1): Abordagem procedural para desenvolvimento de Expert Advisors com base na dinâmica de preços
Aprenda sobre paradigmas de programação e suas aplicações no código MQL5. Neste artigo, exploramos as características da programação procedural, além de oferecer exemplos práticos. Você aprenderá como desenvolver um Expert Advisor baseado na dinâmica de preços (Price Action), utilizando o indicador EMA e dados de velas. Além disso, o artigo apresenta o paradigma da programação funcional.