English Русский Deutsch
preview
Algoritmos de otimização populacional: Resistência a ficar preso em extremos locais (Parte I)

Algoritmos de otimização populacional: Resistência a ficar preso em extremos locais (Parte I)

MetaTrader 5Exemplos | 7 agosto 2024, 09:46
21 0
Andrey Dik
Andrey Dik

Conteúdo

1. Introdução
2. Definição de uma tarefa
3. Mudanças no código
4. Algoritmos
5. Conclusões preliminares


1. Introdução

Esta é uma pesquisa única, cuja ideia surgiu enquanto eu respondia perguntas que surgiram durante a discussão de um dos meus artigos. Espero que os leitores apreciem o valor e a originalidade deste trabalho.

Meus pensamentos e ideias que levaram a esta pesquisa são o resultado de uma profunda imersão no tópico e paixão pela pesquisa científica. Acredito que este trabalho possa se tornar uma contribuição importante para o campo da otimização algorítmica, atraindo a atenção de pesquisadores e praticantes.

Neste experimento, proponho realizar um teste com o objetivo de avaliar a resistência dos algoritmos a ficarem presos em extremos locais e, em vez de posicionar aleatoriamente os agentes na primeira iteração em todo o campo do espaço de busca, colocá-los no mínimo global. O objetivo do experimento é buscar um máximo global.

Em tal cenário, onde todos os agentes de busca do algoritmo estão localizados em um ponto, enfrentamos um fenômeno interessante - uma população degenerada. Isso é como um momento de congelamento no tempo, onde a diversidade na população é reduzida ao mínimo. Embora este cenário seja artificial, ele nos permite obter conclusões interessantes e avaliar o impacto da redução da diversidade na população sobre o resultado. O algoritmo deve ser capaz de sair de tal gargalo e alcançar um máximo global.

Neste tipo de teste de estresse para algoritmos de otimização, podemos revelar os segredos da interação entre os agentes, sua cooperação ou competição, e entender como esses fatores afetam a velocidade de alcançar o ótimo. Essa análise abre novos horizontes para a compreensão da importância da diversidade em uma população para a operação eficiente de algoritmos e nos permite desenvolver estratégias para manter essa diversidade a fim de alcançar melhores resultados.

Para realizar o experimento, precisamos primeiro inicializar as coordenadas dos agentes forçadamente fora do algoritmo, usando as coordenadas do mínimo global, antes de medir a função de aptidão na primeira época.

Tal experimento nos permitirá avaliar a resistência a condições extremamente difíceis e a capacidade de superar limitações.


2. Definição de uma tarefa

Imagine que você está em um vale profundo, cercado por uma escuridão densa. Seus olhos estão vendados, impedindo que você veja o mundo ao seu redor. Você sente um vento frio soprar em seu rosto e seu coração bate forte, como se tentando sair do peito, enfatizando sua ansiedade e incerteza.

Você começa a se mover dando o primeiro passo à frente. Seus pés sentem o chão, e você se move gradualmente ao longo do vale, com cada passo mais próximo da liberdade, e sua mente se enche de determinação. Finalmente, quando você alcança a borda, uma vista deslumbrante se abre diante de você. A planície lisa como vidro se estende diante de você como uma tela infinita. Os penhascos íngremes isolados que surgem à distância evocam sentimentos mistos de admiração e desafio. No entanto, apesar dessa bela panorâmica, você ainda não pode vê-la.

Você decide confiar em seus sentidos e intuição para determinar a direção, na qual se mover e alcançar o topo do penhasco mais alto. Agora imagine que essa tarefa difícil é enfrentada por um algoritmo baseado na função discreta do teste Megacity. Este algoritmo, como você, é limitado por suas capacidades e não pode ver ou sentir o ambiente diretamente. Ele deve usar suas habilidades de computação e lógica para decidir o melhor caminho para o topo do penhasco mais alto. Assim, esse problema na função discreta do teste Megacity é um desafio difícil para um algoritmo que, como você, enfrenta incertezas.

