Capítulo II – Conceitos Fundamentais
II.7. Algoritmo Genético
A Computação Evolucionária é uma área da ciência da computação que usa idéias da teoria de Darwin sobre a evolução das espécies para resolver problemas computacionais
Capítulo II – pág. 25 que buscam uma solução dentro de um enorme espaço de possibilidades. Esses problemas computacionais geralmente requerem que o sistema seja adaptativo, ou seja, que ele mantenha a boa performance em ambientes sob mudança.
A evolução biológica é uma atraente fonte de inspiração para problemas computacionais difíceis. Ela é, de fato, um método de busca através de um enorme número de possíveis seqüências genéticas para se obter uma solução que permita ao organismo sobreviver e reproduzir-se em seu ambiente. Deste modo, a evolução também pode ser vista como um método de adaptação a ambientes em mudança. As espécies evoluem através de variações randômicas (mutação, recombinação e outros operadores) seguidas por um processo de seleção natural no qual os mais aptos tendem a sobreviver e a reproduzir-se, propagando seu material genético para as gerações futuras. Estas regras que permitem a evolução, apesar de simples, são responsáveis pela extraordinária variedade e complexidade que se vê na biosfera.
Existem várias aproximações que seguem a linha da computação evolucionária, para as quais o termo geralmente usado é algoritmo evolucionário. A forma mais usada desses algoritmos é o algoritmo genético (AG), que será o foco deste trabalho (Deb, 1999; Deb, 1999; Deb, 2000).
Na década de 60, na Universidade de Michigan, o AG foi desenvolvido por John Holland, juntamente com seus colegas e alunos. Os objetivos desses pesquisadores foram explicar rigorosamente e de forma abstrata o processo adaptativo dos sistemas da natureza e desenvolver sistemas artificiais que tivessem propriedades similares aos sistemas naturais. A abordagem de Holland, portanto, foi puramente teórica apesar de baseada em modelagem computacional.
O método de Holland é especialmente eficaz dentre os algoritmos evolucionários porque ele não apenas considera o papel da mutação (mutações melhoram muito pouco os algoritmos), mas também utiliza a recombinação genética: essa recombinação, o cruzamento de soluções parciais, melhora muito a capacidade do algoritmo de se aproximar e, eventualmente, encontrar o ótimo.
Em casos de otimização mais complexos, em que o número de variáveis de decisão é muito grande ou em que a função objetivo é altamente não-linear, métodos de otimização estocásticos ou aleatórios, como o algoritmo genético, são uma alternativa para se encontrar
a solução do problema. O uso do AG em problemas mais complexos da engenharia vem crescendo muito na última década, já que ele constitui uma classe de métodos de busca especialmente adaptado para resolver problemas de otimização mais difíceis.
A maioria dos algoritmos de otimização gera uma seqüência de possíveis soluções, baseando-se no gradiente da função objetivo e no jacobiano das restrições (nos casos em que elas se aplicam), muitas vezes convergindo apenas para um extremo local. Entretanto, nem todo tipo de problema de otimização pode ser resolvido por métodos clássicos, como os que usam o gradiente, pois:
• Em sistemas não lineares, muitas vezes se está interessado em um ótimo global, mas os métodos com gradiente encontram apenas extremos locais, sem disponibilizar informações que permitam compará-los com o ótimo global;
• A solução pode ser bastante influenciada pela estimativa inicial;
• A função objetivo não deve ter descontinuidades, além de ser necessário um procedimento para cálculo dos gradientes (analítico ou numérico), o que, em casos mais complexos, pode ser inviável.
A concepção do AG é bastante diferente dos métodos tradicionais de otimização. A diferença básica é que, enquanto os outros métodos processam um único ponto no espaço, o AG, assim como outros métodos estocásticos, mantém uma população de soluções potenciais.
O AG vem sendo bastante usado na indústria, como mostram os exemplos abaixo: • Estimação de parâmetros, como em funções de transferência para filtros digitais. • Controle de sistemas de engenharia para melhorar a performance do sistema. • Robótica em sistemas de navegação, para que um robô alcance o destino sem se perder ou bater em algum objeto.
• Projetos de engenharia, não apenas para aqueles matematicamente orientados, mas também para projetos que incluem a otimização da forma de um objeto, configuração de um processo e muitas outras aplicações.
• Planejamento, como no problema de um vendedor viajante, no sistema de bomba d’água em uma indústria, produção e distribuição de inventário.
Capítulo II – pág. 27 Kasat et al. (2003) apresenta uma revisão sobre a aplicação do algoritmo genético na modelagem de processos de polimerização. O estado da arte sobre a aplicação do AG para a otimização de condições operacionais para a produção de polímeros feitos sob medida é apresentado no capítulo VI.
Algumas observações gerais sobre a solução através do AG devem ser destacadas: • Uma desvantagem do algoritmo evolucionário é que a solução é melhor em comparação com outra soluções conhecidas; um algoritmo como este não possui um conceito de solução ótima ou um meio de testar se a solução é ótima.
• A operação em conjunto dinâmico de dados é difícil, pois a convergência pode ser rápida para soluções que podem não ser válidas para outro conjunto de dados. Muitos métodos têm sido propostos para contornar essa convergência prematura, tanto pelo aumento da probabilidade de mutação, quando a qualidade das soluções cai, quanto pela introdução de elementos novos (aleatórios) na população.
• À medida que o tempo passa, cada geração tende a ter múltiplas cópias de alguns parâmetros, os quais precisam ser evoluídos, e isso pode tornar o processo mais lento.
II.7.1. Teoria da Seleção Natural
Em 1859, Charles Darwin, após sua expedição às ilhas Galápagos, formulava a Teoria da Evolução, também conhecida como Teoria da Seleção Natural: o meio ambiente tem sua ação implacável sobre a evolução das espécies, de modo a sobreviverem apenas os indivíduos melhor adaptados ao seu habitat; apenas estes teriam a oportunidade de deixar descendência, perpetuando as suas características.
Mais tarde, a Genética daria suporte à teoria de Darwin. Os seres vivos têm, no núcleo de suas células, moléculas de DNA onde estão gravadas as suas características, mais precisamente genes organizados em cadeias, os cromossomos. Durante a reprodução sexuada, os conteúdos dos cromossomos dos dois pais são misturados, gerando novos cromossomos que combinam as características dos seus progenitores.
Com pouca freqüência ocorrem mutações no código genético: são pequenas alterações acidentais na cadeia dos genes, as quais poderão ter repercussões nas características do novo ser. Algumas dessas mutações são bastante prejudiciais (como a
anemia ou a síndrome de Down), muitas são pouco influentes (pessoas esquerdinas, capacidade de dobrar a língua), mas outras têm formas benéficas e são estas as responsáveis pela evolução de toda a vida na Terra, incluindo a espécie humana.
Se esta nova característica oferecer vantagens competitivas, aumentará a probabilidade deste indivíduo sobreviver e de passar esta característica à sua descendência. Com o tempo, a nova característica acabará por se impor na espécie, uma vez que esta confere aos indivíduos melhores condições de sobrevivência: num mundo com recursos limitados, a competição não perdoa os mais fracos. E assim, geração após geração, a espécie evolui no sentido de melhor se adaptar ao seu meio ambiente.
Um exemplo de Seleção Natural é a evolução do Basilosauro, quase o protótipo de uma baleia que vivia há 45 milhões de anos (Rennard, 2004). Ele media cerca de 15 metros e pesava 5 toneladas, tinha uma cabeça quase independente e patas posteriores, movia-se em movimentos ondulatórios e caçava pequenas presas. Seus membros anteriores se reduziam a pequenas nadadeiras com uma articulação (joelho).
Movimentos na água eram difíceis, exigindo grande esforço do Basilosauro, já que seus membros anteriores não estavam adaptados para o nado. Para adaptá-los, um fenômeno duplo deveria ocorrer: o encurtamento do “braço” com travamento da articulação do joelho e a extensão dos dedos, que constituiriam a estrutura básica da nadadeira.
O Basilosauro era um caçador, ele deveria ser rápido e preciso. Através do tempo, apareceram sujeitos com dedos mais longos e braços mais curtos decorrentes de mutações genéticas. Isso permitiu que eles se movessem mais rápido e mais precisamente que antes, permitindo que vivessem mais e tivessem mais descendentes, propagando seu material genético para as gerações futuras. Outras melhorias ocorreram na sua aerodinâmica, como a integração da cabeça com o corpo, finalmente produzindo um sujeito perfeitamente adaptado às restrições de um ambiente aquoso.
Este processo de adaptação nada mais é que uma otimização gerada pelo mecanismo de Darwin, através de mutações, reprodução e troca do material genético. Esta observação é a base para o AG.
Capítulo II – pág. 29
II.7.2. Fundamentos do Algoritmo Genético
O AG constitui uma classe de métodos de busca especialmente adaptada para resolver problemas de difícil solução. Em geral, os algoritmos de busca consistem em um passeio sistemático através de um espaço de busca de possíveis soluções até que uma solução aceitável seja encontrada. O AG transpõe as noções da evolução natural para o mundo dos computadores, de modo que os indivíduos (potenciais soluções) são representados por cromossomos compostos por genes. Um valor, geralmente conhecido como aptidão (fitness value), é usado para refletir a qualidade que o cromossomo tem no problema em questão.
O AG mantém uma coleção de soluções – uma população de indivíduos – e então realiza uma busca multidirecional. Por analogia com a natureza, através da seleção, os indivíduos mais aptos – potenciais soluções do problema – sobrevivem para reprodução, enquanto que os indivíduos mais fracos, que não são tão adaptados ao meio, morrem. Novos indivíduos (filhos) são criados a partir de um ou dois pais através da mutação ou do cruzamento (crossover), respectivamente (operadores unitário e binário). Os novos indivíduos substituem os mais velhos na população e são usualmente similares aos seus pais. Em outras palavras, em uma geração aparecerão indivíduos que se assemelham com os indivíduos mais aptos da geração anterior, imitando o mecanismo de “sobrevivência dos mais aptos” que ocorre na natureza.
O mecanismo do AG é simples, envolvendo nada mais que a cópia de cadeias ou
strings (possíveis soluções) e a permutação parcial destas cadeias. A explicação do porquê
esse simples processo funciona é muito mais conveniente e poderosa. Simplicidade de operação e poder de efeito são dois dos principais atrativos do AG.
Nas seções seguintes serão discutidas algumas particularidades do AG, como a linguagem, a representação das soluções, os operadores, as funções de aptidão, os métodos de seleção, bem como o tratamento de restrições.
II.7.2.1. Linguagem do AG
Antes de prosseguir com mais detalhes sobre o AG, é importante comentar sobre a linguagem usada e a sua analogia com os termos da evolução natural.
Nos sistemas genéticos artificiais, uma solução na população candidata é chamada
string (cadeia) e corresponde ao cromossomo nos sistemas biológicos. Nos sistemas
naturais, o pacote genético total, o conjunto de cromossomos, é chamado genótipo, enquanto que, no sistema genético artificial, o pacote total de cadeias é chamado de estrutura (se ela for composta de apenas uma cadeia, ambos os termos podem ser usados indiscriminadamente, porém é necessário diferenciá-los). Nos sistemas naturais, o organismo formado pela interação do genótipo com o ambiente é chamado fenótipo. Nos sistemas genéticos artificiais, as cadeias são decodificadas para formar um conjunto de parâmetros particular, uma alternativa de solução ou um ponto no espaço de solução. O planejador de um sistema genético artificial tem uma variedade de alternativas para codificar parâmetros numéricos e não numéricos, mas este assunto será discutido com mais detalhe em seção posterior.
Na terminologia natural, diz-se que os cromossomos são compostos de genes, os quais podem assumir certos valores chamados alelos. Na genética, a posição do gene (seu
locus) é definido separadamente da função do gene. Portanto, pode-se falar de um gene
particular, por exemplo, para o gene da cor dos olhos de um animal, seu locus seria a posição 10, e seu valor do alelo, olhos azuis. Na busca genética artificial, diz-se que as cadeias são compostas de características ou detetores, os quais podem assumir diferentes valores. As características podem estar localizadas em diferentes posições na cadeia. As diferenças entre os dois sistemas genéticos está resumida na Tabela II. 1 abaixo.
Capítulo II – pág. 31 Tabela II. 1: Comparação entre as terminologias dos sistemas natural e artificial
Natural Algoritmo Genético
Cromossomo Cadeia, representação de uma solução. Constituído por genes.
Gene Característica, caractere ou detetor, parte da representação de uma solução Alelo Valor da característica
Locus Posição na cadeia
Indivíduo Solução para o problema População Conjunto de soluções Genótipo Estrutura
Fenótipo Conjunto de parâmetros, alternativa de solução, estrutura decodificada Epistase Não-linearidade
O AG geralmente trata de problemas não-lineares. Isto normalmente significa que não é possível tratar cada parâmetro como uma variável independente, que pode ser resolvida isolada das outras variáveis, mas existem interações entre elas que devem ser consideradas. No AG, esta interação é geralmente referenciada como epistase que, nos sistemas naturais, significa a supressão do efeito de um gene por outro gene não-alelo.
II.7.2.2. Representação
Ao projetar o AG para um dado problema, a escolha da representação, isto é, a construção dos cromossomos, é o primeiro passo. Geralmente, para o mesmo problema alguém pode imaginar várias possíveis representações, desde representações muito simples até outras mais complicadas. Apesar do uso dos princípios básicos de hereditariedade e evolução, os resultados obtidos com representações distintas podem ser bem diferentes. Algumas representações podem fornecer bons resultados, enquanto outras podem falhar na convergência ou levar muito tempo para se completar. A razão para isso é que a representação, juntamente com os operadores de recombinação, limita a exploração do espaço de busca para certas regiões. Em algumas situações é desejável explorar o máximo possível do espaço de busca. Em outras situações, quando muitas restrições na solução aceitável são impostas, é preferível explorar apenas as regiões do espaço que correspondem
– ao menos parcialmente – a estas restrições. Além disso, representações diferentes reparametrizam o espaço de busca, tornando a busca mais fácil ou mais difícil.
A experiência geral é que a incorporação de conhecimento específico sobre o domínio do problema na representação ajuda o processo evolucionário em direção a boas soluções. Entretanto, não existe nenhuma receita exata para a escolha da representação correta para cada problema. Por outro lado, com representações simples, o AG pode gastar muito tempo explorando regiões irrelevantes do espaço. Por outro lado, quando se incorpora muito conhecimento do problema, os filhos gerados provavelmente estarão muito longe dos seus pais sem nuca chegar a um equilíbrio.
Uma representação comumente usada em um simples AG é a cadeia binária de comprimento fixo. No caso de problemas mais complexos, uma representação mais sofisticada pode conduzir a melhores resultados. Em alguns casos, o problema consiste na otimização de uma função através de um ou mais parâmetros de valores reais. Em tais situações, cadeias de valores reais podem chegar à solução mais rapidamente se os operadores do AG forem também propriamente projetados.
Por exemplo, uma cadeia binária representando N variáveis de um problema é dada por:
onde cada posição pode assumir apenas valor 0 ou 1.
A variável xi tem um comprimento de sub-cadeia li , de modo que 2li diferentes
soluções são possíveis. O comprimento total do cromossomo ou da cadeia é dado por
1 N i i l =
∑
.O valor decodificado de uma cadeia si de comprimento li é dado por
, 1 ( ) 2 , 1,..., , i i l l j i j i j DV s − sb i N = =
∑
⋅ = (II.10) onde sbj,i é o valor do dígito na posição j da variável i. Se por exemplo li = 5, há 32possíveis soluções para a variável xi. Ao se limitar esta variável ao intervalo [0,31], apenas
valores inteiros podem ser considerados neste intervalo, onde o mínimo é dado por 00000 11010 1001001 010 … 0010
Capítulo II – pág. 33 ou 0 e o máximo por 11111 ou 31. Entretanto, o AG não está restrito a usar apenas valores inteiros neste intervalo. Ao se modificar o comprimento da sub-cadeia e os limites inferior e superior da variável, qualquer outro valor inteiro ou não inteiro podem ser obtidos pela equação: max min min ( ), 1,..., , 2i 1 i i i i l i x x x =x + − ⋅DV s i= N − (II.11) onde li é o comprimento da sub-cadeia,
min
i
x e ximax são os limites inferior e superior de xi e
DV(si) é o valor decodificado da sub-cadeia si, de acordo com a equação (II.10). Esta
função de mapeamento permite obter as seguintes propriedades: qualquer precisão arbitrária finita pode ser alcançada ao se usar uma cadeia suficientemente longa; diferentes parâmetros podem ter diferentes precisões ao simplesmente se usar cadeias de comprimentos diferentes; os parâmetros podem assumir valores positivos ou negativos (Deb, 1999).
O comprimento de uma sub-cadeia é normalmente escolhido com base na precisão
εi desejada para a variável. Por exemplo, se se deseja uma precisão de 0,001, o número total de possibilidades para a variável é
(
ximax−ximin)
0, 001, que por sua vez também é dada por2li. Desta maneira, l
i pode ser obtido por (Deb, 1999):
max min 2 log i i i i x x l ε ⎛ − ⎞ = ⎜ ⎟ ⎝ ⎠ . (II.12) Apesar da flexibilidade mostrada da codificação binária, ela ainda apresenta algumas dificuldades na representação de variáveis reais (Deb, 1998), já que uma região contínua no espaço não pode ser totalmente representada por apenas um número finito de possibilidades. A codificação real elimina o problema da codificação de variáveis contínuas em cadeias de comprimentos fixos. Desta maneira, as variáveis reais são usadas diretamente. Por exemplo, se as variáveis de decisão da otimização são a temperatura de alimentação (Tin, K) e a concentração do reagente A (Ca, %wt), a solução em codificação
real é dada por
540 5
Os procedimentos de seleção e reprodução usados na codificação real são os mesmos da codificação binária. Entretanto, o crossover e a mutação devem ser adaptados.
II.7.2.3. Inicialização
Ao contrário dos métodos clássicos de otimização, o AG mantém um conjunto de soluções ao invés de apenas uma solução.
A população inicial é preenchida com indivíduos criados geralmente de forma aleatória. Algumas vezes, a população pode conter indivíduos que são as soluções encontradas pelo conhecimento prévio do problema ou até mesmo por outros métodos de otimização. Neste caso, a convergência torna-se mais rápida e o objetivo do AG é obter soluções mais precisas.
II.7.2.4. Atribuição da Aptidão
A probabilidade de sobrevivência de um dado indivíduo é determinada pela sua aptidão: através da evolução, os indivíduos mais aptos substituem os menos aptos. Para evoluir boas soluções, a atribuição da aptidão para uma solução deve indicar a qualidade com que a solução satisfaz as exigências de um dado problema. Na ausência de restrições, a aptidão de um membro pode corresponder a uma função da função objetivo. Por outro lado, quando restrições devem ser satisfeitas, a aptidão pode ser dada, por exemplo, por uma associação de funções penalidades com a função objetivo. Este assunto será abordado posteriormente neste texto.
A atribuição da aptidão pode ser realizada de várias maneiras diferentes:
• Define-se uma função de aptidão e a incorpora ao AG. Quando se avalia um indivíduo, esta função de aptidão é calculada para ele.
• A avaliação da aptidão é realizada por um programa de análise separado. Nesses casos, a avaliação pode ser demorada, de modo a tornar mais lento todo o algoritmo evolucionário. Um exemplo é o uso do AG como otimizador de processos químicos baseados em modelos matemáticos complexos.
• Algumas vezes não há uma função de ajuste explícita, mas um avaliador humano define um valor de aptidão às soluções apresentadas por ele.
Capítulo II – pág. 35 • A aptidão pode ser definida através da comparação dos indivíduos na população atual. Por exemplo, se o problema é sobre um jogo, e a solução corresponde a uma estratégia do jogo, sua aptidão depende do número de outras soluções na população que são derrotadas por ela.
Em problemas de minimização, o objetivo é encontrar o valor mínimo da função objetivo. Deste modo, a solução com menor aptidão é considerada melhor quando comparada com outra solução. Se um algoritmo de maximização é usado para um problema de minimização, a função de aptidão de um membro i (Fi) pode ser calculada como sendo o
oposto da função objetivo (fi) ou, por exemplo: