
Os problemas de otimização são baseados em três pontos principais: a codificação do problema, a função objetivo que se deseja maximizar ou minimizar e o espaço de soluções associado. Pode-se imaginar um problema de otimização como uma caixa preta com n botões, onde cada botão é um parâmetro do problema, e uma saída que é o valor da função objetivo, indicando se um determinado conjunto de parâmetros é bom ou não para resolver este problema.
Uma das vantagens de um algoritmo genético é a simplificação que eles permitem na formulação e solução de problemas de otimização. AG's simples normalmente trabalham com descrições de entrada formadas por cadeias de bits de tamanho fixo. Outros tipos de AG's podem trabalhar com cadeias de bits de tamanho variável., como por exemplo AG's usados para Programação Genética. AG's possuem um paralelismo implícito decorrente da avaliação independente de cada uma dessas cadeias de bits, ou seja, pode-se avaliar a viabilidade de um conjunto de parâmetros para a solução do problema de otimização em questão. O AG é indicado para a solução de problemas de otimização complexos, NP-Completos, como o "caixeiro viajante", que envolvem um grande número de variáveis e, consequentemente, espaços de soluções de dimensões elevadas. Além disso, em muitos casos onde outras estratégias de otimização falham na busca de uma solução, os AG's convergem. Os AG's são numericamente robustos, ou seja, não são sensíveis a erros de arredondamento no que se refere aos seus resultados finais.
Existem três tipos de representação possíveis para os cromossomos: binária, inteira ou real. A essa representação se dá onome de alfabeto do AG. De acordo com a classe de problema que se deseje resolver pode-se usar qualquer um dos três tipos.
Uma implementação de um algoritmo genético começa com uma população aleatória de cromossomos. Essas estruturas são, então, avaliadas e associadas a uma probabilidade de reprodução de tal forma que as maiores probabilidades são associadas aos cromossomos que representam uma melhor solução para o problema de otimização do que àqueles que representam uma solução pior. A aptidão da solução é tipicamente definida com relação à população corrente.
A função objetivo de um problema de otimização
é construída a partir dos parâmetros envolvidos no
problema. Ela fornece uma medida da proximidade da solução
em relação a um conjunto de parâmteros. Os parâmetros
podem ser conflitantes, ou seja, quando um aumenta o outro diminui. O objetivo
é encontrar o ponto ótimo. A função objetivo
permite o cálculo da aptidão bruta de cada indivíduo,
que fornecerá o valor a ser usado para o cálculo de
sua probabilidade de ser selecionado para reprodução.
cromossomo (genótipo) - cadeia de bits que representa uma solução possível para o problema.
gene - representação de cada parâmetro de acordo com o alfabeto utilizado (binário, inteiro ou real).
fenótipo - cromossomo codificado
população - conjunto de pontos (indivíduos) no Espaço de Busca
geração - iteração completa do AG que gera uma nova população
aptidão bruta - saída gerada pela função objetivo para um indivíduo da população
aptidão normalizada - aptidão bruta normalizada, entrada para o algoritmo de seleção.
aptidão máxima - melhor indivíduo da população corrente
aptidão média - aptidão média da população
corrente
Deve ser observado que cada cromossomo, chamado de indivíduo
no AG, corresponde a um ponto no espaço de soluções
do problema de otimização. O processo de solução
adotado nos algoritmos genéticos consiste em gerar, através
de regras específicas, um grande número de indivíduos,
população, de forma a promover uma varredura tão
extensa quanto necessária do espaço de soluções.
Operações
Básicas de um AG simples
A estrutura básica do algoritmo genético é mostrada
na figura abaixo:
FIGURA 1: ESTRUTURA BÁSICA DE
UM AG SIMPLES
Com referência ao diagrama da figura figura 1, observa-se que
cada iteração do algoritmo genético corresponde à
aplicação de um conjunto de quatro operações
básicas: cálculo de aptidão, seleção,
cruzamento e mutação. Ao fim destas operações
cria-se uma nova população, chamada de geração
que, espera-se, representa uma melhor aproximação da solução
do problema de otimização que a população anterior.
A população inicial é gerada atribuindo-se aleatoriamente
valores aos genes de cada cromossomo. A aptidão bruta de um indivíduo
da população é medida por uma função
de erro, também chamada de função objetivo do
problema de otimização. A aptidão bruta é
em seguida normalizada (aptidão normalizada), para permitir um melhor
controle do processo de seleção. Como critérios de
parada do algoritmo em geral são usados a aptidão do melhor
indivíduo em conjunto com a limitação do número
de gerações. Outros critérios podem envolver, por
exemplo, um erro abaixo de um valor especificado pelo projetista para um
determinado parâmetro do problema.
INICIALIZAÇÃO
Uma população de n individuos é gerada aleatoriamente.
Cada um dos indivíduos da população representa uma
possível solução para o problema, ou seja, um ponto
no espaço de soluções.
CÁLCULO DA APTIDÃO
Geralmente a aptidão do indivíduo é determinada
através do cálculo da função objetivo, que
depende das especificações de projeto. Neste trabalho, cada
indivíduo é uma entrada para uma ferramenta de análise
de desempenho, cuja saída fornece medidas que permitem ao algoritmo
genético o cálculo da aptidão do indivíduo.
Ainda nesta fase os indivíduos são ordenados conforme a sua
aptidão.
SELEÇÃO
Nesta fase os indivíduos mais aptos da geração
atual são selecionados. Esses indivíduos são utilizados
para gerar uma nova população por cruzamento.Cada indivíduo
tem uma probabilidade de ser selecionado proporcional à sua aptidão.
Para visualizar este método considere um círculo dividido
em n regiões (tamanho da população), onde a
área de cada região é proporcional à aptidão
do indivíduo (figura 2). Coloca-se sobre este círculo uma
"roleta" com n cursores, igualmente espaçados. Após um giro
da roleta a posição dos cursores indica os indivíduos
selecionados. Este método é denominado amostragem universal
estocástica. Evidentemente, os indivíduos cujas regiões
possuem maior área terão maior probabilidade de serem selecionados
várias vezes. Como consequência, a seleção de
indivíduos pode conter várias cópias de um mesmo indivíduo
enquanto outros podem desaparecer.
FIGURA 2 : AMOSTRAGEM ESTOCÁSTICA UNIVERSAL
CRUZAMENTO ("CROSS-OVER")
Os indivíduos selecionados na etapa anterior são cruzados
da seguinte forma: a lista de indivíduos selecionados é embaralhada
aleatoriamente criando-se, desta forma, uma segunda lista, chamada lista
de parceiros. Cada indivíduo selecionado é então cruzado
com o indivíduo que ocupa a mesma posição na lista
de parceiros. A forma como se realiza este cruzamento é ilustrada
na figura figura 3. Os cromossomos de cada par de indivíduos a serem
cruzados são particionados em um ponto, chamado ponto de corte,
sorteado aleatoriamente. Um novo cromossomo é gerado permutando-se
a metade inicial de um cromossomo coma metade final do outro. Deve-se notar
que se o cromossomo for representado por uma cadeia de bits, como na figura
figura 3, o ponto de corte pode incidir em
qualquer posição (bit) no interior de um gene, não
importando os limites do gene. No caso de genes representados por números
reais, a menor unidade do cromossomo que pode ser permutada é o
gene.
FIGURA 3 : CRUZAMENTO DE DOIS INDIVÍDUOS NUM AG SIMPLES
MUTAÇÃO
A operação de mutação é utilizada
para garantir uma maior varredura do espaço de estados e evitar
que o algoritmo genético convirja muito cedo para mínimos
locais. A mutação é efetuada alterando-se o valor
de um gene de um indivíduo sorteado aleatoriamente com uma determinada
probabilidade, denominada probabilidade de mutação, ou seja,
vários indivíduos da nova população podem ter
um de seus genes alterado aleatoriamente.
Além da forma como o cromossomo é codificado, existem
vários parâmetros do algoritmo genético que podem ser
escolhidos para melhorar o seu desempenho, adaptando-o às características
particulares de determinadas classes de problemas. Entre eles os mais importantes
são: o tamanho da população, o número de gerações,
a probabilidade de cross-over e a probabilidade de mutação.
A influência de cada parâmetro no desempenho do algoritmo depende
da classe de problemas que se está tratando. Assim, a determinação
de um conjunto de valores otimizado para estes parâmetros dependerá
da realização de um grande número de experimentos
e testes. Na maioria da literatura os valores encontrados estão
na faixa de 60 a 65% para a probabilidade de cross-over e entre 0,1 e 5%
para a
probabilidade de mutação. O tamanho da população
e o número de gerações dependem da complexidade do
problema de otimização e devem ser determinados experimentalmente.
No entanto, deve ser observado que o tamanho da população
e o número de gerações definem diretamente o tamanho
do espaço de busca a ser coberto. Existem estudos que utilizam um
AG como método de otimização para a escolha dos parâmetros
de outro AG, devido à importância da escolha correta destes
parâmetros.
Os AG's possuem uma larga aplicação em muitas áreas científicas, entre as quais podem ser destacadas:
-- Síntese de circuitos analógicos: para uma certa entrada e uma saída desejada, por exemplo tensão, o AG gera a topologia , o tipo e o valor dos componentes do circuito.
-- Síntese de protocolos: determinação de quais funções do protocolo devem ser implementadas em hardware e quais devem ser implementadas em software para que um certo desempenho seja alcançado.
-- Programação Genética: gera a listagem de um programa, numa determinada linguagem especificada, para que um determinado conjunto de dados de entrada forneça uma saída desejada.
-- Gerenciamento de redes: supervisão do tráfego nos links e das filas nos "buffers" de roteadores para descobrir rotas ótimas e para reconfigurar as rotas existentes no caso de falha de algum link
-- Computação Evolutiva: gera programas que se adaptam a mudanças no sistema ao longo do tempo.
-- Otimização evolutiva multi-critério: otimização de funções com múltiplos objetivos que sejam conflitantes.
-- Problemas de otimização complexos: problemas com muitas variáveis e espaços de soluções de dimensões elevadas. Ex: problema do caixeiro viajante, gerenciamento de carteiras de fundos de investimento.
-- Ciências biológicas: modela processos biológicos para o entendimento do comportamento de estruturas genéticas.
-- Autômatos auto-programáveis.
Até o presente momento todos os fundamentos apresentados basearam-se
na nos algoritmos genéticos simples. Existem outros tipos de algoritmos
genéticos que foram desenvolvidos para problemas mais específicos.
GENITOR
Genitor (Whitley 1988; 1989) é um algoritmo cujos melhores pontos
encontrados são preservados na população. Este procedimento
é denominado de elitismo. Na prática isto resulta
numa busca mais agressiva, que na prática é geralmente bastante
efetiva. No entanto existe o perigo de uma convergência prematura
para mínimos locais. Cada indivíduo selecionado e cruzado
com seu parceiro é colocado no lugar do pior indivíduo da
população anterior. A aptidão é atribuída
de acordo com um "ranking", ou seja, a aptidão de cada indivíduo
assume valores discretos.
CHC
Outro AG que coleciona os melhores indivíduos da população
atual é o CHC (Cross generational elitist selection, heterogeneous
recombination and Cataclysmic mutation). Após o cruzamento,
feito aleatoriamente, os N melhores indivíduos são coletados
levando-se em consideração a população atual
e a população gerada após o cruzamento. Remove-se
os indivíduos duplicados. Este método impõe uma busca
mais agressiva, assim como no Genitor. Repare que a seleção
está implícita no algoritmo, a partir do momento que escolhe
os melhores indivíduos de cada população (anterior
e atual). Normalmente usa-se populações pequenas, com 50
indivíduos, por exemplo. O ponto de cross-over é sempre a
metade do cromossomo. Para se solucionar o problema de convergência
prematura para mínimos locais é utilizada uma alta taxa de
mutação, sempre preservando o melhor indivíduo da
população. A partir da primeira seleção aleatória,
utiliza-se o cross-over diretamente nas populações subsequentes.
ALGORITMOS HÍBRIDOS
Muitos autores consideram que os AG's nem sempre são a melhor
solução para problemas de otimização específicos.
Desta forma, os algoritmos híbridos utilizam os AG's como ponto
de partida para métodos de otimização tradicionais,
como o "Simulated Annealing", método de Powel, entre outros. A desvantagem
destes algoritmos é a introdução de um "overhead"
computacional devido à busca baseada em populações,
característica dos AG's. A mistura das técnicas tradicionais
com os AG's introduzem uma espécie de aprendizado no AG, pois os
cromossomos utilizados foram resultado da técnica denominada "hill-climbing",
utilizada nos métodos de otimização tradicionais,
que utilizam derivadas.
Os AG's são apropriados para problemas de otimização
complexos, que envolvem muitas variáveis e um espaço de soluções
de dimensão elevada.
Abrangem um grande número de aplicações.
O controle sobre os parâmetros do algoritmo é de fundamental
importância para uma convergência rápida.
Para problemas específicos é aconselhável a utilização
de algoritmos híbridos, que misturam as técnicas dos AG's
com os métodos de otimização tradicionais.
Devido ao grande número de variáveis que um AG trata
e às populações elevadas e alto número de gerações
para a cobertura do espaço de soluções, os AG's possuem
um custo computacional elevado.
M. Mitchell, An Introduction to Genetic Algorithms. MIT Press, 1996.
H. Horner, "A C++ class library for genetic programming: The Vienna University of Economics - genetic programming kernel", Internet Draft, maio de 1996. http://www.wu-wien.ac.at/usr/h88/h8850092.
Darrel Whitley, "A Genetic Algorithm Tutorial", Computer Science Department, Colorado State University.
Grefentette, J.J. (1993) Foundations of Genetic Algorithms -2-, D. Whitley, ed., Morgan Kaufmann. pp: 75-91.
Muhlenbein, H. (1992) How genetic algorithms really work: I. Mutation and Hillclimbing, Paralell Problem Solving from Nature -2-, R. Manner and B. Manderick, North Holland.
Nix, A. and Vose, M. (1992) Modeling Genetic Algorithms with Markov
Chains. Annals of Mathematics and Artificial Intelligence. 5:79-88.