No entanto, as funções Hilly e Forest também apresentam um problema difícil em tais circunstâncias. Vamos dar uma olhada nessas funções familiares para apreciar a complexidade da tarefa que se aproxima para os algoritmos.

Hilly road

Função Hilly


Forest road

Função Forest


Megacity road

Função Megacity


Imagine que você é um algoritmo, a personificação do poder computacional e do pensamento lógico. Você não é apenas sequências secas de código ou equações no papel, você ganha vida e assume o papel de pesquisador. Sua mente está cheia de perguntas e hipóteses, e você se esforça para resolver o mistério que está diante de você. Você está imerso em um mundo de dados e informações, analisando, comparando e destacando fatores-chave, enquanto suas habilidades de computação estão em pleno vapor. Você começa a construir diferentes modelos e cenários, explorando possíveis caminhos para resolver um problema e tentando diferentes combinações e opções, e sua criatividade leva a novas descobertas. Mas o caminho para a solução nem sempre é fácil. Você enfrenta desafios que podem parecer intransponíveis, mas você não desiste. Você supera obstáculos e distrações, um por um, chegando mais perto de seu objetivo a cada passo. E finalmente, quando você encontra a solução, é como um momento de iluminação. Sua mente é iluminada com a luz brilhante da compreensão e você vê todas as peças se encaixando.

No contexto desta imagem, o algoritmo de otimização enfrenta a tarefa de maximizar uma função que possui uma topologia complexa com muitos máximos locais. Aqui está uma descrição mais detalhada do problema:

  • Máximos locais. No caminho do ponto de partida (rotulado como "min") até o ponto final (rotulado como "max"), o algoritmo encontra muitos máximos locais. Isso pode levar o algoritmo a ficar preso em uma armadilha local sem alcançar o extremo global. Esse é um grande problema em problemas de otimização. Por exemplo, algoritmos baseados em descida de gradiente tendem a "subir" para o máximo mais próximo e, se este for um máximo local, eles "ficam presos".
  • Alta dimensão. Se considerarmos uma função em um espaço multidimensional, o número de máximos locais aumenta drasticamente, o que complica o problema. Em altas dimensões, o espaço se torna "vazio", o que torna o problema ainda mais difícil devido ao fato de que o algoritmo não tem nada a que se apegar.
  • Complexidade da superfície da função. A superfície da função pode ser muito complexa, com muitos picos e vales, tornando o processo de otimização mais demorado. Isso exige que o algoritmo seja capaz de pular sobre máximos locais e escalar até o máximo global. 
  • Convergência e velocidade de convergência. A convergência do algoritmo ao máximo da função pode ser desacelerada devido à distância do ponto final em relação ao ponto de partida, o que pode exigir iterações adicionais para alcançar o objetivo.
  • Pesquisa de área. O algoritmo pode precisar explorar adicionalmente a região em busca de um máximo global, o que pode levar a um aumento na complexidade computacional.
Para resumir a descrição do problema, podemos destacar a diferença entre uma situação típica de otimização, onde os agentes começam seu movimento no espaço de busca distribuídos uniformemente, e uma situação onde é necessário não apenas "revelar" informações existentes, mas sim explorar e expandir seus conhecimentos e experiências em áreas inexploradas. Definir o problema dessa forma torna-se especialmente valioso em casos onde já temos algumas soluções obtidas em sessões de otimização anteriores e queremos começar a partir desse "ponto" de solução, em vez de simplesmente cristalizar informações existentes.


3. Mudanças no código

Para colocar os agentes em um ponto, atribua as coordenadas do mínimo global da função de teste aos agentes apropriados da população. Em geral, esse procedimento se parece com isso:

if (epochCNT == 1)
{
  for (int set = 0; set < ArraySize (AO.a); set++)
  {
    for (int i = 0; i < funcCount; i++)
    {
      AO.a [set].c [i * 2]     = f.GetMinFuncX ();
      AO.a [set].c [i * 2 + 1] = f.GetMinFuncY ();
    }
  }
}

Para alguns algoritmos, não é suficiente simplesmente colocar os agentes em um ponto no espaço de busca. Informações adicionais devem ser inseridas. Por exemplo, no caso do algoritmo SDSm, também é necessário especificar o setor correspondente para cada coordenada. Por outro lado, ao usar o algoritmo BGA, é necessário converter os valores das coordenadas de uma representação real para uma binária, o que implica mudanças adicionais no código do algoritmo. Para BGA, a localização dos agentes em um ponto se parecerá com isso:

//==================
if (epochCNT == 1)
{
  for (int set = 0; set < ArraySize (AO.a); set++)
  {
    for (int i = 0; i < funcCount; i++)
    {
      AO.a [set].DoubleToGene (f.GetMinFuncX (), i * 2);
      AO.a [set].DoubleToGene (f.GetMinFuncY (), i * 2 + 1);
    }

    AO.a [set].ExtractGenes ();
  }
}
//==================

Como pode ser visto a partir deste código, ocorre aqui a transformação necessária das coordenadas no código binário dos genes. Atualmente, estou trabalhando na unificação do processo de posicionamento dos agentes nas coordenadas desejadas. Este estudo apresenta os códigos-fonte em seu estado atual. Quase todos os algoritmos requereram uma bancada de teste personalizada devido à natureza de sua arquitetura. Fique atento para novos artigos para receber atualizações sobre os algoritmos. A simplificação do posicionamento das coordenadas na população, bem como sua unificação, será trazida a um padrão comum.


4. Algoritmos

Ao passar para a análise do comportamento dos algoritmos em nosso teste único, começamos a discutir os algoritmos que demonstraram os piores resultados. O que é especialmente surpreendente é que alguns deles, que anteriormente ocupavam posições bastante altas nos rankings em testes padrão, tiveram um desempenho ruim em nosso teste incomum. Isso sugere que o sucesso dos algoritmos pode depender não apenas de sua eficiência geral, mas também de sua capacidade de se adaptar a condições específicas e características do problema. Esses resultados inesperados destacam a importância de conduzir uma variedade de testes e estudos para obter uma compreensão mais profunda do desempenho dos algoritmos de otimização em diferentes contextos.

Abaixo estão os relatórios de operação dos algoritmos, que devem ser lidos da seguinte forma:

  • C_AO_FSS:50;0.01;0.8 - nome do algoritmo e parâmetros externos
  • 5 Hilly's - nome da função de teste e seu número no teste
  •  Execuções da função: 10000 - número de execuções
  • resultado: 0.32457068874346456 - resultado obtido, onde 0.0 é o mínimo da função de teste e 1.0 é o máximo. Quanto maior o valor, melhor
  • Pontuação total: 1.33084 - valor total dos pontos obtidos. Quanto maior o valor, melhor

Differential Evolution - Evolução Diferencial (DE)

C_AO_DE:50;0.2;0.8
=============================
5 Hilly's; Execuções da função: 10000; resultado: 0.0
25 Hilly's; Execuções da função: 10000; resultado: 0.0
500 Hilly's; Execuções da função: 10000; resultado: 0.0
=============================
5 Forest's; Execuções da função: 10000; resultado: 0.0
25 Forest's; Execuções da função: 10000; resultado: 0.0
500 Forest's; Execuções da função: 10000; resultado: 0.0
=============================
5 Megacity's; Execuções da função: 10000; resultado: 0.0
25 Megacity's; Execuções da função: 10000; resultado: 0.0
500 Megacity's; Execuções da função: 10000; resultado: 0.0
=============================
Pontuação total: 0.00000

