Buscar

Monografia Santos, Mayckerson A.F.

Prévia do material em texto

UNIVERSIDADE FEDERAL DO MARANHÃO 
CENTRO DE CIÊNCIAS EXATAS E TECNOLOGIA 
CURSO DE CIÊNCIA DA COMPUTAÇÃO 
 
 
 
 
 
 
 
 
 
MAYCKERSON ALEXANDRE FRANCO SANTOS 
 
 
 
 
 
 
 
 
 
COMPUTAÇÃO NATURAL APLICADA À OTIMIZAÇÃO CONTÍNUA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
São Luís 
2008 
1 
 
 
MAYCKERSON ALEXANDRE FRANCO SANTOS 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
COMPUTAÇÃO NATURAL APLICADA À OTIMIZAÇÃO CONTÍNUA 
 
 
 
Monografia apresentada ao Curso de Ciência 
da Computação da Universidade Federal do 
Maranhão, para obtenção do grau de 
Bacharel em Ciência da Computação. 
 
 
Orientador: Prof. Dr. Alexandre César Muniz 
de Oliveira 
 
 
 
 
 
 
 
 
 
 
São Luís 
2008 
2 
 
 
 
Santos, Mayckerson Alexandre Franco 
Computação natural aplicada à otimização contínua / 
Mayckerson Alexandre Franco Santos – São Luís, 2008. 
 
 85 folhas. 
 
 Orientador: Alexandre César Muniz de Oliveira. 
 Monografia (Graduação) – Universidade Federal do 
Maranhão, Curso de Ciência da Computação, 2008. 
 
1. Ciência da Computação. 2. Métodos. 3. Otimização. 
4. Funções Contínuas. 5. Algoritmos. I. Título. 
CDU 004 
3 
 
 
MAYCKERSON ALEXANDRE FRANCO SANTOS 
 
 
 
 
 
COMPUTAÇÃO NATURAL APLICADA À OTIMIZAÇÃO CONTÍNUA 
 
 
 
Monografia apresentada ao Curso de Ciência 
da Computação da Universidade Federal do 
Maranhão, para obtenção do grau de 
Bacharel em Ciência da Computação. 
 
 
Aprovada em 14 / 07 /2008 
 
 
 
 
 
 
BANCA EXAMINADORA 
 
 
 
 
__________________________________________________ 
Prof. Alexandre César Muniz de Oliveira (Orientador) 
Doutor em Computação Aplicada 
Departamento de Informática (DEINF) 
 
 
 
__________________________________________________ 
Prof. Alexandre César Tavares Vidal 
Doutor em Engenharia Elétrica 
Departamento de Informática (DEINF) 
 
 
 
__________________________________________________ 
Prof.ª Valeska Martins de Souza 
Doutora em Engenharia da Informação 
Departamento de Matemática (DEMAT) 
4 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
A Deus, fonte da vida. 
A minha esposa, pelo amor incondicional. 
A meus pais, pela educação. 
A meus sogros, pelo apoio em todas as 
horas. 
5 
 
 
 
 
 
 
AGRADECIMENTOS 
 
A Deus, pela força e coragem que me proporcionou em todos os 
momentos de minha vida. 
A minha esposa Karla, pelo amor e incentivo constantes. 
Aos meus pais, Isaias e Marú, pela vida e por tudo o que fizeram por mim. 
Aos meus sogros, Furtado e Silene, pelo apoio e cuidado. 
Aos meus irmãos, cunhados e cunhadas, tios e tias, e todos os familiares 
pelo apoio recebido. 
Ao professor Alexandre César Muniz de Oliveira, pela valiosa orientação e 
amizade. 
E a todos os demais professores e colegas que contribuíram para a 
realização desse trabalho. 
6 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
“Não tenho dúvida alguma de que qualquer 
homem ou mulher pode atingir o que eu 
atingi, se ele ou ela fizerem o mesmo 
esforço e cultivarem a fé e a esperança. 
Trabalho sem fé é como a tentativa de 
alcançar o fundo de um buraco sem fundo.” 
(Mahatma Gandhi) 
7 
 
 
 
 
 
RESUMO 
 
Este trabalho traz um estudo sobre otimização de parâmetros de funções contínuas no 
qual são apresentados algoritmos que utilizam diferentes estratégias de busca, desde 
algoritmos simples como o de Busca Aleatória até algoritmos mais elaborados como o 
Algoritmo Genético com Fitness Sharing. Apresentam-se os algoritmos destacando 
suas características principais e suas diferenças com relação aos demais. Para efeito 
comparativo dos algoritmos é aqui apresentada a ferramenta OAT (Optimization 
Algorithm Toolkit), software livre que possui grande potencial para o uso em testes e 
experimentos de algoritmos. Destaca-se ainda o framework OAT com o objetivo de 
estendê-lo futuramente, agregando novos algoritmos e problemas, com a ampla 
reutilização de suas classes. 
 
Palavras-chave: Ciência da computação. Métodos. Otimização. Funções contínuas. 
Algoritmos. 
8 
 
 
 
 
 
ABSTRACT 
 
 
This work brings a study on optimizing parameters of continuous functions for which are 
presented algorithms that use different strategies for searching, from simple algorithms 
such as Random Search ones to more elaborate as the Fitness Sharing Genetic 
Algorithm. These algorithms are presented highlighting its main characteristics and their 
differences with each other. For purposes of comparative algorithms, a tool is presented: 
OAT (Optimization Algorithm Toolkit), a free software that has great potential for use in 
experiments and tests of algorithms. This work further highlights the framework OAT 
aiming to extend it in future, adding new algorithms and problems with wide reuse of 
their classes. 
 
Keywords: Computer Science, Methods, Optimization, Continuous Functions, 
Algorithms. 
9 
 
 
SUMÁRIO 
 
 LISTA DE SIGLAS .................................................................................. 11 
 LISTA DE FIGURAS .............................................................................. 12 
 LISTA DE TABELAS .............................................................................. 14 
1 INTRODUÇÃO ........................................................................................ 15 
2 COMPUTAÇÃO NATURAL ................................................................... 17 
2.1 Computação Inspirada na Natureza .................................................... 20 
2.2 Estudo sobre a Natureza através da Computação ........................... 20 
2.3 Computação com Mecanismos Naturais ............................................ 22 
3 FORMULAÇÃO MATEMÁTICA DO PROBLEMA DE OTIMIZAÇÃO ... 23 
4 MÉTODOS PARA OTIMIZAÇÃO DE FUNÇÕES .................................. 24 
4.1 Busca Aleatória (Random Search) ...................................................... 26 
4.2 Subida de Encosta com Mutação (Mutation Hill Climber) ............... 26 
4.3 Simulated Annealing ............................................................................ 27 
4.4 Otimização Extrema Generalizada ...................................................... 29 
4.5 Nuvem de Partículas (Particle Swarm) ............................................... 32 
4.6 CLONALG ……………………………...................................................... 35 
4.7 OptaiNET ……………………………...................................................... 39 
4.8 Algoritmo Genético com Fitness Sharing .......................................... 44 
5 OAT – OPTIMIZATION ALGORITHM TOOLKIT .................................. 47 
5.1 Diagramas de Classes ......................................................................... 54 
5.2 Simulações e experimentos ............................................................... 58 
5.2.1 Comportamento dos algoritmos ......................................................... 60 
10 
 
 
5.2.2 Comparação de desempenho .............................................................. 70 
6 CONCLUSÃO ....................................................................................... 80 
 REFERÊNCIAS ......................................................................................82 
 
 
 
11 
 
 
 
 
 
LISTA DE SIGLAS 
 
2D - Duas dimensões 
3D - Três dimensões 
AG - Algoritmo Genético 
BFO - Binary Function Optimization 
CFO - Continuous Function Optimization 
FSGA - Fitness Sharing Genetic Algorithm 
GEO - Generalized Extremal Optimization 
GUI - Graphic User Interface 
OAT - Optimization Algorithm Toolkit 
PSO - Particle Swarm Optimization 
SA - Simulated Annealing 
SIA - Sistema Imunológico Artificial 
TSP - Traveling Salesman Problem 
12 
 
 
LISTA DE FIGURAS 
 
Figura 2.1 Integração de linhas de pesquisa para o advento da 
 computação natural .............................................................................. 18 
Figura 2.2 Três principais ramos da computação natural ..................................... 19 
Figura 4.1 Representação do epítopo e paratopo ................................................. 41 
Figura 5.1 Tela inicial do OAT ............................................................................... 48 
Figura 5.2 Screenshot da tela do Explorer ............................................................. 49 
Figura 5.3 Diagrama de Classes do domínio CFO................................................. 55 
Figura 5.4 Diagrama de Classes do Problema da Função Ackley ......................... 56 
Figura 5.5 Diagrama de Classe do Algoritmo de PSO .......................................... 57 
Figura 5.6 Gráficos das Funções Contínuas ..........................................................58/59 
Figura 5.7 Forma de apresentação dos experimentos de comportamento ........... 60 
Figura 5.8 Snapshots da Execução do FSGA sobre a Função Ackley .................. 61 
Figura 5.9 Snapshots da Execução do FSGA sobre a Função Rastringin ............. 61 
Figura 5.10 Snapshots da Execução do FSGA sobre a Função de Jong 4 ............ 62 
Figura 5.11 Snapshots da Execução do FSGA sobre a Função de Jong 5 ............ 62 
Figura 5.12 Snapshots da Execução do Mutation Hill Climbing 
 sobre a Função Ackley.......................................................................... 63 
Figura 5.13 Snapshots da Execução do Mutation Hill Climbing 
 sobre a Função Rastringin .................................................................... 64 
Figura 5.14 Snapshots da Execução do Mutation Hill Climbing 
 sobre a Função de Jong 4 .................................................................... 64 
13 
 
 
Figura 5.15 Snapshots da Execução do Mutation Hill Climbing 
 sobre a Função de Jong 5 .................................................................... 65 
Figura 5.16 Snapshots da Execução do CLONALG sobre a Função Ackley .......... 66 
Figura 5.17 Snapshots da Execução do CLONALG sobre a Função Rastringin .... 66 
Figura 5.18 Snapshots da Execução do CLONALG sobre a Função de Jong 4 ..... 67 
Figura 5.19 Snapshots da Execução do CLONALG sobre a Função de Jong 5 ..... 67 
Figura 5.20 Snapshots da Execução do GEO sobre a Função Ackley ................... 68 
Figura 5.21 Snapshots da Execução do GEO sobre a Função Rastringin .............. 69 
Figura 5.22 Snapshots da Execução do GEO sobre a Função de Jong 4............... 69 
Figura 5.23 Snapshots da Execução do GEO sobre a Função de Jong 5 .............. 70 
Figura 5.24 1º Gráfico de Desempenho em Melhor Solução do Experimento 1 ..... 72 
Figura 5.25 2º Gráfico de Desempenho em Melhor Solução do Experimento 1 ..... 72 
Figura 5.26 Gráfico de Desempenho em Tempo de Execução do Experimento 1 .. 73 
Figura 5.27 1º Gráfico de Desempenho em Melhor Solução do Experimento 2 ..... 74 
Figura 5.28 2º Gráfico de Desempenho em Melhor Solução do Experimento 2 ..... 75 
Figura 5.29 Gráfico de Desempenho em Tempo de Execução do Experimento 2 .. 76 
Figura 5.30 1º Gráfico de Desempenho em Melhor Solução do Experimento 3 ..... 77 
Figura 5.31 2º Gráfico de Desempenho em Melhor Solução do Experimento 3 ..... 78 
Figura 5.32 Gráfico de Desempenho em Tempo de Execução do Experimento 3 .. 79 
 
14 
 
 
 
 
 
 
 
LISTA DE TABELAS 
 
Tabela 5.1 Especificação das Funções Avaliadas .................................................. 59 
Tabela 5.2 Tabela de Valores de Melhor Solução do Experimento 1 ..................... 72 
Tabela 5.3 Tabela de Valores de Tempo de Execução do Experimento 1 ............. 73 
Tabela 5.4 Tabela de Valores de Melhor Solução do Experimento 2 ..................... 74 
Tabela 5.5 Tabela de Valores de Tempo de Execução do Experimento 2 ............. 75 
Tabela 5.6 Tabela de Valores de Melhor Solução do Experimento 3 ..................... 77 
Tabela 5.7 Tabela de Valores de Tempo de Execução do Experimento 3 ............ 78 
15 
 
 
1 INTRODUÇÃO 
 
Os problemas de otimização são focados, em sua essência, na busca por 
maximizar ou minimizar uma função numérica de várias variáveis, num contexto em que 
podem existir restrições. Estas funções e restrições estão intimamente ligadas aos 
valores assumidos, durante a execução da otimização, pelas variáveis do projeto. 
Entre as vantagens dos processos de otimização destacam-se: 
• Diminuição do tempo dedicado ao projeto; 
• Obtenção de algo melhor; 
• Tratamento simultâneo de grande quantidade de variáveis; 
• Menor custo. 
Cientistas e engenheiros computacionais vêm buscando, em diversas linhas 
de pesquisa, formas de implementar algoritmos para otimização. Nesta busca, diversos 
já foram desenvolvidos. 
Este trabalho está focado em estudar alguns destes algoritmos e fazer um 
comparativo entre estes. Para o estudo comparativo será utilizada a ferramenta OAT 
(Optimization Algorithm Toolkit). 
Os algoritmos foram selecionados de forma que representassem a 
diversidade de teorias que estão sendo desenvolvidas, principalmente na área da 
Computação Natural. Incluiu-se ainda o algoritmo de busca aleatória, este selecionado 
apenas para base de comparação de um algoritmo simples com os demais. 
A ferramenta OAT foi desenvolvida por Jason Brownlee buscando juntar em 
um só lugar diferentes tipos de abordagens, com funcionalidades para execução de 
16 
 
 
simulações e experimentos científicos. Esta ferramenta possui ainda o condão de tirar 
da obscuridade métodos não conhecidos, servindo como meio verificação de quais 
destes valem a pena ser estudados e quais áreas ainda estão abertas, sem pesquisa e 
projetos em andamento. Ela foi escolhida para o desenvolvimento deste trabalho graças 
a tais funcionalidades e no intuito de, através do estudo da estrutura de classes, fazer 
extensões da mesma com métodos desenvolvidos em nosso meio. 
Este trabalho está dividido em capítulos, sendo este o primeiro e os demais 
como se segue. No capítulo 2 será apresentada uma visão geral da Computação 
Natural. O capítulo 3 traz a formalização matemática do problema de Otimização. No 
capítulo 4 serão mostrados métodos aplicados à otimização baseados em Busca Global 
e em princípios de Computação Natural. O capítulo 5 traz a apresentação da 
ferramenta OAT – Optimization Algorithm Toolkit com seus principais diagramas de 
classes, descritos para o devido entendimento do funcionamento do mesmo e para dar 
base a uma posterior reutilização de seu código visto que é um software livre. O 
capítulo 5 apresenta ainda, experimentos com os algoritmos de otimização expostos no 
Capítulo 3 realizados com o OAT, assim como um comparativo de seus resultados e 
comportamentos. No capítulo 6 serão descritas as conclusões do trabalho realizado e 
sugestões de trabalhos futuros. 
17 
 
 
2 COMPUTAÇÃO NATURAL 
 
A terminologia computação natural vem sendo empregada na literatura para 
descrever todos os sistemas computacionaisdesenvolvidos com inspiração ou 
utilização de algum mecanismo natural ou biológico de processamento de informação 
(Ballard, 1999; Gramß et al., 2001; Flake, 2000; Paton et al., 2003; de Castro e Von 
Zuben, 2004). 
A computação natural é a forma computacional dos processos de análise e 
síntese da natureza para o desenvolvimento de sistemas “artificiais”, ou ainda como a 
utilização de meios e mecanismos naturais para realizar computação. Importando 
ressaltar que o termo “artificial” serve apenas para diferenciar que o objeto de estudo 
fora desenvolvido por seres humanos e não pela evolução das espécies. 
Tem-se que a computação natural é constituída, em seus fundamentos, por 
novas abordagens computacionais caracterizadas por uma maior proximidade com a 
natureza. E os principais objetivos desta proximidade são: desenvolver novas 
ferramentas matemáticas e computacionais para resolução de problemas complexos 
das mais diversas áreas do conhecimento; projetar dispositivos para emulação, 
simulação, modelagem e descrição de sistemas e fenômenos naturais; sintetizar novas 
formas de vida (vida artificial); e a utilização de mecanismos naturais para o 
desenvolvimento de um novo paradigma da computação conhecido como wetware1, 
este vindo para complementar e/ou suplementar as atuais arquiteturas baseadas em 
silício e arquitetura de Von Newmman (Vargas, 2005; de Castro, 2004). 
 
 
1
 Wetware é um tipo novo de hardware desenvolvido com o uso de matéria-prima biológica. 
18 
 
 
A computação natural geralmente enfatiza modelos altamente simplificados e 
abstratos da natureza (A lâmina de Occam - Occam’s razor2). As razões para um 
tratamento simplificado são várias, das quais podemos destacar: 
• Muitas simplificações são necessárias para tornar a computação 
tratável; 
• Pode ser vantajoso destacar as características mínimas de um 
sistema que permitem o uso de algum de seus aspectos particulares; 
• O uso de ‘modelos’ simplificados é suficiente para atingir os objetivos 
esperados; e 
• Nem sempre são conhecidos os detalhes do fenômeno/sistema 
natural observado/estudado. 
 
 
 
 
 
 
 
 
 
Figura 2.1: Integração de linhas de pesquisa para o advento da computação natural. 
 
 
2
 Princípio proposto por William Occam, filósofo e teólogo franciscano, nascido em 1285, na Inglaterra, 
que diz que a teoria mais simples é normalmente a mais correta. 
Es
tu
do
s 
e
xp
e
rim
en
ta
is 
Es
tu
do
s 
te
ór
ico
s 
Observações 
empíricas 
 
Computação 
Natural 
 
Outras linhas de 
pesquisa 
 
Síntese de 
fenômenos 
Novas formas 
de resolver 
problemas 
Novos 
paradigmas de 
computação 
19 
 
 
Pode-se dividir a computação natural em três grandes sub-áreas (de Castro 
e Von Zuben, 2004): 
• Computação inspirada na natureza; 
• Estudo da Natureza através da computação; e 
• Computação com mecanismos naturais. 
Estas sub-áreas da computação natural tem proporcionado grandes 
descobertas em ferramentas computacionais para a solução de problemas complexos 
de engenharia e permitindo a geração de novos paradigmas de computação. 
A computação natural é uma linha de pesquisa promissora, não só por já 
mostrar resultados concretos e convincentes pela aplicação de ferramentas criadas 
exclusivamente com base em seus princípios, mas porque diversos aspectos da 
biologia podem ser mais bem tratados tendo em mãos ferramentas computacionais 
apropriadas. 
 
 
 
 
 
Figura 2.2: Três principais ramos da computação natural 
 
Nos subitens que seguem será tratado cada ramo da Computação Natural de 
forma separada. 
 
 
Computação Natural 
 
PARTE I 
Computação Inspirada 
na Natureza 
PARTE II 
Estudo sobre a 
Natureza Através da 
Computação 
 
PARTE III 
Computação com 
Mecanismos Naturais 
20 
 
 
2.1 Computação Inspirada na Natureza 
 
Através da observação de descoberta de inúmeros princípios e teorias a 
respeito da natureza, como as Leis de Newton, com o desenvolvimento de modelos, os 
pesquisadores das áreas de engenharia e computação notaram o grande potencial 
destes para a implementação de sistemas computacionais para a resolução de 
problemas. 
Os principais segmentos desta subárea da computação natural são: sistemas 
imunológicos artificiais, algoritmos evolutivos, redes neurais artificiais e inteligência 
coletiva (swarm intelligence). 
Este tipo de computação será abordado com maiores detalhes no Capítulo 4 
com a demonstração de alguns de seus algoritmos. 
 
2.2 Estudo sobre a Natureza através da Computação 
 
Ao contrário da primeira, o estudo dos fenômenos naturais através da 
computação é uma abordagem sintética objetivando reproduzir ou criar padrões, 
formas, comportamentos e organismos que não necessariamente se assemelham à 
vida como nós a conhecemos. Esta abordagem pode gerar fenômenos nunca 
observados na natureza, mas que podem ser qualificados como “naturais” por possuir 
características suficientes para tal. O seu objetivo é usar a computação para simular e 
emular fenômenos naturais de forma não-determinística. 
O estudo da natureza através da computação possui duas áreas de estudo 
principais: vida artificial (ALife) e geometria fractal. 
21 
 
 
A Vida Artificial é definida como o estudo de sistemas feitos pelo homem, 
mas que exibem comportamentos característicos de sistemas naturais vivos. A Vida 
Artificial complementa as ciências biológicas tradicionais preocupadas com a análise de 
organismos vivos através da síntese em computadores ou outros meios artificiais de 
comportamentos similares àqueles observados em seres vivos. Através da extensão 
dos fundamentos empíricos sobre os quais a biologia está baseada para além da vida 
baseada em carbono que evoluiu na Terra, a Vida Artificial pode contribuir para a 
biologia teórica localizando a vida-como-nós-a-conhecemos dentro de um contexto 
maior da vida-como-ela-poderia-ser (Langton,1988; p.1). Ou seja, ALife é a abordagem 
sintética ou virtual para o estudo de padrões, comportamentos, sistemas e organismos 
que se assemelham à vida. 
Com relação à geometria fractal, esta resulta da visualização computacional 
de modelos de estruturas e de processos naturais, formando imagens, animações e 
sistemas interativos. E para tal pode-se usar diversas técnicas, entre elas: autômatos 
celulares (Ilachinski, 2001; Wolfram, 1994), sistemas de partículas (Reeves, 1983), 
sistemas de Lindenmayer ou sitemas-L (Lindenmayer, 1968), movimento Browniano 
(Fournier et al., 1982; Voss, 1985), etc. Um fractal ou uma estrutura fractal é por 
definição uma estrutura na qual partes da mesma se assemelham ao todo, ou seja, 
existem partes auto-similares, estatisticamente, dentro da estrutura global. Isto indica a 
presença do fenômeno de escala e de um nível de tendência, o qual pode ser medido 
através da dimensão fractal, que é uma medida de complexidade. (Rubi, 2007). 
 
 
 
22 
 
 
2.3 Computação com Mecanismos Naturais 
 
Na procura de formas alternativas à criação de chips em pastilhas de silício, 
que de acordo com as previsões esgotará seu potencial de miniaturização em no 
máximo 10 anos se for tomada por base a Lei de Moore que profere que a quantidade 
de transistores em um chip dobra a cada dois anos ou ano e meio, os cientistas e 
engenheiros computacionais estão buscando na natureza os meios para a criação de 
um novo paradigma computacional. 
Os meios encontrados, até agora, foram basicamente de dois tipos os 
baseados em biomoléculas e os baseados em bitsquânticos. O primeiro normalmente 
denominado computação molecular (Păun et al., 1998; Gramß et al., 2001; Calude e 
Păun, 2001; Păun e Cutkosky, 2002; Sienko et al., 2003) e o segundo conhecido como 
computação quântica (Hirvensalo, 2000; Nielsen e Chuang, 2000; Pittenger, 2000). 
Na computação molecular, as biomoléculas são usadas como meio para 
armazenar informação e as técnicas de engenharia molecular (genética) são usadas 
para manipular estas moléculas de forma a realizar processamento de informação. 
Cumpre observar que esta abordagem se baseia na sofisticação e eficiência das 
técnicas de engenharia genética. A computação quântica, por outro lado, armazena 
informação em bits quânticos e manipula esta informação usando princípios da 
mecânica quântica. 
 
 
 
 
23 
 
 
3 FORMULAÇÃO MATEMÁTICA DO PROBLEMA DE OTIMIZAÇÃO 
 
O problema de otimização consiste matematicamente na determinação do 
mínimo, ou máximo, do valor da função objetivo no espaço de projeto definido pelas 
restrições. Ele é tradicionalmente formulado como um problema de minimização sem 
perda de generalização, já que sempre é possível transformar um problema de 
maximização em um problema de minimização (Arora, 1989, Vanderplaats, 1998). 
Neste trabalho, a não ser que mencionado em contrário, o problema de projeto ótimo 
será sempre considerado como um problema de minimização. Para um problema onde 
há apenas uma função objetivo ele pode ser posto na forma de (Vanderplaats, 1998): 
 
Minimizar: F(x) (função objetivo) (1) 
Sujeito à: 
 gj(x) ≤ 0 j = 1, ..., m (restrições de desigualdade) (2) 
 hk(x) = 0 k = 1, ..., l (restrições de igualdade) (3) 
 xi_inf ≤ xi ≤ xi_sup i = 1, ..., n (restrições laterais) (4) 
Onde, xT = {x1 x2 x3 … xn} (variáveis de projeto) 
e xi_inf e xi_sup representam os limites inferior e superior, respectivamente, ao valor de 
cada variável de projeto xi. 
As funções definidas em (1), (2) e (3) podem ser lineares ou não, explícitas 
ou implícitas em x. 
 
 
 
24 
 
 
4 MÉTODOS PARA OTIMIZAÇÃO DE FUNÇÕES 
 
Nas últimas quatro décadas, foram desenvolvidas diversas técnicas 
numéricas baseadas em busca local para o problema do projeto ótimo, esta diversidade 
resulta de uma constatação teórica e prática: a eficiência de tais técnicas depende do 
problema a ser resolvido. Pode-se dizer que não há, entre estas técnicas, uma que se 
sobressaia às outras, mas sim uma que é mais adequada a determinado problema 
(Sousa, 2003). 
Técnicas clássicas de otimização são confiáveis, porém, quando 
confrontadas espaços complexos, como com funções não contínuas ou não convexas 
ou com diversas variáveis, as mesmas podem apresentar algumas dificuldades 
numéricas e problemas de robustez. 
Para o tratamento de espaços de projeto complexos, foram desenvolvidas 
técnicas de otimização baseadas em busca global, técnicas estas que possuem 
mecanismos capazes de escapar de ótimos locais, porém para que sejam eficazes 
necessitam de muitas chamadas à função objeto. Quando estas funções objeto 
possuem grande custo computacional, a técnica se torna impraticável. Nestes casos 
apesar de limitadas a sub-ótimos as técnicas de busca local são mais utilizadas. 
De forma geral, os métodos clássicos possuem como grande vantagem, o 
baixo número de avaliações da função objetivo, o que faz com que tenham 
convergência rápida. Contudo, estes métodos têm uma dificuldade para trabalhar com 
mínimos locais, ao se depararem com mínimos locais estes métodos não conseguem 
avançar na busca, convergindo prematuramente, sem encontrar o mínimo global. Em 
contraponto nos métodos de otimização baseados em busca global, a função objetivo é 
25 
 
 
avalizada várias vezes, sendo possível trabalhar com vários pontos ao mesmo tempo 
em uma iteração. Isto eleva o custo computacional destes métodos. Entretanto, este 
fato é compensado pela menor chance que estes métodos têm de serem limitados a 
mínimos locais, além de possuírem vantagens quanto à implementação, robustez e 
tratarem problemas não-contínuos. 
Devido ao grande custo computacional de se chegar na prática ao ótimo da 
função, foram desenvolvidos algoritmos que tem a capacidade de fornecer soluções 
satisfatórias, muito próximas do ótimo, a um custo computacional razoável. Estes 
algoritmos são chamados de heurísticas. Apesar de eficientes em suas funções, as 
heurísticas, são muito específicas, indicadas na resolução de um determinado problema 
e dependendo da sua forma de construção, também podem ficar estagnadas em ótimos 
locais. Em razão destas dificuldades, na década de 90 surgiu uma nova classe de 
métodos de otimização baseados em busca global, estes inspirados em eventos da 
natureza. Estes métodos, chamados de metaheurística, possuem a característica de ser 
flexíveis, podendo a partir de pequenas adaptações serem usados nos mais diversos 
tipos de problema, cada metaheurística pode conter diversas heurísticas trabalhando de 
forma independente em cada iteração. 
Para o devido entendimento do que foi dito, nos itens seguintes serão 
descritos métodos de otimização, o primeiro de busca aleatória servirá na verdade 
apenas como base de comparação devido a sua simplicidade. O segundo uma 
heurística de subida de encosta. Seguindo serão descritas metaheurísticas, iniciando 
com duas baseadas em fenômenos físicos e quatro bioinspiradas. Os métodos serão 
descritos de forma a destacar suas características para posterior comparação de 
comportamento e desempenho. 
26 
 
 
4.1 Busca Aleatória (Random Search) 
 
Os métodos de busca aleatória são considerados os menos eficientes, 
porém os de mais simples implementação. A quantidade de memória que é requerida 
para o código faz deste método um candidato ideal para o uso em ambientes 
computacionais limitados. A técnica é considerada como de busca global, pois devido a 
geração uniforme de variáveis aleatórias é possível explorar a totalidade da superfície 
ou função custo. 
 
4.2 Subida de Encosta com Mutação (Mutation Hill Climber) 
 
Hill climbing é um método de busca local que utiliza um procedimento de 
melhora iterativa (iterative improvement). A estratégia é aplicada a um único ponto x 
(solução candidata) no espaço de busca. 
Um Hill Climbing Padrão pode ter seu algoritmo descrito como segue: 
1. Inicialize (aleatoriamente) o ponto x na região factível do problema; 
2. A cada iteração um novo ponto x' é selecionado aplicando-se uma 
pequena perturbação no ponto atual, ou seja, selecionando-se um 
ponto x' que esteja na vizinhança de x, x' N(x); 
3. Se este novo ponto apresenta um melhor valor para a função de 
avaliação, então o novo ponto torna-se o ponto atual; 
27 
 
 
4. O método é terminado quando nenhuma melhora significativa é 
alcançada, um número fixo de iterações foi efetuado, ou um objetivo 
foi atingido. 
Como pode ser verificado, o algoritmo de hill climbing padrão realiza uma 
busca local em torno de seu ponto inicial. O algoritmo abordado, no entanto, foi 
implementado de uma forma ligeiramente diferente, a perturbação utilizada para gerar o 
novo ponto foi implementada na forma de mutação, daí o nome do algoritmo, esta 
mutação ocorre em nível de bits do ponto. 
 
4.3 Simulated Annealing 
 
O algoritmo de simulated annealing – SA proposto por Kirkpatrick et al. 
(1983) foi inspirado pelo processo de recozimento (annealing) de sistemas físicos. Este 
algoritmo é baseado no procedimento de Metropolis et al. (1953) originalmente proposto 
como uma estratégia de determinação de estados (configurações) de equilíbrio de uma 
coleção de átomos a uma dada temperatura. As idéias básicas têm suas origens em 
termodinâmica estatística, ramo dafísica responsável por apresentar predições teóricas 
sobre o comportamento de sistemas macroscópicos baseados nas leis que governam 
seus átomos. Kirkpatrick et al. (1983) perceberam que existe uma semelhança entre o 
procedimento de recozimento estudado com o algoritmo de Metropolis e processos de 
otimização combinatória. Uma analogia com o recozimento de sólidos poderia fornecer 
uma estrutura para o desenvolvimento de um algoritmo genérico de otimização capaz 
de escapar de ótimos locais. 
28 
 
 
 O algoritmo de simulated annealing foi desenvolvido baseado em um 
procedimento utilizado para levar um material a seu estado de equilíbrio máximo, ou 
seja, a um estado de energia mínima. 
O processo simulado neste algoritmo funciona da seguinte forma: um 
determinado material é inicialmente aquecido a uma alta temperatura, de forma que ele 
derreta e seus átomos possam se mover com relativa liberdade. A temperatura desta 
substância derretida é lentamente reduzida de forma que, a cada temperatura, os 
átomos possam se mover o suficiente para adotarem uma orientação mais estável. Se a 
substância derretida for resfriada apropriadamente, seus átomos serão capazes de 
atingir um estado de equilíbrio máximo (energia mínima), produzindo um cristal. Caso 
contrário, um vidro ou outra substância (quebradiça) semelhante será produzida. Ao 
processo de aquecimento seguido de um resfriamento lento denominamos de 
recozimento (annealing). 
Uma descrição do algoritmo do Simulated Annealing pode ser dada por: 
1. Inicialize (aleatoriamente) um ponto x na região factível do 
problema; 
2. A cada iteração um novo ponto x' é selecionado aplicando-se uma 
pequena perturbação ao ponto atual, ou seja, selecionando-se um 
ponto x' que esteja na vizinhança de x, x' N(x); 
3. Determine a energia de cada uma destas configurações, E(x) e 
E(x'), e verifique a variação na energia do sistema: ∆E = E(x') - 
E(x); 
29 
 
 
4. Se ∆E ≤ 0, então x' torna-se o ponto atual; senão, a probabilidade 
de x' ser aceito como o ponto atual é dada por um caso particular 
da distribuição de Boltzmann-Gibbs, ou seja, P(∆E) = exp(-∆E/T). 
5. O método é terminado quando nenhuma melhora significativa é 
alcançada, um número fixo de iterações foi efetuado, ou a 
temperatura T atingiu seu valor mínimo. 
O parâmetro T é iniciado com um valor elevado e é lentamente reduzido 
durante o processo de busca. Geralmente sendo implementado um decrescimento 
geométrico para T; T ← n.T. A seqüência de temperaturas e o número de rearranjos 
dos parâmetros até a chegada a um estado de equilíbrio a cada temperatura é 
denominado de seqüência de recozimento (annealing Schedule ) (Kirkpatrick et al., 
1983). 
 
4.4 Otimização Extrema Generalizada 
 
O algoritmo GEO (Generalized Extremal Optimization), é uma metaheurística 
de otimização global (Sousa e Ramos, 2002; Sousa et al., 2003a, 2003b) desenvolvida 
recentemente como uma proposta de generalização do algoritmo τ-EO (Boettcher e 
Percus, 2001). Assim como os métodos Simulated Annealing e os Algoritmos 
Genéticos, GEO é um algoritmo estocástico cuja inspiração origina-se na analogia de 
processos observados na natureza. 
GEO destina-se, primeiramente, a resolver problemas de otimização 
complexos, onde pouco ou nada se conhece a respeito do espaço de busca viável e 
30 
 
 
inviável da função a ser otimizada. Pode ser aplicados a praticamente qualquer 
problema de otimização contínua ou combinatória, não convexo ou disjunto, com ou 
sem restrições, podendo, inclusive, serem aplicados a problemas com miscelânea de 
variáveis reais, inteiras ou discretas. É de fácil implementação e usa apenas valores da 
função objetivo, sem derivadas. Não requer nem mesmo o fornecimento de um ponto 
de partida situado no espaço viável. Esta universalidade de aplicação, aliada ao fato do 
GEO possuir apenas um parâmetro de ajuste, τ, constitui-se numa de suas maiores 
virtudes. 
O algoritmo GEO é composto dos seguintes passos: 
1. Inicialize aleatoriamente uma seqüência binária de comprimento L que 
codifica N variáveis de projeto. Cada variável é codificada em uma 
“sub-seqüência” de comprimento lj (j = 1, N). Para uma configuração 
inicial de bits C, calcule o valor da função objetivo V e faça Cmelhor = C 
e Vmelhor = V. 
2. Para cada bit da seqüência, em uma dada iteração, faça: 
a. Mude o valor do bit (de 0 para 1 ou 1 para 0) e calcule o valor 
da função objetivo Vi, da configuração de bits Ci, 
b. Atribua ao bit um índice de adaptabilidade ∆V = (Vi – Vmelhor). 
Ele indica o ganho (ou perda) que se têm ao mudar o valor do 
bit, comparado com o melhor valor encontrado para a função 
objetivo até o momento. 
c. Retorne o bit ao seu valor original. 
3. Ordene os bits de acordo com os seus índices de adaptabilidade, de 
k = 1 para o menos adaptado à k = L, para o mais adaptado. Em um 
31 
 
 
problema de minimização valores altos de ∆Vi terão maior “rank”, 
enquanto que em problemas de maximização ocorre o oposto. Se 
ocorrer de dois ou mais bits apresentarem o mesmo valor para ∆Vi 
eles são ordenados aleatoriamente com distribuição uniforme. 
4. Escolha com igual probabilidade um bit candidato i para sofrer 
mutação (mudar de 0 para 1 ou de 1 para 0). Gere um número 
aleatório RAN, com distribuição uniforme, no intervalo [0,1]. Se Pi(k) = 
k-τ for maior ou igual à RAN, o bit é modificado. Se não, o processo se 
repete até que um bit seja confirmado para ser modificado. 
5. Para o bit escolhido para sofrer mutação faça C = Ci e V = Vi. 
6. Se V < Vmelhor ( V > Vmelhor para um problema de maximização) então 
faça Vmelhor = V e Cmelhor = C. 
7. Repita os passos 2 a 6 até que um dado critério de parada seja 
satisfeito. 
8. Retorne Cmelhor e Vmelhor. 
Restrições de igualdade e desigualdade são tratadas simplesmente 
atribuindo aos bits que, ao se modificarem, levarem a soluções inviáveis, um alto índice 
de adaptabilidade. 
No GEO bits que, ao se modificarem, levem a soluções inviáveis sempre 
serão mais aptos que bits que, ao se modificarem, levem a soluções viáveis, e a todos 
eles é atribuído o mesmo índice de adaptabilidade. Não é feita distinção entre os 
mesmos e assim o ordenamento desses bits é feito de maneira aleatória com igual 
probabilidade. 
32 
 
 
Note-se que o procedimento adotado para tratar as restrições não é o 
mesmo que o comumente usado em problemas de otimização, e tido como 
potencialmente gerador de soluções sub-ótimas: o uso de funções penalidade. A função 
objetivo no GEO não é modificada, apenas modificações em bits que levem a regiões 
inviáveis do espaço de projeto têm menos chance de ocorrer. É importante salientar 
que o GEO pode operar sem nenhum problema com soluções inviáveis. Durante a 
busca pelo ótimo o algoritmo pode se mover inclusive por regiões inviáveis do espaço 
de projeto e mesmo iniciar a busca a partir de uma solução inviável. Isto dá uma grande 
flexibilidade ao algoritmo que pode, por exemplo, ser aplicado a problemas onde o 
espaço de projeto apresente regiões viáveis desconectadas, como na otimização de 
estruturas submetidas a oscilações harmônicas (Johnson, 1976). 
 
4.5 Nuvem de Partículas (Particle Swarm) 
 