Infelizmente, até mesmo um dos algoritmos mais poderosos na tabela de classificação falhou completamente em nosso teste. Neste caso, os agentes ficaram estagnados, incapazes de se mover. A razão para essa falha é que cada nova posição de um agente depende das posições de três outros agentes, e se todos eles terminarem no mesmo ponto, nenhum deles será capaz de atualizar suas coordenadas. Essa situação destaca a importância de analisar cuidadosamente as interações entre os agentes e controlar adequadamente seus movimentos para concluir com sucesso o problema de otimização. Falhas inesperadas como essas podem motivar mais pesquisas e melhorias no desenvolvimento de algoritmos que possam lidar eficazmente com tais complexidades.

Não fornecerei uma impressão da bancada de testes para outros algoritmos que falharam completamente no teste.

Electromagnetic algorithm - Algoritmo Eletromagnético (EM)

O algoritmo EM encontrou o problema da incapacidade de atualizar as coordenadas dos agentes durante a otimização. Neste caso, as partículas colapsaram sob a influência da atração eletromagnética, o que fez com que os agentes se combinassem em um aglomerado.


Gravity search algorithm - Algoritmo de busca por gravidade (GSA)

As forças da gravidade fizeram com que todos os objetos estivessem em um ponto e permanecessem lá - eles foram atraídos para o centro, semelhante a um buraco negro.