A proposta do algoritmo surgiu de alguns cientistas que desenvolveram 
simulações computadorizadas do movimento de organismos, tais como bandos de 
pássaros e cardumes de peixes. Estas simulações foram fortemente baseadas na 
manipulação das distâncias entre os indivíduos, ou seja, o sincronismo no 
comportamento do bando era compreendido como um esforço dos pássaros em manter 
uma distância “ótima” entre eles. O sócio-biologista E. O. Wilson fez a conexão entre 
estas simulações e os problemas de otimização (Brandstätter e Baumgartner,2002). 
Em teoria, ao menos, os membros individuais de um bando (ou nuvem) 
podem se aproveitar das descobertas e da experiência anterior de todos os outros 
membros do bando na busca por alimentos. O fundamento de desenvolvimento da 
33 
 
 
otimização por nuvem de partículas (Particle Swarm Optimization – PSO) é uma 
hipótese na qual a troca de informações entre seres de uma mesma espécie oferece 
uma vantagem evolucionária. 
Através destas simulações simplificadas de um comportamento social e, 
baseando-se nos estudos de Wilson, a técnica de PSO foi desenvolvida em 1995 por 
Kennedy e Eberhart (Kennedy e Eberhart, 1995). 
De forma semelhante aos algoritmos genéticos que veremos mais adiante, o 
PSO é baseado em uma população, sendo que cada elemento da população é 
denominado de partícula, ou seja, cada partícula é uma solução potencial. 
Entretanto, diferentemente dos algoritmos genéticos, o PSO não possui 
operadores como o cruzamento e a mutação. O PSO não implementa a sobrevivência 
do indivíduo mais adequado ao meio, mas, ao invés disso, implementa a simulação do 
comportamento social e cognitivo. Este algoritmo pode ser facilmente implementado e 
possui características de convergência estáveis com boa eficiência computacional. 
O sistema possui, inicialmente, uma população de soluções candidatas com 
posições aleatórias. A cada uma destas partículas é atribuída uma velocidade e as 
partículas passam a se movimentar pelo espaço de busca. As partículas possuem 
memória, armazenando nesta a sua melhor posição visitada (pbest) e também a 
adequabilidade desta posição. 
A melhor posição passada pela nuvem é denominada de melhor posição 
global da população (gbest). O conceito básico do algoritmo PSO é acelerar as 
partículas em direção às posições pbest e gbest, com um peso de aceleração aleatório 
a cada passo de tempo. 
34 
 
 
Para o cálculo da velocidade é utilizada a velocidade na iteração anterior, 
multiplicada pelo momento de inércia, como um fator que pondera sua velocidade. 
O algoritmo PSO pode ser descrito da seguinte forma: 
1. Inicie aleatoriamente as velocidades e as posições de todas as 
partículas; 
2. Avalie a aptidão de cada uma das partículas; 
2.1 Avalie a função objetivo de cada uma das partículas; 
i. Se a partícula x for melhor que pbest então atualize 
pbest com a posição corrente; 
ii. Se pbest for melhor que gbest então atualize o gbest 
com pbest corrente; 
3. Atualize a velocidade de cada uma das partículas; 
4. Atualize a posição de cada uma das partículas; 
5. Repita os passos 2 a 4 até que um dos critérios de parada seja 
alcançado. 
Como pode ser observado através do algoritmo mostrado, o funcionamento 
de um algoritmo PSO é simples, o qual é composto de uma seqüência determinada de 
passos. 
Inicialmente, cada partícula da população é iniciada com valores aleatórios, 
mas tomando o devido cuidado ao verificar se os valores aleatórios gerados pertencem 
às fronteiras de limites máximos e mínimos admissíveis para cada variável e se os 
valores arbitrados atendem às restrições que o problema pode apresentar. 
A seguir, inicia-se um ciclo (loop) contínuo que é executado enquanto o 
critério de parada não for atingido. Este critério de parada pode ser referente à 
35 
 
 
convergência do algoritmo, um número máximo de iterações a serem executadas ou 
mesmo outro critério imposto pelo projetista. 
Dentro deste ciclo, deve-se calcular o valor do fitness para cada uma das 
partículas pertencentes à população e também determinar a posição que possui o 
melhor fitness para cada uma das partículas, armazenando-a na variável pbest. Isto é 
realizado através de uma comparação entre o valor do fitness atual e o valor anterior de 
pbest. 
Uma vez que todas as partículas tenham sido analisadas, deve-se 
determinar a posição que possui o melhor valor global para o fitness, ou seja, qual o 
melhor ponto que qualquer uma das partículas já passou. Isto é feito através de uma 
comparação entre os valores de pbest, atribuindo a melhor posição à variável gbest. 
A seguir, o algoritmo faz a alteração da velocidade para cada uma das 
partículas e, utilizando este novo valor da velocidade, altera a posição de cada uma das 
partículas. Esta alteração de velocidade é feita com a soma da velocidade prévia da 
partícula ponderada pelo peso inercial, permitindo a diversificação do espaço de busca, 
com o saber individual e a cooperação entre as partículas (Shi e Eberhart, 1998). 
 
4.6 CLONALG 
 
Em 1993 Forrest et al. usaram um espaço de formas de Hamming para 
modelar a seleção clonal e maturação de afinidade com o objetivo de estudar 
reconhecimento de padrões e aprendizagem. Neste modelo, a população de 
36 
 
 
anticorpos3 se desenvolveu para reconhecer uma população de antígenos4 dada. Um 
algoritmo genético foi utilizado para estudar a capacidade de generalização e a 
diversidade do SIA. A função de afinidade entre o anticorpo e o antígeno foi avaliada, 
somando o número de bits complementares entre as strings de atributos (exemplo: 
distância Hamming). 
A Teoria da Seleção Clonal foi desenvolvida por Macfarlane Burnet e David 
Talmage em 1959, diz que quando o organismo é invadido por um patógeno, algumas 
células do sistema imunológico são capazes de reconhecê-lo e de fixar-se a ele para 
efetuar uma resposta imunológica. Esse antígeno reconhecido ativa determinada célula 
induzindo sua proliferação e diferenciação em plasmócitos ou células de memória. 
Sendo considerada a maturação de afinidade, a capacidade do sistema imunológico de, 
após estar exposto a um patógeno, assimilar sua estrutura e desenvolver um conjunto 
de células com alta afinidade ao mesmo. 
Como resultado de seu estudo, os autores propuseram um algoritmo 
imunológico que tem sido muito utilizado em aplicações de SIA. Eles propuseram o 
seguinte procedimento: 
1. Construa populações aleatórias de antígenos e anticorpos; 
2. Compare os anticorpos com os antígenos e determine as suas 
afinidades; 
3. Classifique os anticorpos de acordo com suas afinidades; 
4. Desenvolva o repertório de anticorpos usando um AG. 
 
3
 Invasores e agentes infecciosos do corpo humano. 
4
 São qualquer substância capaz de induzir uma resposta imunológica. 
37 
 
 
Os autores propuseram a utilização de um Algoritmo Genético (AG) com 
crossover, mas como foi sugerido por eles mesmos, um AG sem crossover pode ser 
considerado um modelo razoável de seleção clonal. Eles também fizeram testes com 
um AG sem crossover e concluíram que o desempenho foi similar ao de um AG com 
crossover. De qualquer forma, para desenvolver uma população de anticorpos que 
mantém a diversidade usando um AG algumas medidas de afinidades para os 
anticorpos foram propostas: 
1. Escolher um antígeno aleatoriamente. 
2. Escolher aleatoriamente uma amostra de µ anticorpos. 
3. Comparar cada anticorpo com o antígeno selecionado. 
4. Adicionar o resultado do anticorpo com maior afinidade ao seu fitness, 
mantendo o fitness de todos os outros anticorpos. 
5. Repetir esse processo para vários antígenos (normalmente três vezes 
o número de anticorpos). 
Os autores discutiram o fato de que esse modelo permite o estudo de como 
o sistema imunológico aprende quais anticorpos são úteis para reconhecer dados 
antígenos. 
Já em 2000, também baseado no princípio da seleção clonal, de Castro 
desenvolveu o CLONALG, ferramenta esta que foi inicialmente concebida para resolver 
problemas de aprendizagem de máquina e reconhecimento de padrões, posteriormente 
foi aperfeiçoada para utilização em problemas em otimização. Esta ferramenta leva em 
conta duas característicascentrais que não foram consideradas por Forrest ET al.: a 
mutação e a seleção proporcional à afinidade. 
38 
 
 
O algoritmo CLONALG para reconhecimento de padrões funciona da 
seguinte maneira. Os padrões a serem reconhecidos são representados por vetores de 
atributos que correspondem a uma população de antígenos (Ag) a ser reconhecida. 
Estes padrões são comparados a um conjunto de anticorpos (Ab) gerados 
aleatoriamente. 
Para cada antígeno: 
1. Calcula-se a afinidade em relação aos anticorpos. 
2. Selecionam-se os n1 anticorpos de maiores afinidades. 
3. Calcula-se o número de clones de cada um dos n1 anticorpos 
selecionados. 
4. Calcula-se uma taxa de mutação para cada anticorpo selecionado 
através da expressão: 
onde fi é a afinidade do anticorpo i, αi é a taxa de mutação deste 
anticorpo e ρ controla seu decaimento. 
5. Cria-se uma matriz de clones. 
6. A matriz de clones sofre mutação de acordo com a taxa de mutação 
que foi calculada anteriormente. 
7. De todos esses clones, o que possuir maior afinidade em relação ao 
antígeno será um candidato a entrar na matriz de memória. 
8. Os n2 anticorpos de menor afinidade são substituídos por outros 
gerados aleatoriamente. 
A combinação da clonagem, mutação e seleção pelo antígeno promovem 
uma melhoria média da população de anticorpos, até que eles reconheçam os 
antígenos. 
39 
 
 
Para resolver problemas de otimização foi necessário fazer algumas 
alterações no algoritmo de reconhecimento de padrões: 
• Não existe uma população de antígenos e sim uma função g(.) a ser 
otimizada. A afinidade de cada anticorpo passa a ser o valor da 
função g(.) avaliada para um dado anticorpo. 
• Não há mais necessidade de manter um conjunto de memória 
separado, já que não existe uma população específica de antígenos. 
Toda a população de anticorpos vai compor o conjunto de memória. 
• Ao invés de selecionar o melhor anticorpo para cada antígeno, n 
anticorpos são selecionados para compor o conjunto de anticorpos. 
Se o processo de otimização visa localizar múltiplos ótimos em uma 
população de anticorpos, então, devemos assumir que n1 = N, ou seja, toda a 
população de anticorpos será selecionada para reprodução, e o número de clones para 
cada anticorpo deverá ser o mesmo. Isso implica que cada anticorpo será avaliado 
localmente e terá o mesmo número de clones que os outros anticorpos, sem privilegiá-
los por sua afinidade. A afinidade só será útil para determinar a taxa de mutação de 
cada anticorpo, que é inversamente proporcional ao fitness. 
 
4.7 OptaiNET 
 
A teoria da rede imunológica foi proposta por Niels Kaj Jerne em 1974, 
sugere que todas as células e moléculas do sistema imunológico se reconhecem 
mesmo na ausência de antígenos. A característica principal desta teoria é a 
40 
 
 
manutenção de um sistema imunológico em que as células B são interconectadas para 
o reconhecimento de antígenos. As células B inibem ou estimulam outras de forma que 
o sistema se estabilize. Estas conexões ocorrem quando o grau de afinidade entre duas 
células excede um determinado limiar, sendo a força de conexão proporcional a esta 
afinidade (Alexandrino, 2007). 
Seguindo a proposta de Jerne (1974), vários modelos de redes foram 
introduzidos por pesquisadores interessados em modelar e estudar o sistema 
imunológico. Sob a perspectiva das redes, as células e moléculas do sistema 
imunológico são capazes de reconhecer umas as outras e assim apresentar uma 
dinâmica comportamental que independe de estímulos externos. Os primeiros modelos 
de redes imunológicas eram baseados em equações diferenciais. Esses modelos além 
de serem muito importantes na área de SIA, também serviram como base para a 
proposta de diversos algoritmos de redes imunológicas artificiais. 
A abordagem de redes imunológicas é muito interessante, pois considera 
diversas propriedades como, aprendizado, memória, tolerância ao próprio, tamanho e 
diversidade da população das células, e também interações entre os elementos da rede 
e entre eles e o ambiente. As redes imunológicas possuem dois modelos, discreto e 
contínuo, que tem em comum uma dinâmica que incorpora um ou mais dos seguintes 
itens: 
RPV = NSt - NSu + INE - DUE 
Onde RPV é a taxa da variação da população, NSt é o nível de estimulação 
da rede, NSu é o nível de supressão da rede, INE é o fluxo de novos elementos, e DUE 
é a morte de alguns elementos. Os primeiros dois termos do lado direito da equação 
41 
 
 
estão relacionados à dinâmica da rede, já os últimos dois correspondem à 
metadinâmica. 
 
4.7.1 Modelos Contínuos de Rede Imunológica 
 
O trabalho de Farmer et al. (1986) descreveu um modelo de dinâmica 
contínua para o sistema imunológico baseado na teoria das redes imunológicas. Este 
modelo consistiu em um conjunto de equações diferenciais para quantificar a dinâmica 
dos componentes da rede imunológica. 
Na proposta de Farmer et al. (1986), as células e moléculas do sistema 
imunológico são constituídas por cadeias binárias com comprimento variável. O epítopo 
(e), também chamado de idiotopo (i), é a parte do anticorpo que pode ser reconhecida 
por outra porção do anticorpo chamada de paratopo (p), como podemos ver na figura 
4.1. Neste modelo em particular, epítopos e paratopos são mutuamente exclusivos, no 
sentido de que um epítopo não é um paratopo e vice-versa. 
 
Figura 4.1: Representação do epítopo e paratopo. 
A dinâmica da rede considera eventos de estimulação e supressão. A 
estimulação acontece quando um paratopo reconhece um epítopo e resulta na 
proliferação de anticorpos. 
 
42 
 
 
4.7.2 Modelos Discretos de Rede Imunológica 
 
A principal diferença entre um modelo contínuo de rede imunológica e 
modelo discreto é que o primeiro baseia-se no uso de equações diferenciais enquanto o 
último pode usar tanto equações diferenciais quanto um processo iterativo. Modelos 
discretos geralmente consideram variações na concentração de anticorpos e nos seus 
atributos, o que significa que os elementos desse tipo de modelo podem aumentar e 
diminuir seu número, assim como alterar suas strings de atributos para melhorar a 
afinidade em relação aos antígenos. Existem várias propostas de redes imunológicas 
na literatura de SIA, mas será estudada neste trabalho uma única rede imunológica 
discreta proposta por de Castro e Von Zuben (2001), chamada de aiNet (artificial 
immune NETwork). 
A aiNet é um grafo ponderado composto por um conjunto de nós, 
denominados de anticorpos, e conjuntos pares de nós chamados de conexões, com um 
valor característico associado, chamado de peso (de Castro, 2002). Na aiNet, assume-
se uma população S de antígenos a ser reconhecida e gera-se aleatoriamente um 
conjunto P de células na rede. Cada elemento da rede corresponde a uma molécula de 
anticorpo. Um vetor de valores reais e um espaço de formas Euclidiano são usados 
para representar anticorpos e antígenos. Cada padrão antigênico é apresentado a cada 
célula da rede e sua afinidade é determinada usando a distância Euclidiana. Um 
número de anticorpos de maior afinidade é selecionado e se reproduz de acordo com a 
sua afinidade. Os clones gerados passam por um processo de mutação somática 
inversamente proporcional a afinidade. Alguns dos clones de maior afinidade são 
selecionados para serem mantidos na rede (memória). Calcula-se a afinidade entre os 
43 
 
 
anticorpos restantes e aqueles que possuírem uma afinidade menor do que um limiar 
estabelecido são eliminados da rede num processo chamado de supressão clonal. Os 
anticorpos em que a afinidade em relação ao antígeno for menor do que um limiar dado 
também são eliminados da rede. Depoisdesse processo, alguns anticorpos gerados 
aleatoriamente são incorporados à rede (metadinâmica). 
O algoritmo aiNet pode ser resumido da seguinte maneira: 
1. Inicialização: crie uma população P de anticorpos aleatoriamente 
2. Para cada padrão antigênico s do conjunto S, faça: 
2.1. Seleção clonal e expansão: determine a afinidade de cada 
elemento da rede em relação ao antígeno apresentado. 
Selecione N1 anticorpos de maior afinidade e reproduza-os 
proporcionalmente a sua afinidade. 
2.2. Maturação de afinidade: os clones passam por um processo de 
mutação inversamente proporcional a sua afinidade. Re-
selecione os anticorpos com as N2 maiores afinidades para 
entrar no conjunto de memória. 
2.3. Metadinâmica: elimine todas as células de memória que 
possuírem uma afinidade em relação ao antígeno menor do que 
o limiar ε. 
2.4. Interações Clonais: determine as interações entre todos os 
elementos do conjunto de memória. 
2.5. Supressão Clonal: elimine todas as células de memória em que 
a afinidade entre elas seja menor do que um limiar δs. 
44 
 
 
3. Interações da rede: determine a similaridade entre cada par de 
anticorpos da rede. 
4. Supressão da rede: elimine todos os anticorpos da rede em que a 
afinidade entre eles seja menor do que a constante δs. 
5. Diversidade: introduza na rede um número N3 de anticorpos gerados 
aleatoriamente. 
6. Ciclo: repita os passos 2 a 5 até que o número máximo de iterações 
seja atingido. 
 
4.8 Algoritmo Genético com Fitness Sharing (FSGA) 
 
Este método foi desenvolvido por (Goldberg e Richardson, 1987) , estudado 
em detalhes por Deb (1989), Horn (1997) e Mahfoud (1993) e desafiado por um 
problema massivamente multimodal por Goldberg, Horn e Deb em 1992. 
Trata-se de um método de niching que tem sido aplicado para classificação 
por vários autores, segundo Mahfoud (1996). Fitness sharing trabalha através da 
redução da fitness de elementos similares na população. 
Fitness sharing embute uma pressão para a diversidade através da função 
de fitness. No cálculo da função de fitness os indivíduos não podem usar o seu valor de 
fitness sozinho, eles devem compartilhá-lo com os demais indivíduos que estejam 
próximos. Especificamente, a nova fitness de um indivíduo é igual a sua fitness original 
dividida por sua niche count (conta de nicho). A niche count de um indivíduo é a soma 
dos valores da função de sharing entre ele e cada indivíduo na população (incluindo ele 
mesmo). A função de sharing é uma função entre dois elementos da população, que 
45 
 
 
retorna 1 (um) se os elementos forem idênticos, 0 (zero) se eles ultrapassarem algum 
threshold de não similaridade; e um valor intermediário para níveis intermediários de 
similaridade. O threshold de não similaridade é especificado pela constante sshare, que 
indica a distância máxima permitida para ocorrer um sharing distinto de zero (Mahfoud, 
1993). 
A analogia com um problema de otimização é que a localização de cada 
ponto de máximo representa um nicho e, a capacidade de compartilhar a fitness 
associada a cada nicho pode encorajar a formação de sub-populações estáveis em 
cada máximo. 
Sharing é baseado no princípio de que o payout (valor) da fitness dentro do 
nicho é finito e deve ser compartilhado entre todos os indivíduos que ocupam aquele 
nicho. Conseqüentemente, a fitness atribuída a um indivíduo será inversamente 
proporcional ao número de outros indivíduos no mesmo nicho. 
No método de fitness sharing, uma vez que a população comece a convergir 
para múltiplos picos, crossover entre diferentes picos pode ser improdutivo. Deb (1989) 
mostrou que com uma restrição que evite este problema era possível melhorar o 
método de fitness sharing. Se a combinação de indivíduos de diferentes picos for 
proibida, a performance poderá ser melhorada. 
Sharing pode ser implementado usando qualquer método de seleção, ainda 
que a seleção resto estocástico (stochastic remainder) tenha sido a mais popular nas 
primeiras implementações do método. 
Note que fitness sharing é um método computacionalmente caro, que requer 
a computação de N2 medidas de distância entre pares de indivíduos, onde N é o 
número de indivíduos da população. 
46 
 
 
A execução do algoritmo genético básico pode ser resumida nos seguintes 
passos: 
• Inicialmente escolhe-se uma população inicial, normalmente formada 
por indivíduos criados aleatoriamente; 
• Avalia-se toda a população de indivíduos segundo algum critério, 
determinado por uma função que avalia a qualidade do indivíduo 
(função de aptidão ou fitness); 
• Em seguida, através do operador de "seleção", escolhem-se os 
indivíduos de melhor valor (dado pela função de aptidão) como base 
para a criação de um novo conjunto de possíveis soluções, chamado 
de nova "geração"; 
• Esta nova geração é obtida aplicando-se sobre os indivíduos 
selecionados operações que misturem suas características (chamadas 
"genes"), através dos operadores de "cruzamento" (crossover) e 
"mutação"; 
• Estes passos são repetidos até que uma solução aceitável seja 
encontrada, até que o número predeterminado de passos seja atingido 
ou até que o algoritmo não consiga mais melhorar a solução já 
encontrada. 
 
47 
 
 
5 OAT – OPTIMIZATION ALGORITHM TOOLKIT5 
 
O OAT é um projeto de software livre escrito em Java que fornece uma série 
de domínios, algoritmos e exemplos da Inteligência Computacional aplicada a 
problemas de otimização, os clássicos e os avançados, visualizações, gráficos, etc. 
Neste capítulo teremos uma visão geral do mesmo, assim como de sua implementação. 
Os princípios de projeto do OAT são fornecer uma estrutura para a execução 
e a verificação fáceis e rápidas de algoritmos de inteligência computacional para 
domínios específicos de problemas, tais que os produtos de interesse e de trabalho 
(principalmente os algoritmos) poderiam ser compartilhados e aplicados sem 
necessariamente estar relacionado com sua execução técnica. Para isto, os algoritmos 
foram projetados de forma independente tais que sua execução poderia ser adaptada e 
estendida para as necessidades específicas da aplicação. A filosofia da programação 
do software foi promovida sobre de forma que possuísse tanto recurso de 
aprendizagem como de extensibilidade. 
 
5
 Tradução: conjunto de ferramentas de algoritmos de otimização 
48 
 
 
 
Figura 5.1: Tela inicial do OAT 
O OAT possui uma interface inicial (figura 5.1), que fornece o acesso às duas 
funções principais do mesmo, o Explorer e o Experimenter. O primeiro fornece uma 
gama de problemas em diversas áreas, incluindo a Otimização de Funções Contínuas 
estudada neste trabalho (figura 5.2), neste módulo o OAT possui vários algoritmos e 
exemplos de problemas que podem ser configurados e executados conforme a opção 
do pesquisador. O segundo é uma ferramenta de experimentos, fornecendo facilidades 
na execução de experimentos com vários algoritmos e problemas, possuindo 
capacidade de comparação entre os mesmos, fornecendo relatórios estatísticos e 
interpretação de resultados. 
49 
 
 
 
Figura 5.2: Screenshot da tela do Explorer 
O software OAT fornece uma estrutura para implementar novos domínios de 
problemas, novas instâncias de problemas e novos algoritmos, bem como base para 
estas implementações. A biblioteca foi projetada para extensibilidade e as 
implementações de base são poucas, assim, pode-se adicionar um domínio 
inteiramente novo, com novos problemas e algoritmos. A seguir será fornecida uma 
resenha em alto-nível destas extensões, indicando as partes importantes da árvore de 
origem e convenções de código sugeridas conformenecessário. O OAT contém duas 
modalidades primárias: um Explorer GUI (Com.OAT.explorer.*) para exploração de 
experimentos e análise com instâncias de algoritmos e problemas com ferramentas de 
visualização, um Experimenter GUI (Com.OAT.experimenter.*) para experimentos 
50 
 
 
formais e análise com ferramentas de estatísticas e a integração de problemas, 
algoritmos e ferramentas para programas personalizados. 
O OAT e sua biblioteca são softwares do tipo open source, é possível 
estender o Framework OAT tanto operando diretamente sobre o código-base do OAT 
como criar um novo projeto que usa o OAT como uma biblioteca de origem. O primeiro 
caso pode ser usado para projetos pessoais ou por desenvolvedores no projeto OAT, a 
segunda ocorrência pode ser usada para os projetos a serem lançados publicamente 
como plug-ins ou extensões para a plataforma. 
Serão abordados dois tipos de expansão para o software OAT, estas 
abordagens explicitam a sua forma livre e seu modo de expansão que pode ser 
estendido aos demais módulos. 
O domínio (com.OAT.Domain) é uma construção que fornece um ponto de 
agregação para instâncias de algoritmos, problemas e outros aspectos relacionados à 
execução. Ela existe para fornecer acesso estruturado e ferramentas para esses 
objetos, facilitando a automação da GUI na execução em lotes de testes da unidade e 
experimentos incluindo os algoritmos, instância de problemas e condições de parada e 
run probes. Os domínios de problema são organizados dentro pacote de domínios 
(Com.OAT.Domains), exemplos são otimização da função contínua (CFO) 
(com.OAT.Domains.CFO) e o problema do caixeiro viajante (TSP) 
(com.OAT.Domains.tsp). 
Para implementar um novo domínio problema, estende a classe abstrata 
domínio (com.OAT.Domain) e implementam-se os métodos abstratos exigidos. Dois 
métodos abstratos importantes são aqueles que preparam as listas de algoritmos e 
problemas (loadAlgorithmList e loadProblemList). Esses métodos são usados no GUI’s 
51 
 
 
para permitir que o usuário escolha entre uma variedade de instâncias de problema e 
algoritmo. Para os domínios de base, esses métodos usam arquivos externos de 
propriedades que definem a extensão de instâncias de problema e algoritmo para se 
preparar para um determinado domínio. Por exemplo, o domínio CFO usa os arquivos 
Algorithms.CFO.Properties e Problems.CFO.Properties que definem nomes específicos 
classes de algoritmos e problemas para carregar para o domínio. Como alternativa, 
para domínios menores, estes podem listar explicitamente as instâncias de algoritmo e 
problema na implementação do domínio. Métodos de carregamento também são 
usados para domínio StopConditions e RunProbes (loadDomainStopConditions e 
loadDomainRunProbes), embora implementações padrão sejam fornecidas com 
implementações genéricas de cada um dos métodos, estes podem ser substituídos ou 
aumentados com listas de implementações específicas de um domínio adicional. Pode-
se implementar também, uma visualização específica para um domínio (Estendendo 
com.OAT.explorer.GUI.plot.GenericProblemPlot) que é exibida no Explorer GUI para 
fornecer uma indicação do usuário da natureza da instância-problema selecionada. 
Para explorar esse recurso, deve ser substituído o método de plotagem do problema e 
retornar uma instância da implementação de plotagem personalizado. Dois exemplos 
desse recurso são CFO que fornece uma visualização 3D das funções selecionadas 
(Com.OAT.explorer.Domains.CFO.GUI.plots.ThreeDimensionalFunctionPlot) e TSP que 
fornece uma visualização 2D dos caminhos ideais para conjuntos de dados 
selecionados (Com.OAT.explorer.Domains.tsp.GUI.plots.TourPanel). Finalmente, outro 
método importante para o Explorer GUI é para recuperar o painel do Explorer específico 
do domínio. Este painel, que deve estender um painel do Explorer genérico 
(Com.OAT.explorer.GUI.Panels.MasterPanel) fornece um espaço de trabalho no 
52 
 
 
Explorer para trabalhar com o domínio incluindo os elementos GUI para plotagem e 
visualização. Por exemplo o domínio CFO fornece um Painel mestre Explorer que 
fornece um gráfico 2D em tempo real de amostras no espaço da função 
(Com.OAT.explorer.Domains.CFO.GUI.Panels.CFOMasterPanel). O painel mestre 
Explorer fornece uma interface rudimentar e gráficos genéricos 
(Com.OAT.explorer.GUI.Panels.DefaultMasterPanel). 
O arquivo propriedades é usado para manter uma lista de todas as classes 
de domínio (domainlist.Properties). Essa lista é usada pelo iniciador OAT genérico para 
selecionar domínios e carregar o Explorer e pelo Experimenter para selecionar um 
domínio no qual fazer experimentos. Pode-se adicionar nomes de classe de domínio 
diretamente a esta lista mestre. Como alternativa, pode ser criada uma lista de domínio 
do usuário, que é carregada automaticamente pela lista de domínio mestre 
(userdomainlist.Properties). Esse segundo caso é útil para plug-ins do OAT que usam o 
software OAT como uma biblioteca e deseja que seus domínios personalizados estejam 
disponíveis na GUI da OAT. 
Uma instância de problema (Com.OAT.Problem) representa uma 
implementação reutilizável de uma definição de problema e é responsável por validar e 
avaliar as soluções do problema (Com.OAT.Solution). Como exemplos de instâncias de 
problema pode-se citar as definições de funções que avaliam vetores de números 
contínuos no domínio CFO (Com.OAT.Domains.CFO.Problems.*), e definições de 
funções que avaliam as seqüências de números binários e convertem vetores de 
números contínuos em seqüências de números binários para avaliação no domínio 
BFO (Com.OAT.Domains.bfo.Problems.*). 
53 
 
 
Para implementar uma instância problema é necessário estender os métodos 
e implementar a classe abstrata do problema (com.OAT.Problem). O método mais 
importante dessa classe é o método de custo (custo) que fornece um pipeline para 
validar e avaliar soluções e chama o método abstrato que define a lógica do problema 
específico para avaliá-lo (problemSpecificCost). Soluções tendem a ser atômicas e 
imutáveis após a sua criação, com relação aos dados específicos problema e a 
avaliação da solução atribuída, é necessário que se mantenham estáticos. Assim, o 
comportamento padrão serve para que a função de custo do problema atribua um custo 
para essas soluções que não são avaliadas de imediato. Essa funcionalidade pode ser 
modificada substituindo a função de custo genérico ou as questões de avaliação na 
classe solução (Com.OAT.Solution). O custo atribuído aos problemas é ordinal, assim o 
problema pode ser definido como custo de maximização ou minimização 
(isMinimization). Antes de soluções serem avaliadas, eles são validados para garantir 
que os dados específicos do problema contem, coincidem com a expectativa de 
definição do problema (checkSolutionForSafety). Por exemplo, no caso de CFO, uma 
instância problema CFO pai genérico (Com.OAT.Domains.CFO.CFOProblem) fornece a 
funcionalidade para garantir que uma solução enviada contém o número necessário de 
variáveis contínuas e que cada variável está dentro dos limites definidos. 
Tanto instâncias de problema como instâncias de algoritmo podem ter 
parâmetros modificáveis pelo usuário. 
Quando problemas são executados no pipeline de execução (consulte 
com.OAT.AlgorithmExecutor) funções genéricas para problemas são necessárias para 
a validação (uma implementação genérica do validateConfiguration é fornecida que 
chama o validateConfigurationInternal método Abstract), inicialização 
54 
 
 
(initialiseBeforeRun) e limpeza (cleanupAfterRun). O método de validação deve validar 
a definição do problema incluindo todos os parâmetros de usuário. A inicialização e a 
limpeza fornecem recurso para a alocação e desalocação derecursos, necessários 
quando uma instância problema está sendo usada em uma execução. Problemas de 
instâncias são reutilizáveis, assim a inicialização é necessária para garantir que 
determinada instância esteja pronta para uso. 
 
5.1 Diagramas de Classes 
 
De forma a demonstrar a forma de desenvolvimento do software OAT serão 
mostradas alguns diagramas de classes do mesmo. A forma de extração dos diagramas 
foi através da utilização do aplicativo NetBeans IDE 6.1 e de sua ferramenta de 
engenharia reversa, a qual gerou os diagramas das figuras 5.3, 5.4 e 5.5. Devido a 
grande extensão do aplicativo, foram selecionados três das classes mais importantes 
para serem exibidas. 
55 
 
 
 
Figura 5.3: Diagrama de Classes do domínio CFO 
56 
 
 
 
Figura 5.4: Diagrama de Classes do Problema da Função Ackley 
57 
 
 
 
Figura 5.5: Diagrama de Classe do Algoritmo de PSO 
58 
 
 
5.2 Simulações e experimentos 
 
Após a apresentação de diversos métodos de otimização de funções e da 
ferramenta OAT, será trazido agora um estudo experimental acerca dos algoritmos 
demonstrados. 
Para estes testes serão utilizadas funções contínuas bastante difundidas na 
literatura de otimização, são elas: Função Ackley, Funções de Jong 2 a 5, Função 
Rastringin e Função Schwefel. Estas possuem os seguintes gráficos: 
 
 (a) Gráfico da Função Ackley (b) Gráfico da Função de Jong 2 
 (c) Gráfico da Função de Jong 3 (d) Gráfico da Função de Jong 4 
 
Figura 5.6: Gráficos das Funções de (a) até (g) 
59 
 
 
 (e) Gráfico da Função de Jong 5 (f) Gráfico da Função Rastringin 
 (g) Gráfico da Função Schwefel 
 
Continuação da Figura 5.6: Gráficos das Funções de (a) até (g) 
Abaixo segue a tabela de ótimo e limites inferiores e superiores da funções 
estudadas. 
Função Ótimo Intervalos 
Ackley’s 4.440892098500626E-16 [0.0, 0.0] 
de Jong 2 0.0 [1.0, 1.0] 
de Jong 3 - - 
de Jong 4 - - 
de Jong 5 23.809436615621898 [32.0, 32.0] 
Rastringin’s 0.0 [0.0, 0.0] 
Schwefel's -837.965774544325 [420.9687, 420.9687] 
Tabela 5.1: Especificação das Funções Avaliadas 
 
60 
 
 
Para a demonstração do comportamento do algoritmos, serão usadas 
apenas duas variáveis nas funções, porém na comparação do desempenho, serão 
avaliadas funções com mais variáveis. 
 
5.2.1 Comportamento dos algoritmos 
 
Para avaliar o comportamento dos algoritmos descritos, foram selecionados 
quatro deles, cada um representando uma área de conhecimento: Algoritmo Genético 
com Fitness Sharing, Mutation Hill Climber, CLONALG e GEO. Estes algoritmos serão 
observados na otimização das funções de Ackley, Rastringin e De Jong’s 4 e 5. 
Os algoritmos executaram mediante uma condição de parada definida pela 
estagnação do algoritmo numa janela de 1000 (mil) iterações. Para a demonstração do 
comportamento de cada um, serão expostas duas Snapshots das soluções em tempo 
de execução, uma no início e outra no final da execução. 
Nas imagens que serão mostradas, as funções aparecem como figuras de 
duas dimensões, onde a tonalidade da cor relata a sua área de contorno. Possuindo 
ainda informações quanto ao posicionamento das possíveis soluções da função e a 
designação do ótimo da função quando conhecido. Nos algoritmos naturais estas 
soluções são chamadas de indivíduos. 
 
 
Figura 5.7: Forma de apresentação dos experimentos de comportamento 
 
Possíveis soluções / Indivíduos Ótimo da função 
61 
 
 
5.2.1.a Algoritmo Genético com Fitness Sharing 
Execução na Função Ackley: 
 
 (a) Início da Execução (b) Posição Final 
Figura 5.8: Snapshots da Execução do FSGA sobre a Função Ackley 
Execução na Função Rastringin: 
 
 (a) Início da Execução (b) Posição Final 
Figura 5.9: Snapshots da Execução do FSGA sobre a Função Rastringin 
 
62 
 
 
Execução na Função de Jong 4: 
 
 (a) Início da Execução (b) Posição Final 
Figura 5.10: Snapshots da Execução do FSGA sobre a Função de Jong 4 
Execução na Função de Jong 5: 
 
 (a) Início da Execução (b) Posição Final 
Figura 5.11: Snapshots da Execução do FSGA sobre a Função de Jong 5 
 
 
63 
 
 
Com a observação das imagens acima se pode constatar que o algoritmo 
genético com fitness sharing, busca ao ótimo porém sem deixar de preservar sub-
ótimos, espalhando sua população em diferentes pontos próximos ao ótimo da função. 
 
5.2.1.b Algoritmo Mutation Hill Climber 
Execução na Função Ackley: 
 
 (a) Início da Execução (b) Posição Final 
Figura 5.12: Snapshots da Execução do Mutation Hill Climbing sobre a Função Ackley 
 
64 
 
 
 
Execução na Função Rastringin: 
 
 
 (a) Início da Execução (b) Posição Final 
Figura 5.13: Snapshots da Execução do Mutation Hill Climbing sobre a Função Rastringin 
Execução na Função de Jong 4: 
 
 (a) Início da Execução (b) Posição Final 
Figura 5.14: Snapshots da Execução do Mutation Hill Climbing sobre a Função de Jong 4 
65 
 
 
 
Execução na Função de Jong 5: 
 
 (a) Início da Execução (b) Posição Final 
Figura 5.15: Snapshots da Execução do Mutation Hill Climbing sobre a Função de Jong 5 
 
Este algoritmo como o próprio nome diz é de “Subida de Encosta”, quando 
uma de suas soluções encontra um “pico” ele sobe, porém, esta execução pode 
estagnar o algoritmo em solução não próxima do “ótimo”, como podemos observar no 
problema da função Rastringin. 
 
66 
 
 
 
5.2.1.c Algoritmo CLONALG 
Execução na Função Ackley: 
 
 (a) Início da Execução (b) Posição Final 
Figura 5.16: Snapshots da Execução do CLONALG sobre a Função Ackley 
Execução na Função Rastringin: 
 
 (a) Início da Execução (b) Posição Final 
Figura 5.17: Snapshots da Execução do CLONALG sobre a Função Rastringin 
67 
 
 
 
Execução na Função de Jong 4: 
 
 (a) Início da Execução (b) Posição Final 
Figura 5.18: Snapshots da Execução do CLONALG sobre a Função de Jong 4 
Execução na Função de Jong 5: 
 
 (a) Início da Execução (b) Posição Final 
Figura 5.19: Snapshots da Execução do CLONALG sobre a Função de Jong 5 
 
68 
 
 
O algoritmo do CLONALG busca o “ótimo” da função gerando pequenas 
mutações que a cada iteração se aproximam mais do ótimo, entretanto, como se vê nas 
execuções acima, ele também gera indivíduos de forma aleatória que podem ou não 
estar em um local promissor, buscando com isso não permitir que escape nenhum 
ótimo na função. 
 
5.2.1.d Algoritmo GEO 
 
Execução na Função Ackley: 
 
 (a) Início da Execução (b) Posição Final 
Figura 5.20: Snapshots da Execução do GEO sobre a Função Ackley 
69 
 
 
 
Execução na Função Rastringin: 
 
 (a) Início da Execução (b) Posição Final 
Figura 5.21: Snapshots da Execução do GEO sobre a Função Rastringin 
Execução na Função de Jong 4: 
 
 (a) Início da Execução (b) Posição Final 
Figura 5.22: Snapshots da Execução do GEO sobre a Função de Jong 4 
70 
 
 
 
Execução na Função de Jong 5: 
 
 (a) Início da Execução (b) Posição Final 
Figura 5.23: Snapshots da Execução do GEO sobre a Função de Jong 5 
 
Este algoritmo, assim como o Mutation Hill Climbing, tende a convergir ao 
primeiro ponto ótimo que encontra, recaindo no problema de sub-ótimos. 
 
5.2.2 Comparação de desempenho 
 
No comparativo de desempenho dos algoritmos foi utilizada a funcionalidade 
Experimenter disponível no OAT. O Experimenter fornece uma série de opções para 
gerar os testes com a escolha da quantidade de funções e suas variáveis assim como 
os algoritmos que irão

Continue navegando