Artificial ant colony algorithm - Algoritmo de colônia de formigas artificiais (ACCom

O problema com este algoritmo foi a falta de caminhos para o movimento das formigas que se moveriam com base no cheiro de feromônios. Neste caso, como as formigas começaram de um ponto, os caminhos entre elas não foram formados, o que levou a dificuldades no movimento e na coordenação das ações das formigas.


Fish School Search - Pesquisa de cardume de peixes (FSS)

C_AO_FSS:50;0.01;0.8
=============================
5 Hilly's; Execuções da função: 10000; resultado: 0.32457068874346456
25 Hilly's; Execuções da função: 10000; resultado: 0.27938488291267094
500 Hilly's; Execuções da função: 10000; resultado: 0.2343201202260512
=============================
5 Forest's; Execuções da função: 10000; resultado: 0.18964347858030822
25 Forest's; Execuções da função: 10000; resultado: 0.16146315945349987
500 Forest's; Execuções da função: 10000; resultado: 0.14145987387955847
=============================
5 Megacity's; Execuções da função: 10000; resultado: 0.0
25 Megacity's; Execuções da função: 10000; resultado: 0.0
500 Megacity's; Execuções da função: 10000; resultado: 0.0
=============================
Pontuação total: 1.33084

Neste algoritmo, os peixes usam a diferença na aptidão entre as iterações anteriores e as últimas para determinar sua direção de movimento. Enquanto nas funções de Hilly e Forest os peixes percebem mudanças na paisagem, executar o algoritmo na superfície plana de Megacity confunde os peixes, privando-os de orientação. Comportamentos incríveis dos peixes ocorrem ao iniciar em superfícies suaves que têm um gradiente. No entanto, se o ponto de partida estiver no topo do extremum local, e não no buraco, os peixes são improváveis de se moverem, mesmo nas funções de Hilly e Forest.


Simulated Isotropic Annealing - Recozimento Isotrópico Simulado (SIA)

C_AO_SIA:100:0.01:0.1
=============================
5 Hilly's; Execuções da função: 10000; resultado: 0.32958446477979136
25 Hilly's; Execuções da função: 10000; resultado: 0.32556359155723036
500 Hilly's; Execuções da função: 10000; resultado: 0.27262289744765306
=============================
5 Forest's; Execuções da função: 10000; resultado: 0.1940720887058382
25 Forest's; Execuções da função: 10000; resultado: 0.1935893813273654
500 Forest's; Execuções da função: 10000; resultado: 0.16409411642496857
=============================
5 Megacity's; Execuções da função: 10000; resultado: 0.0
25 Megacity's; Execuções da função: 10000; resultado: 0.0
500 Megacity's; Execuções da função: 10000; resultado: 0.0
=============================
Pontuação total: 1.47953

O algoritmo de recozimento isotrópico simulado exibe uma combinação única de características que lembram a operação do FSS, mas com diferenças significativas. Neste algoritmo, o movimento em diferentes direções a partir do ponto de partida ocorre de maneira mais energética e ativa do que no FSS, criando uma sensação de criatividade vigorosa na busca da solução ótima. Semelhante ao FSS, o algoritmo de simulação de recozimento isotrópico usa diferenças nos valores da função de aptidão para guiar o movimento. No entanto, aqui o movimento é influenciado por uma diminuição gradual da temperatura, que ao longo do tempo leva ao "congelamento" das partículas em certos pontos do espaço.


Evolutionary strategies - Estratégias evolutivas ((PO)ES)

C_AO_(PO)ES:100:10:0.025:8.0
=============================
5 Hilly's; Execuções da função: 10000; resultado: 0.32231823718105856
25 Hilly's; Execuções da função: 10000; resultado: 0.3228736374003839
500 Hilly's; Execuções da função: 10000; resultado: 0.2797261292300971
=============================
5 Forest's; Execuções da função: 10000; resultado: 0.19410491957153192
25 Forest's; Execuções da função: 10000; resultado: 0.1875135077472832
500 Forest's; Execuções da função: 10000; resultado: 0.15801830580073034
=============================
5 Megacity's; Execuções da função: 10000; resultado: 0.1292307692307692
25 Megacity's; Execuções da função: 10000; resultado: 0.12553846153846154
500 Megacity's; Execuções da função: 10000; resultado: 0.08198461538461577
=============================
Pontuação total: 1.80131

Este algoritmo foi o primeiro da lista que conseguiu completar todos os testes com sucesso. Embora o uso do termo "completou com sucesso" pareça bastante subjetivo, de fato ele passou em cada um deles com pelo menos algum resultado diferente de zero. Notavelmente, há uma tendência da população a se dividir em grupos separados. No entanto, o entusiasmo inicial do algoritmo dura apenas por um curto período - os agentes rapidamente param de procurar na primeira colina mais próxima, provavelmente assumindo que já alcançaram o sucesso.

É especialmente interessante que, no início, os agentes, ao se dividirem em grupos, inspirem otimismo no observador ao se moverem em direções diferentes, mas a decepção vem rapidamente: assim que um dos grupos alcança uma melhoria notável em sua posição, todos os outros grupos imediatamente mudam de direção, correndo em direção ao líder. Esses momentos evocam sentimentos e emoções mistos - desde o deleite até a decepção. A interação dos agentes neste algoritmo lembra a vida com todas as suas surpresas e mutabilidade.


Monkey Algorithm - Algoritmo do macaco (MA

C_AO_MA:50;0.01;0.9;50
=============================
5 Hilly's; Execuções da função: 10000; resultado: 0.32874856274894027
25 Hilly's; Execuções da função: 10000; resultado: 0.30383823957660194
500 Hilly's; Execuções da função: 10000; resultado: 0.2475564907358033
=============================
5 Forest's; Execuções da função: 10000; resultado: 0.20619304546795353
25 Forest's; Execuções da função: 10000; resultado: 0.1733511102614089
500 Forest's; Execuções da função: 10000; resultado: 0.14786586882293234
=============================
5 Megacity's; Execuções da função: 10000; resultado: 0.17538461538461542
25 Megacity's; Execuções da função: 10000; resultado: 0.1436923076923077
500 Megacity's; Execuções da função: 10000; resultado: 0.09555384615384681
=============================
Pontuação total: 1.82218

No contexto deste algoritmo, os macacos continuam a se mover em uma direção escolhida de maneira bastante isolada, mesmo se essa direção acabar sendo a errada. Esse comportamento único permite que os agentes explorem o espaço de maneira mais eficiente, espalhando-se mais longe do ponto de partida. Eles fazem longos "saltos no desconhecido", especialmente impressionantes na função discreta Megacity, onde não há incremento de aptidão em superfícies horizontais, o que facilita o alcance de áreas distantes.

No entanto, apesar dessa capacidade de exploração, ela se mostra insuficiente para atingir o objetivo principal à medida que o número de iterações disponíveis chega ao fim. É importante notar o fascinante comportamento visual do algoritmo, que realmente lembra o movimento caótico de macacos em um bando, criando um espetáculo incrível e despertando interesse em sua pesquisa e melhoria contínua.


Simulated Annealing - Simulado de Têmpera (SA)

C_AO_SA:50:1000.0:0.1:0.2
=============================
5 Hilly's; Execuções da função: 10000; resultado: 0.3266993983850477
25 Hilly's; Execuções da função: 10000; resultado: 0.30166692301946135
500 Hilly's; Execuções da função: 10000; resultado: 0.2545648344562219
=============================
5 Forest's; Execuções da função: 10000; resultado: 0.1939959116807614
25 Forest's; Execuções da função: 10000; resultado: 0.17721159702946082
500 Forest's; Execuções da função: 10000; resultado: 0.15159936395874307
=============================
5 Megacity's; Execuções da função: 10000; resultado: 0.2584615384615384
25 Megacity's; Execuções da função: 10000; resultado: 0.15292307692307697
500 Megacity's; Execuções da função: 10000; resultado: 0.10135384615384675
=============================
Pontuação total: 1.91848

No algoritmo de têmpera simulado, ao contrário de seu "parente" SIA (que, aliás, ocupa uma posição muito mais alta no ranking), o comportamento é mais caótico, o que é até perceptível a olho nu nas visualizações. Essa natureza caótica da simulação de "têmpera", no entanto, ajuda a alcançar resultados ligeiramente melhores. No entanto, esses feitos não são grandes o suficiente para imortalizar este algoritmo no hall da fama dos algoritmos notáveis, mas a melhoria é perceptível e merece reconhecimento.


Firefly algorithm - Algoritmo Vaga-lumes (FAm)

C_AO_FAm:50;0.1;0.3;0.1
=============================
5 Hilly's; Execuções da função: 10000; resultado: 0.32461162859403175
25 Hilly's; Execuções da função: 10000; resultado: 0.31981492599317524
500 Hilly's; Execuções da função: 10000; resultado: 0.25932958993768923
=============================
5 Forest's; Execuções da função: 10000; resultado: 0.2124297717365277
25 Forest's; Execuções da função: 10000; resultado: 0.21595138588924906
500 Forest's; Execuções da função: 10000; resultado: 0.1577543024576405
=============================
5 Megacity's; Execuções da função: 10000; resultado: 0.2246153846153846
25 Megacity's; Execuções da função: 10000; resultado: 0.1987692307692308
500 Megacity's; Execuções da função: 10000; resultado: 0.12084615384615457
=============================
Pontuação total: 2.03412

FA é um dos meus algoritmos favoritos. Seu apelo é evidente não apenas no belo nome em si, mas também na ideia elegante por trás dele, bem como no comportamento elegante dos vaga-lumes. Essas criaturas luminosas místicas são capazes de se aproximar instantaneamente dos extremos locais mais próximos a uma velocidade tal que é realmente difícil acompanhá-las. No entanto, esse grande espetáculo é seguido por estagnação quando os agentes se encontram presos em máximos locais, incapazes de explorar mais e alcançar um ótimo global.

Embora possa parecer frustrante, esse momento de estagnação abre uma oportunidade para melhorar o algoritmo. Ao introduzir mecanismos para superar armadilhas locais, o FA pode alcançar novos horizontes de eficiência e precisão. Assim, mesmo nos momentos em que os vaga-lumes param, vemos não apenas o fim, mas um novo começo - a oportunidade de melhorar e desenvolver esse algoritmo incrível.


Bacterial Foraging Optimization - Otimização de Forrageamento Bacteriano (BFO)

C_AO_BFO:50;0.01;0.3;100
=============================
5 Hilly's; Execuções da função: 10000; resultado: 0.3226339934200066
25 Hilly's; Execuções da função: 10000; resultado: 0.2925193012197403
500 Hilly's; Execuções da função: 10000; resultado: 0.2554221763445149
=============================
5 Forest's; Execuções da função: 10000; resultado: 0.2111053636851011
25 Forest's; Execuções da função: 10000; resultado: 0.20536292110181784
500 Forest's; Execuções da função: 10000; resultado: 0.15743855819242952
=============================
5 Megacity's; Execuções da função: 10000; resultado: 0.27999999999999997
25 Megacity's; Execuções da função: 10000; resultado: 0.19415384615384618
500 Megacity's; Execuções da função: 10000; resultado: 0.11735384615384695
=============================
Pontuação total: 2.03599

A capacidade das bactérias de manter sua mobilidade mesmo sem a necessidade de aumentar sua aptidão é um fator-chave que lhes permite se espalhar de maneira eficiente por longas distâncias, superando os algoritmos discutidos acima nesse aspecto. Esse fenômeno surpreendente é especialmente evidente no ambiente de Megacity, onde as bactérias demonstram uma mobilidade e capacidade de sobrevivência incríveis, permitindo-lhes se adaptar com sucesso a ambientes diversos e complexos. Nesse contexto, as bactérias se tornam verdadeiras pioneiras, explorando e colonizando novos territórios, o que destaca suas capacidades únicas e importância no mundo dos organismos vivos.


Charge System Search - Busca do Sistema de Carga (CSS)

C_AO_CSS:50;0.1;0.7;0.01
=============================
5 Hilly's; Execuções da função: 10000; resultado: 0.38395827586082376
25 Hilly's; Execuções da função: 10000; resultado: 0.3048219687002418
500 Hilly's; Execuções da função: 10000; resultado: 0.2895158695448419
=============================
5 Forest's; Execuções da função: 10000; resultado: 0.2699906934238054
25 Forest's; Execuções da função: 10000; resultado: 0.19451237087137088
500 Forest's; Execuções da função: 10000; resultado: 0.18498127715987073
=============================
5 Megacity's; Execuções da função: 10000; resultado: 0.16923076923076924
25 Megacity's; Execuções da função: 10000; resultado: 0.13846153846153847
500 Megacity's; Execuções da função: 10000; resultado: 0.12276923076923094
=============================
Pontuação total: 2.05824

Surpreendentemente, esse algoritmo se mostrou completamente inesperado neste teste, superando seus indicadores habituais, onde ocupa o penúltimo lugar entre os piores no ranking. Desta vez, o CSS terminou em algum lugar no meio (décimo segundo a partir do último). O mistério dessa transformação tem sua própria explicação: cargas eletrostáticas, obedecendo às equações do algoritmo, começam a interagir com forças repulsivas quando caem dentro do raio da carga, o que lhes permite se espalhar explosivamente no espaço de busca circundante. Esse processo não é apenas visualmente atraente, mas também tem potencial para aplicações práticas.

A capacidade de disparar como um fogo de artifício abre novas possibilidades para o CSS. Por exemplo, podemos considerar este algoritmo como uma fonte de "ideias" de solução para determinar a posição ótima dos agentes para outros algoritmos de otimização, ou podemos integrá-lo com sucesso em soluções híbridas onde o CSS ajudará a evitar a degeneração da população. Assim, o sucesso inesperado do CSS neste teste não é apenas inspirador, mas também abre novas perspectivas para sua aplicação.


Saplings Sowing and Growing up algorithm - Algoritmo de mudas semeadura e crescimento (SSG)

C_AO_SSG:50;0.3;0.5;0.4;0.1
=============================
5 Hilly's; Execuções da função: 10000; resultado: 0.3284133103606342
25 Hilly's; Execuções da função: 10000; resultado: 0.3246280774155864
500 Hilly's; Execuções da função: 10000; resultado: 0.2808547975998361
=============================
5 Forest's; Execuções da função: 10000; resultado: 0.194115963123826
25 Forest's; Execuções da função: 10000; resultado: 0.19754974771110584
500 Forest's; Execuções da função: 10000; resultado: 0.17111478002239264
=============================
5 Megacity's; Execuções da função: 10000; resultado: 0.25846153846153846
25 Megacity's; Execuções da função: 10000; resultado: 0.23353846153846156
500 Megacity's; Execuções da função: 10000; resultado: 0.14158461538461614
=============================
Pontuação total: 2.13026

Este algoritmo revela seu potencial em funções de gradiente, como Hilly ou Forest, e ocupa uma posição alta no ranking padrão. No entanto, sua eficiência é totalmente manifestada apenas na presença de uma mudança positiva no gradiente. Caso contrário, a população degrada rapidamente, e os indivíduos convergem em um melhor ponto local, o que abre a possibilidade de usar o método SSG para refinar os resultados dos algoritmos de otimização.


5. Conclusões preliminares

Neste experimento de pesquisa único, onde os algoritmos foram submetidos a condições iniciais rigorosas, descobrimos muitas características fascinantes dos vários algoritmos que permaneciam ocultas sob a colocação uniforme aleatória padrão dos agentes no espaço de busca. Assim como acontece na vida real, os organismos revelam seu potencial interno em condições extremas.

Também testemunhamos resultados de teste inesperados para alguns algoritmos, incluindo a queda do topo para o fundo. Isso nos permite entender melhor como usar algoritmos com base em suas capacidades em problemas de otimização especializados, bem como obter uma compreensão mais profunda de seus pontos fortes e fracos. Também revelou de forma mais clara tanto os lados positivos quanto negativos de cada algoritmo, o que permite que eles usem suas forças de maneira mais eficaz e compensem suas fraquezas. Além disso, esta pesquisa contribui para uma melhor compreensão da criação de algoritmos híbridos, permitindo a combinação das forças de diferentes métodos para alcançar resultados ótimos.

No próximo artigo, continuaremos a considerar as propriedades e o comportamento dos algoritmos, e tiraremos conclusões.

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

O escore de propensão na inferência causalidade O escore de propensão na inferência causalidade
O artigo examina o tema de pareamento na inferência causal. O pareamento é utilizado para comparar observações semelhantes em um conjunto de dados. Isso é necessário para determinar corretamente os efeitos causais e eliminar o viés. O autor explica como isso ajuda na construção de sistemas de negociação baseados em aprendizado de máquina, que se tornam mais estáveis em novos dados nos quais não foram treinados. O escore de propensão desempenha um papel central e é amplamente utilizado na inferência causal.
Algoritmos de otimização populacionais: algoritmo de baleias (Whale Optimization Algorithm, WOA) Algoritmos de otimização populacionais: algoritmo de baleias (Whale Optimization Algorithm, WOA)
O algoritmo de otimização de baleias (WOA) é um algoritmo metaheurístico inspirado pelo comportamento e pelas estratégias de caça das baleias-jubarte. A ideia principal do WOA é imitar o chamado método de alimentação "rede de bolhas", em que as baleias criam bolhas ao redor de suas presas para depois atacá-las em um movimento espiral.
Do básico ao intermediário: Operadores Do básico ao intermediário: Operadores
Neste artigo vamos ver um pouco sobre os operadores básicos. Apesar de ser um assunto bem fácil de ser compreendido. Existem alguns pequenos detalhes, que fazem muita diferença na hora de colocar expressões matemáticas em formato de código. Sem entender de maneira adequada tais detalhes. Muitos programadores com quase nenhuma experiência, acabam desistindo de tentar criar suas próprias soluções.
Redes neurais de maneira fácil (Parte 80): modelo generativo adversarial do transformador de grafos (GTGAN) Redes neurais de maneira fácil (Parte 80): modelo generativo adversarial do transformador de grafos (GTGAN)
Neste artigo, apresento o algoritmo GTGAN, que foi introduzido em janeiro de 2024 para resolver tarefas complexas de criação de layout arquitetônico com restrições de grafos.