Você está na página 1de 51

CENTRO UNIVERSITÁRIO DO MARANHÃO – UNICEUMA

PRÓ-REITORIA ACADÊMICA
COORDENAÇÃO DO CURSO DE SISTEMAS DE INFORMAÇÃO

MATHEUS SOUSA OLIVEIRA

UM ESTUDO SOBRE ALGORITMOS GENÉTICOS


2

São Luís
2007
MATHEUS SOUSA OLIVEIRA

UM ESTUDO SOBRE ALGORITMOS GENÉTICOS

Monografia apresentada ao curso de Sistema de


Informação do Centro Universitário do Maranhão -
UniCeuma, para obtenção do grau de Bacharel
em Sistema de Informação.

Orientador: Prof. Marcelo Mendonça


3

São Luís
2007
MATHEUS SOUSA OLIVEIRA

UM ESTUDO SOBRE ALGORITMOS GENÉTICOS

Monografia apresentada ao curso de Sistema


de Informação do Centro Universitário do
Maranhão - UniCeuma, para obtenção do grau
de Bacharel em Sistema de Informação.

Aprovada em / /

BANCA EXAMINADORA

___________________________________________
Prof. Marcelo Nunes Mendonça (Orientador)

___________________________________________
1º Examinador

___________________________________________
2º Examinador
4

Aos meus pais Mardônio e Maria das


Graças, minha irmã Mychelle, minha prima
Larisse e a minha namorada Rayllany.
5

AGRADECIMENTOS

Em especial aos meus pais Maria das Graças e Mardônio pela dedicação,
apoio e incentivo que me deram desde a hora em que me colocaram no mundo.

A minha irmã Mychelle, pela preocupação e palavras de apoio que me deu


ao decorrer da elaboração deste trabalho.

A minha namorada Rayllany, pelas palavras carinhosas e de apoio nas


horas mais precisas.

Ao amigo e orientador Marcelo Mendonça que me guia desde os meus


primeiros passos na área não somente em meio acadêmico, mas socialmente
também.

A todos os colegas de curso onde nos apoiamos uns nos outros para
vencermos mais esta barreira dentre os quatro longos anos letivos em que
convivemos, nas horas boas e nas horas difíceis.

Não menos importante, a todos que ajudaram diretamente e


indiretamente, pelo incentivo, compreensão e apoio nos momentos mais difíceis no
decorrer deste trabalho.
6

“Existe uma coisa que uma longa existência me


ensinou: toda a nossa ciência, comparada à
realidade, é primitiva e inocente; e portanto, é o que
temos de mais valioso”.
Albert Einstein
7

RESUMO

Abordagem sobre Algoritmos Genéticos. Ressalta-se sua origem, sua forma de


organização e elaboração, bem como suas aplicabilidades. Fala-se também um
pouco sobre a biologia, pois foi a partir dela que originou a idéia para criação dos
algoritmos genéticos, mais precisamente a partir da Lei da Evolução das Espécies,
criada por Charles Darwin. Tem-se ainda a utilização de alguns de seus termos em
analogia aos da informática, pela similaridade com a área biológica; seu
funcionamento tenta produzir os mesmos processos encontrados na natureza como:
Seleção, Cruzamento (Crossover), Mutação, etc. Os GAs são algoritmos de
otimização onde seu objetivo é otimizar problemas tentando tornar sua resolução
mais ideal possível. Através de suas aplicabilidades, os algoritmos genéticos
mostram com eficiência seu potencial e poderio, atuando os mesmos em diversas
áreas do conhecimento. Por tal motivo, este trabalho procura apresentar de forma
superficial algumas delas.

Palavras-chave: Algoritmos Genéticos. GAs. Bioinformática. Inteligência Artificial.


Algoritmos Genéticos Simples.
8

ABSTRACT

Approach about genetic algorithms. Stand out in its origin, its form of collation and
elaboration, just like its applicabilities. It talks too a little about the biology, cause it
was from it the original idea to the genetic algorithms, more precisely from the
evolutionary theory, created by Charles Darwin. It has too the utilisation of some of
his terms in analogy to the informatics ones, by the similarity with the biologic area;
its functioning try produce the same processes found in nature, like: Selection,
Crossover, Mutation, et cetera. The GAs are optimization algorithms whose goal is to
optimize problems trying to make their resolution the more ideal possible. Through its
applicabilities, the genetic algorithms show with efficiency their potencial and power,
acting in many knowledge areas. For such motive, this work try to present some of
them in a superficial way.

Keywords: Genetic algorithms. GAs. Bioinformatics. Artificial intelligence. Simple


Genetic Algorithms.
9

LISTA DE FIGURAS

Figura 1 - Estrutura representativa do DNA de dupla fita......................................18


Figura 2 - Representação do Dogma Central.........................................................20
Figura 3 - Pseudo-Código do comportamento padrão dos algoritmos
evolucionários
................................................................................................................................
24
Figura 4 - Diagrama representativo dos algoritmos evolucionário como técnica de
busca.......................................................................................................................25
Figura 5 - Função Hipotética com um máximo local e outro global.......................26
Figura 6 - Exemplo de pontos de corte...................................................................38
Figura 7 - Representação do processo de cruzamento de um ponto....................39
Figura 8 - Representação de cruzamento de dois pontos.....................................40
Figura 9 - Representação de cruzamento uniforme...............................................40
Figura 10 - Exemplo ilustrativo de mutação...........................................................42
Figura 11 - Descrição da operação do operador de crossover de um ponto e
mutação
................................................................................................................................
42
10

LISTA DE TABELAS

Tabela 1 - Faz uma comparação entre os termos utilizados em linguagem


natura (na biologia) com a utilizada no GA
................................................................................................................................
30
Tabela 2 - Esboço do algoritmo genético em forma de etapas..............................31
Tabela 3 - Exemplo de como ocorre o processo de seleção atentando para não
cair no efeito de convergência genética
................................................................................................................................
37
Tabela 4 - Contem a área cientifica assinalando com a utilização do GA.............44
11

LISTA DE SIGLAS

GA Algoritmos Genéticos
GAs Algoritmos Genéticos Simples
DNA Sigla em inglês para o "ácido desoxirribonucléico"
RNA Sigla em inglês para o "ácido ribonucléico"
API Interface de Programação de Aplicativos
NP É o acrônimo em inglês para Tempo polinomial não determinístico
12

SUMÁRIO

LISTA DE FIGURAS...........................................................................................8
LISTA DE TABELAS...........................................................................................9
LISTA DE SIGLAS..............................................................................................10
1 INTRODUÇÃO.....................................................................................................12
2 BIOLOGIA BÁSICA............................................................................................15
2.1 Teoria da Evolução...........................................................................................15
2.2 Genética Básica................................................................................................17
2.3 Historia dos Algoritmos Genéticos....................................................................20
3 CONCEITOS BÁSICOS EM GÁS.......................................................................23
3.1 Entendendo Algoritmos evolucionários............................................................23
3.2 O que são algoritmos genéticos?.....................................................................26
3.3 Entendendo as terminologias para GÁS..........................................................28
4 ENTENDENDO UM GA SIMPLES......................................................................31
4.1 Como escolher parâmetros do GA...................................................................32
4.2 Representação de um cromossomo.................................................................33
4.3 Inicialização Cromossomial..............................................................................34
4.4 Função Para Cálculo da Aptidão......................................................................35
4.5 Seleção.............................................................................................................36
4.6Cruzamento ("Crossover").................................................................................37
4.7 Mutação............................................................................................................41
5 APLICABILIDADES............................................................................................43
6 CONSIDERAÇÕES FINAIS................................................................................46
REFERÊNCIAS..................................................................................................48
12

1 INTRODUÇÃO

Desde a Pré-História o homem vem buscando e adquirindo conhecimento


com o intuito de facilitar seus afazeres do dia a dia, como uma das suas primeiras
descobertas veio a utilização do fogo no preparo de seus alimentos, onde com uma
pedra afiada teve a idéia de cortá-los, não precisando mais fazê-lo com os dentes. A
partir daí, as idéias forma evoluindo cada vez mais. O homem passou a interagir mais
com a natureza que o cercava, ao observá-la, teve várias idéias e também o
aperfeiçoamento de outras, como por exemplo, podemos citar que ao analisar o modo
de voar de algumas aves onde as mesma utilizam correntes de ar quente para
planarem veio à criação da asa delta e assim sucessivamente várias outras idéias
surgiram, ou seja, ao analisar a natureza o homem pode criar novas tecnologias
baseando-se na mesma.
Várias décadas se passaram e, junto com a evolução, surgiram também
problemas, tais problemas ganharam uma complexidade cada vez maior com o
decorrer dos tempos, consequentemente, o homem cada vez mais desenvolvia seu
intelecto ao tentar solucioná-los.
A partir da criação do computador, foram desenvolvidas várias tecnologias,
uma delas foi o algoritmo, que consiste em uma seqüência finita e não ambígua de
instruções computáveis para solucionar um problema.
Temos como objetivo, fazer uma abordagem acerca da ramificação,
denominada algoritmos genéticos, onde os mesmos constituem uma parte da
computação evolutiva, a qual está rapidamente crescendo como uma subdivisão da
Inteligência Artificial.
Para tal finalidade, apoiamo-nos em alguns trabalhos de estudiosos da área,
procurando de forma simples alcançar nosso objetivo. Para tanto, procuramos utilizar
uma linguagem clara e de fácil compreensão, pois esta foi uma preocupação que
tivemos ao analisarmos alguns destes trabalhos, inicialmente tivemos algumas
dificuldades em seu entendimento dado à linguagem que alguns pesquisadores
utilizavam.
13

O presente trabalho se justifica pela necessidade de estimular reflexões e


debates sobre a importância do assunto hora abordado, tendo em vista que trata-se de
um assunto relativamente novo e pouco conhecido. O mesmo apresenta como
conteúdo uma abordagem quanto ao surgimento dos algoritmos genéticos e um pouco
sobre a biologia, pois são utilizados termos análogos quando nos referenciamos aos
algoritmos genéticos e a genética, também encontraremos conceitos básicos, algumas
aplicabilidades e etc., levando assim, a um melhor entendimento sobre o assunto.
Sua estrutura está composta da seguinte maneira: o primeiro capítulo
corresponde à Introdução, na qual se delimita o problema, justifica a realização da
pesquisa e expõe os seus objetivos e metodologia do estudo, bem como suas
justificativas. No segundo capítulo, discorre-se sobre uma breve introdução a biologia,
dando ênfase maior à Teoria da Evolução e Genética Básica isso se origina da
similaridade que existe entre os algoritmos genéticos e os mesmo, também falamos
sobre a historia dos GA, buscando não só contextualizar sua origem, mas através da
mesma analisar e com isso entenderemos a idéia de sua criação. No terceiro, examina-
se seus conceitos básicos, bem como o entendimento dos algoritmos evolucionários e
também suprir com conhecimento a indagação sobre o que é um algoritmo genético e
suas terminologias. No quarto capítulo, falaremos sobre a importância da escolha dos
parâmetros do GA, dando dicas para o mesmo, pois dependerá diretamente dela os
resultados que serão obtidos na resolução dos problemas, falaremos um pouco sobre
as representações cromossomiais com a finalidade de aumentar o nosso
conhecimento, não ficando apenas na representação binária, pois é a mais utilizada na
maioria dos trabalhos pesquisados, também entenderemos como ocorre o processo do
funcionamento de um GA simples através dos métodos: Inicialização cromossomial,
função para o calculo da aptidão, seleção, etc. No quinto capítulo, apresentaremos
algumas aplicabilidades citando as áreas e as aplicações nas mesmas e algumas
ferramentas comercias que utilizam algoritmos genéticos. Finalmente, nas
considerações finais, faz-se uma reflexão sobre tudo até agora falado, exaltando a
importância da utilização dos algoritmos genéticos e como o mesmo podem ajudar na
elucidação de problemas que para algoritmos normais possa ser demasiadamente lento
e trabalhoso.
14

Esperamos, pois, que este trabalho venha contribuir para fundamentar


estudos posteriores, uma vez que este é apenas introdutório na área dos algoritmos
genéticos. Embora, não temos a pretensão de esgotar o assunto, pois o mesmo é vasto
e de graus de complexidade variados. Que o mesmo seja um ponto de partida para
aguçar a sede de conhecimento sobre o tema objeto deste trabalho monográfico.
15

2 BIOLOGIA BÁSICA

Tentando buscar um melhor entendimento acerca do assunto abordado,


resolvemos escrever este capitulo com a intenção de explicar as origens dos GAs,
como surgiram, a partir de que seus criadores tiveram a idéia de criá-los (não menos
importante) para termos uma idéia de como ocorre seu funcionamento através da
biologia.

2.1 Teoria da Evolução

Os algoritmos genéticos foram criados baseados na teoria da evolução, então


podemos começar citando o Big-Bang, pois segundo alguns autores, foi a partir dele
deu-se o inicio de tudo.
Foi à teoria que revolucionou o modo de pensar na biologia, tendo como seu
criador Charles Darwin um naturalista, que mais adiante vai ser considerado o pai da
evolução onde em sua teoria afirmava que os seres vivos evoluíram de um ancestral
comum, tendo herdado pequenas modificações, que poderiam ou não se propagar,
através de seleção natural.
O homem é um produto da evolução, sendo assim, muitos dos problemas
relacionados a ele podem ser entendidos apenas quando o homem é considerado
como um organismo evoluído e em evolução. O conhecimento profundo dos princípios
e mecanismos da evolução é, portanto, um pré-requisito para entender o homem
(MAYR apud MARQUES, 1977 Disponível: <http://www.brasilescola.com/biologia/teoria-
da-evolucao.htm>).
Para Darwin mutações seriam variações genéticas que provavelmente são
produzidas sucedendo outras visando um aperfeiçoamento das mesmas. Efetivamente
ele considera que a chave da origem de todas as raças atuais são frutos da seleção
natural e acumulação sendo exercidas nas diversas variações sucessivas fornecidas
pela natureza.
Os cientistas mais conceituados até o século XIX acreditavam ao menos em
uma das teorias do criacionismo (“Deus criou o universo da forma que ele é hoje”
16

LINDEN, 2006, p. 24) também da geração espontânea (“a vida surge de essências
presentes no ar” LINDEN, 2006, p. 24). Darwin em varias de suas viagens visitou vários
lugares e sua grande habilidade em observar a natureza permitiu-lhe perceber que
animais de uma espécie eram ligeiramente diferentes que seus parentes em outros
ecossistemas, sendo os mesmos mais adaptáveis as necessidades e oportunidades
encontradas em seu ecossistema específico. Ao fazer um levantamento de vários
dados e a análise dos mesmos, Darwin chegou a uma conclusão de suas dúvidas
assim criando a teoria da evolução das Espécies, dando assim, origem a sua grande
obra em 1859, chamada de “A Origem das Espécies”. Por ser uma idéia inovadora para
a época, seu livro foi amplamente combatido, mas atualmente é aceito por praticamente
toda a comunidade acadêmica mundial.
Na natureza dentro de um mesmo ecossistema todos os indivíduos
competem entre si por recursos limitados, isso é o que diz a teoria da evolução, como
exemplo podemos citar água e comida por serem mais vitais para a manutenção do
organismo. Os indivíduos (animais, vegetais, insetos, etc.) dentro de uma mesma
espécie que não obtém êxito têm a tendência de ter uma prole menor, levando assim a
uma pequena probabilidade de terem seus genes propagados ao longo de sucessivas
gerações, este processo conhecemos por seleção natural.
Os indivíduos que se perpetuam com suas sucessivas combinações de suas
características podem produzir um novo indivíduo bem mais adaptado as necessidades
que o seu meio ambiente o proporciona, ao mesclar essas características positivas de
cada um dos reprodutores, este individuo tem chances maiores de sobrevivência em
relação aos outros. Este processo da se a várias combinações de indivíduos sendo as
mesmas variações de seus pais. Sendo assim, o individuo descendente é ligeiramente
diferente do seu progenitor, podendo esta diferença ser positiva ou negativa conforme
preceitua LINDEN:

[...] um elefante só pode nascer do ventre de outro elefante. A pergunta razoável


que se pode levantar é: de onde surgiu o primeiro elefante? De uma outra coisa
parecida com, mas não muito diferente de, um elefante, ou seja, um outro animal
parecido com o elefante como nós conhecemos atualmente (LINDEN, 2006, p.
25).
17

Com isso, podemos deduzir que nossas características são passadas de


geração pra geração.
A evolução natural não é um processo dirigido, com o objetivo de levar um
melhoramento ideal das espécies. Na verdade, não podemos afirmar que descendentes
de pais muito bem adaptados herdem todas as suas características sendo assim
indivíduos idênticos. Pais fortes podem produzir filhos com doenças terríveis ou
fraquezas inerentes. Sendo assim, é um mecanismo que leva a conseqüências naturais
de transmissão de informação.
A evolução é um processo onde os seres vivos são alterados por um conjunto
de modificações que herdam de com as passagens de gerações, podendo sendo
explicadas por fatores como mutação gênica, recombinação gênica, seleção natural e
isolamento. Para Darwin na época por não dispor de todas essas informações não pode
obter um melhor aproveitamento de suas pesquisas, mas graças a ele outros poderão
continuá-la.

2.2 Genética Básica

Darwin afirmar que a evolução e a seleção natural das espécies faziam com
que as mesmas fossem se adaptando naturalmente de acordo com o seu ecossistema,
por falta de mais informação ele não sabia quais eram os mecanismos básicos através
dos quais essas adaptações aconteciam, pois o processo de transmissão de
informação genética ainda era desconhecido. No inicio do século XX, Gregor Johann
Mendel que era um monge agostiniano, botânico e meteorologista austríaco,
compreendeu que o processo de transmissão de características positivas, estava
associado a uma unidade básica de informação, conhecida por gene através de
pesquisas.
Durante muito tempo, mais ou menos quase um século foi necessário para a
conclusão do processo que levou à descoberta de como estas características eram
fisicamente armazenadas dentro da célula. O bioquímico Friedtich Mieschner em 1869,
concluiu que os núcleos celulares possuíam varias substancias especificas, podendo
ser separadas em duas categorias principais: proteínas e moléculas acidas. Ate aquele
18

momento estas informações eram desconhecidas, elas foram denominadas de “ácidos


nucléicos”.
Na Rússia em 1909, um químico natural conhecido por Phoebus A. T.
Levene, em suas pesquisas identificou a ribose como açúcar de um dos dois tipos de
ácidos nucléicos, o acido ribonucléico, e certos componentes do outro acido nucléico, o
acido desoxirribonucléico este ultimo foi descoberto em 1929. Ele também identificou
corretamente a estrutura básica do DNA que continha adenina, guanina, timina,
citosina, desoxirribose, e um grupo fosfato, ou seja, fosfato-açucar-base. Na época era
praticamente um consenso o fato de que as proteínas eram a base do processo de
armazenamento de informação genética.
Fredrick Griffith e Oswald T. Avery dois bacteriologiastas fizeram a correção
desta suposição, onde após exaustivas pesquisas chegaram a conclusão de que a
molécula que armazenava as informações relativas a hereditariedade era o DNA, e não
as proteínas ou o RNA. No entanto, naquela época não se entendia como o processo
funcionava, o que só ficou claramente entendido após descobertas feitas por Francis
Crick e James Watson em seus trabalhos, onde os mesmos desenvolveram a dupla
hélice do DNA e a forma como os ácidos nucléicos interagiam dentro desta molécula.
Atualmente, com as descobertas da estrutura do DNA por Crick e Watson podemos
observar o funcionamento do mesmo, como unidade básica de armazenamento e
transmissão de informação genética, onde concluímos o entendimento deste processo
ao saber como funciona em nível molecular. A da Figura 1 mostra a estrutura do DNA.

Figura 1 - Estrutura representativa do DNA de dupla fita (TICONA, 2003, p. 8).


19

Todos os indivíduos seja ele animal, vegetal ou até mesmo organismos


inferiores como vírus e bactérias, basicamente são formados por uma ou mais células,
onde dentro de cada uma delas o organismo possui uma copia completa do conjunto de
um ou mais cromossomos que descrevem o organismo, este conjunto é denominado
genoma.
O cromossomo é composto por pares, sendo que o numero de pares (n) varia
de espécie para espécie. Nós seres humanos possuímos 23 pares de cromossomos
por célula, mas não somos os portadores do maior numero de pares da natureza, os
burros, por exemplo, tem 31 pares de cromossomos e as carpas, 52. Um cromossomo
é composto por genes, onde os mesmos são blocos de seqüência de DNA, sendo
assim, cada gene é uma região do DNA tendo uma posição especifica no cromossomo,
esta é chamada de lócus, e controla uma característica hereditária especifica, como
por exemplo: cor do cabelo, altura, cor dos olhos dentre tantas outras que podemos
citar, ou seja, características estas que nos torna o que somos. Geralmente a
seqüência das bases que compõe o gene corresponde a uma ou mais proteínas ou
RNA complementar.
Proteínas são a base do funcionamento das células, sendo estas compostas
por cadeias de aminoácidos e responsáveis praticamente por todo o trabalho realizado
nas células. Dentre os vários tipos de proteínas podemos destacar as enzimas a
hemoglobina, certos hormônios e o colágeno dos ossos, tendões e pele, tendo funções
fundamentais para a sobrevivência. Nelas podemos encontrar as mais diversificadas
funções, incluindo entre outras coisas, a regulação da contração muscular, produção de
anticorpos expansão e contração dos vasos sanguíneos para manter a pressão normal
etc.
Portanto definimos o DNA como grande armazenador de informações
genéticas de um organismo, e as proteínas tendo o papel de verdadeiras trabalhadoras
celulares. O DNA e as proteínas têm uma relação pelo dogma central da biologia.
Afirmando que uma seqüência de DNA, que contem toda a informação necessária para
se auto-replicar, é transcrita em RNA e esta por sua vez é traduzida para uma proteína.
A representação do Dogma Central está representada pela Figura 2.
20

Figura 2 - Representação do Dogma Central (TICONA, 2003, p. 9).

2.3 História dos Algoritmos Genéticos

A descoberta dos algoritmos genéticos deu se na década de 40, quando os


cientistas ao observar a natureza se inspiraram no seu processo tentando assim imita-
lo criando assim o ramo da inteligência artificial. A pesquisa desenvolveu-se mais no
ramo cognitivo e na compreensão dos processos de raciocínios e aprendizado até o
final da década de 50, quando deu inicio a busca de modelos de sistemas genéricos
que gerassem soluções candidatas para resolução de problemas muito complexos
sendo assim de difícil resolução computacional.
Foi em 1957 que foram feitas as primeiras tentativas de se associar a
evolução natural a problemas de otimização, o mesmo foi apresentado por Box em seu
esquema de operações evolucionarias. Seu método era perturbar de forma sistêmica
duas ou três variáveis de controle de uma instalação, onde de forma semelhante
podemos comparar a atualmente com operadores de mutação e seleção. Com o passar
do tempo vários pesquisadores também desenvolveram suas pesquisas, na década de
1960 dois pesquisadores tiveram grande êxito ao começarem a trabalhar com genes,
Bledsoe e Bremmerman usaram tanto a representação binária quanto a inteira e a real,
desenvolvendo os precursores dos operadores de recombinação (crossover).
É chegada a primeira metade da década de 60, I. Rechenberg fez a primeira
tentativa na utilização de processos evolutivos para resolver problemas de desenhos
aerodinâmicos de asas, onde através de suas pesquisas ele desenvolveu as
estratégias evolucionárias (evolution strategies). Onde mantinha uma população de dois
21

indivíduos com cromossomos compostos de números reais em cada instante, onde um


dos dois era filho do outro, onde era gerado através da aplicação exclusiva do operador
de mutação. Rochenberg descreve que o processo tinha ampla fundamentação teórica,
pois a mutação era aplicada a partir de uma distribuição gaussiana dos parâmetros e foi
utilizado com sucesso em vários problemas práticos. As pesquisas de Rochenberg
atualmente não são amplamente aceitas, tais como populações maiores e operador de
crossover, mas seu trabalho pode ser considerado pioneiro, por ter introduzido a
computação evolucionaria as aplicações práticas.
Trabalhos posteriores as estratégias evolucionarias conseguiram de forma
efetiva suprir estas falhas, onde foram feitas inclusões de conceitos de população e
operador de crossover. De maneira interessante ao aplicar a este operador onde ao
incluir a idéia de utilizar a media como operador alem de poder envolver muitos pais,
idéias estas de grande importância pois as mesmas podem ser utilizadas em algoritmos
genéticos quando usamos cromossomos com uma representação contínua. Entretanto,
mesmo não sendo o primeiro investigador da área, aquele que seria considerado o pai
dos algoritmos genéticos só foi finalmente descoberto no final da década de 60, quando
John Holland desenvolve os Algoritmos Genéticos, embora concentrado
eminentemente na codificação discreta. Holland ao estudar formalmente a evolução das
espécies propôs uma hipótese de modelo computacional que ao ser implementado
poderia oferecer boas soluções para problemas extremamente difíceis que eram
insolúveis computacionalmente ate aquela época. Foi em 1975 que Holland publicou
sua obra, “Adaptation in Natural and Artificial Systems”, no qual aborda um estudo
sobre os processos evolutivos, ao invés de projetar novos algoritmos, como a maioria
cogita. Seu trabalho apresenta os algoritmos genéticos como uma metáfora para os
processos evolutivos, de forma que ele estudasse a adaptação e a evolução no mundo
real e assim simular dentro de computadores. Mas, os algoritmos genéticos acabaram
por ampliar consideravelmente seu papel originalmente imaginado por Holland e
transformaram-se em uma poderosa ferramenta onde se é utilizada de forma
disseminada por cientistas da computação.
Podemos citar um fato interessante no trabalho de Holland e sua influência na
área de GA, onde ele utilizou originalmente cromossomos binários, cujos genes eram
22

apenas zeros e uns. Pesquisadores da área acabaram por abolir esta limitação, mesmo
assim vários cientistas ainda sim insistem em utilizar a representação binária, mesmo
existindo outras que podem se mostrar muito mais eficientes na resolução do problema
em questão.
A partir de então os algoritmos genéticos começaram a se expandir por toda
a comunidade científica, com a sua utilização puderam resolver problemas
extremamente importantes que talvez não fossem abordados de outra maneira. Como
bem assevera LINDEN:

É bem provável que alguém inventasse outra maneira de resolve-los, mas talvez
esta não fosse tão eficiente e/ou interessante quanto os algoritmos genéticos.
(LINDEN, 2006, p. 33)

Desta forma, com seu desenvolvimento veio também a utilização para fins
comerciais onde nos anos 80 surgiu pacotes comerciais utilizando algoritmos genéticos.
Evolver é considerado o primeiro pacote comercial por vários artigos, que já estava
disponível desde 1988 e que incluía um programa adicional para o Excel e uma API
(Interface de Programação de Aplicativos) para o desenvolvimento de programas que
acessassem dados provenientes de diferentes aplicativos. Atualmente podemos
encontrar vários aplicativos que tem as mesmas características.
Com isso vieram as primeiras conferências cientificas dedicadas
exclusivamente a estes tópicos na década de 80, ocasionado pelo progresso dos
algoritmos evolucionários e sua popularização no meio cientifico. Atualmente os
algoritmos genéticos obtiveram benefícios muito da interdisciplinaridade, pois cada vez
mais cientistas da computação buscam idéias em outras áreas de pesquisa para
compor suas inspirações de forma ao absorverem suas idéias possam fazer com que
os GAs sejam mais eficientes e inteligentes na resolução de problemáticas.
23

3 CONCEITOS BÁSICOS EM GAs

Neste capítulo tentaremos explicar de forma sucinta os conceitos associados


aos algoritmos genéticos, de onde vem à inspiração para seu desenvolvimento e uma
representação de como são desenvolvidos. Apresentaremos vários conceitos básicos,
mas de grande importância para um melhor entendimento a cerca do tema abordado no
presente trabalho onde facilitaram melhor a compreensão dos demais capítulos que
virão a seguir.

3.1 Entendendo Algoritmos evolucionários

Estes vieram com a finalidade de resolver problemas com respeito à evolução


genética para o estudo e a análise de diversos indivíduos de diversas populações que
associadas aos genes em um cromossomo assumindo valores correspondentes aos
alelos. Os Algoritmos evolucionários através de modelos computacionais dos processos
naturais de evolução resolvem problemas utilizando estes processos como uma
ferramenta. Mesmo existindo vários modelos computacionais propostos, todos eles
utilizam o conceito de simulação da evolução das espécies através de seleção,
mutação e reprodução existindo assim algo em comum entre os mesmos, estes
processos dependem do “desempenho” dos indivíduos desta espécie dentro do
“ambiente”.
Operadores genéticos em sua essência tentam reproduzir fenômenos vistos
na natureza computacionalmente, como a reprodução sexuada, a mutação genética e
qualquer outro que a mente de um programador possa reproduzir.
Através do pseudo-código encontrado em fontes de pesquisa (Figura 3)
podemos mostrar de forma resumida e não muito detalhada o comportamento padrão
dos algoritmos evolucionários:
24

T:=0 // Inicializamos o contador de tempo


Inicializada_Populacao P(0) // Inicializamos a população aleatoriamente
Enquanto não terminar faça // condição de termino: por tempo, por avaliação,
etc.
Avalie_População P(t) // Avalie a população neste instante
P’:=Selecione_Pais P(t) // Selecionamos sub-população que gerará nova geração
P’:=Recombinação_e_mutação P’ // Aplicamos os operadores genéticos
Avalie_População P’ // Avalie esta nova população
P(t+1)=Selecione_sobreviventes P(t), P’ // Selecione sobreviventes desta geração
T:=t+1 // Incrementamos o contador de tempo
Fim enquanto
Figura 3 – Pseudo-Código do comportamento padrão dos algoritmos evolucionários (LINDEN, 2006, p. 38)

Podemos entender o funcionamento básico dos algoritmos evolucionários no


algoritmo acima (Figura 3) onde consiste em buscar dentro da atual população aquelas
soluções que possuem as melhores características (função Selecione_Pais) e tentar
combiná-las de forma a gerar soluções ainda melhores (função
Recombinação_e_mutação), sendo assim repete-se o processo até que tenha se
passado tempo suficiente ou que tenha-se obtido uma solução satisfatória para nosso
problema.
Em cada repetição do loop principal (Figura 3, o “enquanto“ em negrito)
podemos denominar como uma geração do algoritmo. Como já foi citado acima que os
algoritmos evolucionários imitam de certa forma os processos da natureza, este
conceito é semelhante ao conceito de geração existente na vida real, mas com a
exceção de que muitas vezes nos algoritmos evolucionários duas gerações não
convivem, como veremos adiante ao estudar o primeiro tipo de algoritmo genético.
Podemos perceber ao analisar o pseudo-código (Figura 3) que os algoritmos
evolucionários são exatamente dependentes de fatores probabilísticos, tanto na fase de
inicialização da população quanto na fase de evolução (associe principalmente ao
processo de seleção dos pais). Sendo assim os seus resultados são dificilmente
reprodutíveis, tornando assim um caso raro destes resultados serem perfeitamente
iguais. Contudo mesmo o nome algoritmos evolucionários indicar o contrario, são
heurísticas “Heurística são algoritmos polinomiais que não têm garantia nenhuma
sobre a qualidade da solução encontrada, mas que usualmente tendem a encontrar a
solução ótima ou ficar bem próximos dela.” (LINDEN, 2006, p. 38) sendo assim, não
25

asseguram que seus resultados obterão uma resolução ideal em todas as suas
execuções.
Sendo assim podemos deduzir que se você tem um algoritmo com o tempo
de execução curto o suficiente para a solução de um problema, não haverá a
necessidade da utilização de um algoritmo evolucionário. Uma melhor aplicabilidade
para um algoritmo evolucionário que descobrimos em nossas pesquisas, seria quando
na resolução de um problema um algoritmo for demasiadamente lento, como em
problemas NP-completos, que “[...] é o subconjunto dos problemas de decisão em
NP[...]“ (WIKIPÉDIA, 2007, Disponível: http://pt.wikipedia.org/wiki/NP-completo) ou
incapaz de achar uma solução como em problemas de maximização de funções multi-
modais, então ai entraria os algoritmos evolucionários.
Vários termos foram citados até agora, as vezes até de difícil compreensão,
mas os algoritmos evolucionários são de simples implementação.
Vamos agora tentar entender melhor como os algoritmos evolucionários se
posicionam como técnicas de busca através de um esquema apresentado na Figura 4.
Existe um ramo de busca chamado de “Técnicas Aleatórias-Guiadas” onde os
algoritmos evolucionários fazem parte, isto é, eles tem componentes aleatórios, mas
utilizam informações do estado corrente para guiar a pesquisa, tendo assim uma
diferença de métodos puramente aleatórios como a técnica de Random Walk. Ao
analisar a figura podemos entender como os algoritmos evolucionários se dividem em
vários tipos distintos (marcados em cinza).

Figura 4 - Diagrama representativo dos algoritmos evolucionário como técnica de busca (LINDEN, 2006, p. 39).
26

3.2 O que são algoritmos genéticos?

GA ou Algoritmo Genético é o ramo dos algoritmos evolucionários e como tal


são definidos como uma técnica de busca baseada numa metáfora do processo
biológico de evolução natural.
Pelo fato de os algoritmos genéticos nem sempre encontrarem a solução
ideal e que dificilmente conseguiram repetir o mesmo resultado consideramos os
mesmo como técnicas heurísticas de otimização global. Esta questão que diz respeito a
otimização global opõe aos métodos como gradiente (hill climbing), que tem como
objetivo encontrar o maximo de uma função ficando facilmente retidos em máximos
locais, entenderemos melhor ao visualizar a Figura 5, onde o método de hill climb uma
técnica gradiente se inicia em qualquer um dos pontos de inicio marcados seguirá o
gradiente, ou seja, direção de maior crescimento e acabará presa no ponto maximo
local onde a derivada é 0. Os algoritmos genéticos não tem dependência forte dos
valores inicias como no citado a pouco.

Figura 5 - Função Hipotética com um máximo local e outro global (LINDEN, 2006, p. 40).

Anteriormente vimos que o método de hill climbing é diferente dos GAs pois
os algoritmos genéticos não ficam estagnados simplesmente pelo fato de terem
encontrado um máximo local. Na verdade quando nos referimos a este ponto, os GAs
se parecem com a evolução natural, pois ao encontrar um individuo que é
27

instantaneamente o melhor de um certo grupo ele não para de “procurar” outros


indivíduos ainda melhores. Isto também ocorre na evolução natural ao existirem
circunstancias que mudam de um momento para outro, como organismos que se
encontram em um determinado ambiente ao se depararem com um desequilíbrio os
mais fortes sobreviverão, ou seja, se adaptarão as diversidades, podemos citar o vírus
da gripe como um exemplo real disto.
Para os algoritmos genéticos o ambiente geralmente é um só. Mas temos que
ter cuidado ao fazer qualquer afirmação, pois ao se passarem as gerações e os
operadores genéticos vão atuando, faz-se uma grande busca pelo espaço de soluções,
fazendo uma analogia entre os GAs e a Natureza, esta busca seria realizada pela
evolução natural se elas ficassem permanentemente em um ambiente imutável.
A evolução natural não é um processo dirigido à obtenção da solução ideal como
muitos costumam pensam. Na verdade o processo consiste na adaptação do melhor
individuo, pois ao competirem entre si só os mais fortes, ou melhor, os mais adaptáveis
se sobressaem e assim sobrevivem. Como os GAs tentam imitar a natureza os mesmo
por sua vez tem o mesmo comportamento que a evolução natural, posto que é “[...] a
competição entre os indivíduos é que determina as soluções obtidas.” (LINDEN, 2006,
p. 41). Sendo assim, os indivíduos mais adaptáveis prevalecerão, mas podem
acontecer casos em que a atual geração ser muito pior que a lhe antecedeu, sendo que
isto não é muito provável de acontecer logo não é muito comum este tipo de caso.
Novamente frisamos que GAs, apesar de seu nome implicar no contrário, não
constituem um algoritmo de busca da solução ideal de um problema, mas sim uma
heurística que encontra boas soluções a cada execução, mas não quer dizer que
encontrará a mesma todas às vezes, pois podem ser encontrado máximos ou mínimos
locais, próximos ou não do maximo global, nós atentamos a este detalhe pois o autor
em que baseamos nosso trabalho sempre nos alerta para este pequeno detalhe mas de
grande importância para o entendimento do algoritmo genético.
Um ponto crucial dentro dos algoritmos genéticos é a codificação da
informação em cromossomos, pois em conjunto com a função de avaliação torna-se o
fator predominante que liga o GA ao problema a ser resolvido. Sendo assim uma boa
codificação feita de forma inteligente já incluirá as idiossincrasias do problema, ou seja,
28

um bom levantamento a cerca do mesmo levando em conta todos os detalhes que


implicam a problemática (restrições sobre quando podemos ligar ou desligar um carro
etc.) sendo assim evitaremos testes de viabilidade de cada uma das soluções geradas.
A solução deve ser decodificada ao termino da execução do nosso algoritmo para
assim podermos utilizá-la na prática.
Nos GAs não diferente de como ocorre na natureza a informação deve ser
codificada dentro dos cromossomos ou genomas e a reprodução será a encarregada de
fazer com que a população evolua, lembrando que esta reprodução é baseada na
sexuada pois é a utilizada por todos os animais superiores garantindo assim uma
diversidade biológica, lembremos que a reprodução assexuada não cria diversidade,
visto que cada filho é idêntico ao pai sendo assim não nos interessará.
Iremos aplicar a reprodução e a mutação em indivíduos selecionados dentro
da nossa população. Devemos fazer a seleção de uma forma em que os indivíduos
mais aptos sejam selecionados frequentemente do que aqueles menos aptos, sendo
assim teremos um melhor aproveitamento, pois iremos colher as melhores
características levando a uma população de soluções bem mais selecionada e
preparada. Não é necessário os indivíduos menos aptos serem descartados da
população reprodutora, pois caso isso ocorresse causaria uma rápida convergência
genética de todas as soluções para um mesmo conjunto de características e com isso
nosso espaço de soluções iria ser reduzido consideravelmente. Em uma convergência
genética podemos dizer que temos uma baixa diversidade genética por possuir genes
similares, que não conseguem evoluir, a não ser pela ocorrência de mutações
aleatórias que sejam positivas. Isso nós leva a outro conceito interessante que é a
perda de diversidade onde o número de indivíduos que nunca são escolhidos pelo
método de seleção de pais “Quanto maior for a perda de diversidade, mais rápida será
a convergência genética de nosso GA.” (BLICKLE apud LINDEN, 1997, p. 43).

3.3 Entendendo as terminologias para GÁS

Para um melhor entendimento do assunto que o nosso trabalho aborda


decidimos escrever este capitulo com a finalidade de nos familiarizarmos com as
29

terminologias utilizadas na área dos algoritmos genéticos. Pela grande familiaridade


que os GAs tem com a genética e a teoria da evolução das espécies, pois foi de onde
surgiu a inspiração para sua criação, há uma grande analogia entre os termos da
biologia e os termos usados no campo dos Algoritmos Genéticos Simples.
Tomamos por base os sistemas naturais onde um ou mais cromossomos se
combinam formando assim as características genéticas básicas de um individuo. Ao
estudarmos GAs termos como cromossomos e individuo serão constantemente vistos
sendo os mesmos intercambiáveis. Em nossos estudos observamos que a
representação binária é muito utilizada em vários textos básicos da área, muitas vezes
pode-se escrever string (de bits) tendo o mesmo significado que cromossomo.
Os genes são formados por vários cromossomos, podendo ter um
determinado valor entre vários possíveis, estes chamados de alelos. Onde o locus
(plural: loci) é a posição do gene. Pela grande familiaridade os termos biológicos
também podem ser aplicados na área de GAs, mas podemos utilizar o termo
características para significar gene, valores para alelos e posição locus.
Termos como genoma, genótipo e fenótipo também são de grande
importância para nosso estudo. Onde genótipo é a estrutura do cromossomo, podemos
trocar o termo pela palavra estrutura dentro da área de GA. Podemos entender por
conjunto de parâmetros do algoritmo a palavra fenótipo onde na biologia corresponde à
interação do conteúdo genético com o ambiente. Já o genoma não possui um termo
análogo na área de GA, mas para a biologia seu significado corresponde ao pacote
genético.
Durante o estudo foram observadas duas tabelas e, a partir delas foi criada
uma tabela própria (Tabela 1) com os termos que seriam mais concernentes de serem
citados, entende-se que assim alguém ao se deparar com estes termos terá um melhor
aproveitamento deste trabalho, ao fazer esta recompilação de dados decidiu-se
compartilhar este conhecimento adquirido e assim resumir tudo o que já foi citado.
30

Linguagem natural GA
cromossomo individuo, string, cromossomo, árvore
gen características
alelo valor
locus posição
genótipo estrutura
fenótipo conjunto de parâmetros
população conjunto de pontos (indivíduos) no Espaço de Busca
geração iteração completa do GA que gera uma nova população
saída gerada pela função objetivo para um individuo da
aptidão bruta
população
Aptidão bruta normalizada, entrada para o algoritmo de
aptidão normalizada
seleção
aptidão máxima melhor individuo da população corrente
aptidão media aptidão media da população corrente
Tabela 1 - Faz uma comparação entre os termos utilizados em linguagem natura (na biologia) com a
utilizada no GA.

Utilizaremos mais os termos que corresponde aos GAs, pois os mesmos


correspondem mais a nossa área podendo os termos da área biológica serem utilizados
de vez em quando pois em nossas pesquisas em varias fontes estes termos também
são utilizados então entendemos que serão de grande importância para um melhor
aproveitamento do nosso trabalho.

4 ENTENDENDO UM GA SIMPLES
31

Começaremos este capitulo fazendo uma breve apresentação entre os


leitores deste singelo trabalho e os algoritmos genéticos, todos os passos até aqui
apresentados são de grande importância para o entendimento do assunto abordado.
Devemos ficar atentos quando se diz respeito a escolha dos parâmetros nos
algoritmos genéticos pois os mesmos estão diretamente ligados a quão bom será os
resultados que iremos obter. Mais adiante será explicado melhor como ocorrerá esta
escolha bem como a sua importância.
Logo abaixo apresentaremos um esboço do algoritmo genético (Tabela 2)
onde o mesmo é composto por varias etapas que iremos explicar adiante. Atentamos a
questões importantes que talvez nos indaguem ao inicializarmos a construção do nosso
algoritmo, questões estas como:
• Como criaremos cromossomos e qual tipo de codificação utilizaremos?
• Como escolheremos os pais para a realização do crossover?
• Com a criação de uma nova população a partir de duas outras pode
causar a perda da melhor solução?

[Início] Gera-se aleatoriamente uma população de n cromossomos


[Adaptação] Verifica-se a função objetiva f(x) de cada cromossomo x
[População] Uma nova população será gerada através da repetição a seguir:
[Seleção] Selecionamos um par de cromossomos da população conforme a adaptação
de cada um (os mais aptos tem maior chance de serem escolhidos)
[Crossover] Através dos cromossomos dos pais geram-se dois descendentes (filhos)
por crossover. Lembremos que o ponto para se realizar o crossover deve ser aleatório.
[Mutação] Com certa probabilidade, o descendente sofre mutação em cada locus
(posição no cromossomo).
[Aceitação] Colocamos os descendentes gerados em uma nova população, juntamente
com a melhor solução da antiga geração]
[Troca] Substituímos a antiga população pela nova geração.
[Teste] Se a condição de finalização é satisfatória, então pare, e assim retornaremos a
melhor solução da população atual, caso contrário entraremos no laço
[Adaptação]
[Laço] Voltaremos a uma nova seleção.
Tabela 2 - Esboço do algoritmo genético em forma de etapas.
Atente que está é apenas uma forma simplificada que serve apenas para o
entendimento da criação do GA, pois ainda fica implícito para nós ao visualizarmos ela
32

toda a complexidade do processo de obtenção dos de alguns elementos. De acordo


Ricardo Linden os processos acima citados são os seguintes:

[...] uma representação cromossomial que seja adequada ao problema; uma


função de avaliação que penalize soluções implausíveis para nosso problema
e que avalie satisfatoriamente o grau de adequação de cada individuo como
solução do problema em questão (LINDEN, 2006, p. 52)

Sendo o GA altamente genérico, vários de seus componentes não mudam de


um problema para outro. Isso irá facilitar a sua implementação em uma linguagem
orientada a objetos, pois assim permitirá o reaproveitamento do código podendo ser
utilizado na resolução de muitos outros problemas.

4.1 Como escolher parâmetros do GA

Achamos interessante incluir este capitulo por a escolha dos parâmetros de


um GA ser crucial, pois a mesma poderá implicar no resultado final do resultado do
algoritmo genético.

Existem vários parâmetros que podemos escolher para melhorar o


desempenho do algoritmo genético, um deles é a forma como o cromossomo é
codificado e com isso adaptamos o GA as características particulares que cada classe
de problema traz. Dentre vários podemos citar os mais importantes como: tamanho da
população, número de gerações, probabilidade de crossover e probabilidade de
mutação. Estes parâmetros podem influenciar muito o resultado que será obtido pelo
algoritmo genético e sua influência depende da classe de problemas que se está
tratando.

Portanto, ao determinar um conjunto de valores otimizados para os


parâmetros dependerá da realização de um grande numero de experimentos e testes.
Em nossas pesquisas constatamos que vários dos valores encontrados na maioria das
literaturas estão na faixa de 60 a 65% quando se diz respeito a probabilidade de
crossover e entre 0,1 e 5% quando nos referenciamos a probabilidade de mutação.

Como acima citamos, algum dos fatores decisivos que afetam as respostas
encontradas para os problemas de GA é o tamanho da população e o número de
33

gerações, pois os mesmos definem diretamente o tamanho do espaço da busca a ser


descoberto, ou seja, a quantidade de soluções que podemos encontrar. Existe técnicas
que utilizam um GA como método de otimização para escolher os parâmetros, pois
devido a grande importância da escolha correta dos mesmos implicar na resposta que
os algoritmos genéticos irão encontrar.

4.2 Representação de um cromossomo

A representação cromossomial é vital para um algoritmo genético, pois é uma


maneira básica de traduzir a informação de um problema em uma maneira que possa
ser tratada pelo computador. Por ela ser completamente arbitraria, ou seja, varia de
acordo com a vontade de cada programador não havendo qualquer tipo de obrigação
para se adotar qualquer tipo de representação, portanto este é um outro ponto
importante a ressaltar. A grande maioria de pesquisadores frequentemente utiliza a
representação binária por a mesma ser a mais simples, na verdade, muitas pessoas
quando imaginam um GA, rapidamente fazem uma associação em cromossomos
binários. Entretanto, esta associação não é obrigatória e sim deve se adotar a que for
mais adequada a nossos propósitos.

De acordo com o pesquisador Ricardo Linden uma pergunta pode nos ocorrer
quando se diz respeito à representação cromossomial, sendo esta uma indagação de
quando a representação binária não será a mais adequada.

A representação binária tem dificuldades ao lidar com múltiplas dimensões de


variáveis continuas, especialmente quando uma grande precisão é requerida.
Isto decorre do fato de que um grande número de bits será necessário para
atingir tal precisão e os cromossomos se tornarão extremamente grandes,
dificultando a operação do GA. Além disto, há uma discretização inerente nos
valores reais quando cromossomos binários são usados. É claro que podemos
ignorar o efeito desta discretização quando usamos bits suficientes, mas esta
quantidade pode fazer com que nossos cromossomos se tornem grandes
demais (HERRERA apud LINDEN, 1998, p. 165)

Existem outros tipos de representações além do binário onde as mesmas são


pouco utilizadas, mas igualmente interessantes e eventualmente mais poderosas e
34

adequadas para problemas específicos. Dentre elas podemos citar como as mais
comuns:
• Binário (EX: 010111);
• Numérico (Ex: 5,8; 9,3);
• Seqüencial (Ex: 3, 5, 4, 1, 2);
Lembremos que uma representação é de grande importância, pois ela poderá
ser a mais adequada a algum problema que viermos a resolver: Qualquer estrutura de
dados que pudermos imaginar!
Devemos entender que os operadores genéticos devem ser modificados para
serem adequados à representação apropriada.

4.3 Inicialização Cromossomial

Uma boa inicialização ou podemos também falar representação, é


fundamental para um algoritmo genético. Ela basicamente consiste em pegarmos a
informação do problema e traduzirmos o mesmo em uma maneira viável de ser tratada
pelo computador. Se conseguirmos adequá-la ao nosso problema, sendo esta
adequação feita da melhor forma possível, maior será a qualidade dos resultados que
obteremos. De acordo com Ricardo Linden temos que tomar cuidado quanto a esta
problemática, pois muitos programadores ficam tentados a adequar o problema a sua
representação sendo assim poderá levar a não obtenção do resultado ideal.
Chamamos de gene cada pedaço indivisível da representação, pois como já
foi dito anteriormente existe uma analogia com a biologia, mais precisamente as partes
que compõe um cromossomo biológico.
Lembremos que ao fazermos uma representação cromossomial não
precisamos seguir nenhuma regra pré-definida, pois a mesma irá variar de acordo com
o gosto do programador e da sua adequação ao problema. Porém, de acordo com
Ricardo Linden existe algumas regras gerais que é interessante segui-las:
a) A representação deve ser a mais simples possível; b) Se houver soluções
proibidas ao problema, então elas não devem ter uma representação; c) Se o
problema impuser condições de algum tipo, estas devem estar implícitas
dentro da nossa representação. (LINDEN, 2006, p. 54)
35

Assim, percebemos que uma representação mais praticada entre os


programadores da área dos algoritmos genéticos sendo a mesma também a mais
simples, é a representação binária, pois um cromossomo é uma seqüência em forma de
bits tendo cada gene como um bit. Este bit ou conjunto de bits onde sua representação
é de grande importância e esta diretamente ligada ao problema.
Existem também outras formas de representar um cromossomo e podem até
obter resultados melhores.

4.4 Função Para Cálculo da Aptidão

Esta função é a maneira de os GAs calcularem a aptidão do indivíduo, ou


seja, determinar a qualidade de um individuo como solução para o problema. Se
pensarmos que esta função irá representar a nota dada ao individuo como resolução
para o problema teremos assim um melhor entendimento sobre o papel desta função
dentro dos GAs. Sendo que esta nota irá servir para a escolha de seleção de pais que
veremos a seguir, onde através dela iremos diferenciar as boas e as más soluções para
um problema.
Dentro dos GAs a função que calcula a aptidão de um individuo, em muitos
casos, é a única ligação verdadeira do programa com o problema, pois a mesma só
julga a qualidade da solução que esta sendo apresentada por aquele individuo e não
armazena informação sobre as técnicas de resolução do problema.
Em nossas pesquisas encontramos duas formas que podemos chamar esta
função: função de avaliação ou função de custo, onde sua finalidade é calcular um valor
numérico que reproduzirá quão bons os parâmetros representados no cromossomo
resolverão o problema. Através dos parâmetros, ou seja, os valores armazenados no
cromossomo que ela utiliza para produzir um valor numérico, onde seu significado
representa uma maneira de compararmos os resultados e assim obtermos uma
qualidade da solução obtida. Sendo os GAs técnicas de maximização, a função de
avaliação ou função de custo tem o objetivo de obter o resultado maximo, sendo assim
ao compararmos dois cromossomos onde o primeiro representa uma solução melhor
36

que o segundo a função de avaliação do primeiro deve ser maior do que a do segundo
cromossomo.
Portanto devemos atentar para a importância que esta função deve refletir os
objetivos a serem alcançados em uma resolução, pois ela é gerada diretamente pelas
condições impostas apresentadas no problema.

4.5 Seleção

Como um mecanismo de seleção natural o método de seleção de pais deve


simulá-lo, pois o mesmo segue a idéia que acontece na lei da evolução das espécies
onde há a seleção natural das espécies biológicas. Consiste em que os pais capazes
geram filhos, igualmente os pais menos aptos também podem gerar descendentes.
Logo devemos dar maior importância para os indivíduos com maior função de
avaliação, mas não menos importante vêm os indivíduos com função de avaliação
extremamente baixa onde devem também ser mantidos mesmo em menor quantidade.
Isto se deve ao fato desta decisão ser razoável, pois os indivíduos com péssima
avaliação podem ter características genéticas que sejam de grande valor a criação de
um novo individuo onde no mesmo pode conter uma melhor solução para o problema
que será resolvido, se por acaso deixarmos de lado estes indivíduos podemos correr o
risco de perder uma solução ideal, pois neles pode haver características não
encontradas em nenhum outro cromossomo da nossa população e com isso essas
características podem ser perdidas.
Portanto devemos ficar atentos sobre a questão de deixarmos apenas os
melhores indivíduos se reproduzirem, pois a população ficará composta de indivíduos
cada vez mais semelhantes e com isso acaba diminuindo a diversidade da população
prejudicando a evolução, pois a mesma não irá seguir de forma satisfatória. Devido a
este fato acaba resultando em um efeito denominado convergência genética, mas se
selecionarmos os indivíduos menos aptos conseguiremos evitar este efeito, ou no
mínimo minimiza-lo. Na natureza ocorre que os indivíduos mais fracos também geram
filhos, mesmo que isto seja com uma ocorrência menor comparando com os indivíduos
mais aptos, ou podemos chamá-los também de mais fortes. Sendo assim como os GAs
37

são desenvolvidos a partir de como se ocorre na natureza é interessante também


reproduzir esta possibilidade. Podemos implementar este efeito ou características
através do método da roleta viciada em nossos GAs. Mostrando de uma forma mais
visual podemos criar uma tabela onde mostrará uma população e sua respectiva
avaliação da aptidão (Tabela 3).

Indivídu Avaliação da
o Aptidão
1000 1
0111 9
1010 16
1010 36
Total 62
Tabela 3 - Exemplo de como ocorre o processo de seleção atentando para não cair no efeito
de convergência genética (tabela meramente ilustrativa).

Onde de um lado colocamos os indivíduos e do outro a sua avaliação. Cada


individuo possui suas características em seus respectivos cromossomos.
O cromossomo é representado pelo número binário ‘0001’ e o número ‘1’ uma
característica desse cromossomo, então o cromossomo ‘0001’ tem a pior avaliação mas
atentemos ao detalhe que ele possui uma boa característica que é representada pelo
numero ‘1’ na ultima posição do cromossomo pois nos dois melhores indivíduos ou seja
os indivíduos de melhor avaliação, não possuem esta característica. Sendo assim se
utilizássemos apenas os dois melhores indivíduos para reprodução, nossa resolução
não poderá ser a ideal.

4.6 Cruzamento ("Crossover")

Existem vários operadores de cruzamento ou crossover, alguns simples


outros mais complexos. Damos inicio falando sobre um dos operadores mais simples,
denominado de crossover de um ponto. Por ser um operador extremamente simples é
bem conveniente começarmos por ele para um melhor entendimento. Ao termino do
38

processo de seleção os pais já foram escolhidos. É chamado de ponto de corte a


interseção entre dois genes em um cromossomo, cada individuo de n genes contem n-1
pontos de corte, onde este ponto de corte separa os genes uns dos outros onde
compõe o material genético de cada pai. Em nossos estudos nos deparamos com a
Figura 6 onde representa um exemplo de pontos de corte onde o cromossomo é
formado de 5 genes e consequentemente por 4 pontos de corte possíveis.

Figura 6 - Exemplo de pontos de corte (LINDEN, 2006, p. 67)

É feito da seguinte forma, o ponto de corte é sorteado aleatoriamente logo em


seguida separam-se os pais em duas partes, a direita ficando de um lado e a esquerda
do outro. È importante fresarmos que essas partes necessariamente não precisam ser
do mesmo tamanho.

[...] vamos perceber que se o numero de genes for impar, é impossível que as
duas partes de cada pai tenha exatamente o mesmo tamanho [...] (LINDEN,
2006, p. 67)

Um filho é composto pela junção da parte esquerda de um pai com a parte


direita do outro e o outro filho é composto pelas as partes restantes. O exemplo deste
processo pode ser visto através da Figura 7, sendo o mesmo parecido com o que
acontece na natureza, onde dois cromossomos dão origem a outros dois novos
cromossomos conhecido por formação cromossomial de um individuo pertencente a
uma mesma espécie que utiliza a reprodução sexuada. Uma diferença é que na
natureza não existe restrição a apenas um ponto de corte.
39

Existem crossover de um ponto, de dois pontos, consequentemente existe de


três, o de quatro e assim por diante, em nossas pesquisas também constatamos a
existência de um operador complexo chamado de crossover uniforme. Por enquanto
ficaremos apenas no de um ponto.

Figura 7 - Representação do processo de cruzamento de um ponto.

Como já aviamos falado o cruzamento de vários pontos ou cruzamento


multiponto como também é conhecido, onde existem vários pontos de cruzamento que
podem ser utilizados. Entendemos melhor ao visualizarmos a Figura 8 onde
representaremos o cruzamento de dois pontos.
40

Figura 8 - Representação de cruzamento de dois pontos

No cruzamento uniforme não se utiliza pontos de cruzamento, mas se


determina por meio de uma mascara, onde os genes de cada cromossomo o filho irá
herdar. Um valor “1” que se encontra na mascara ira ser o gene correspondente no pai
que o filho ira herdar isso para os dois cromossomos pais e filhos, através da Figura 9
encontramos um exemplo onde podemos entender de forma melhor.

Figura 9 - Representação de cruzamento uniforme


41

4.7 Mutação

Ao termino da composição dos filhos executaremos o operador de mutação.


Onde o mesmo é operado da seguinte forma. Como este operador tem uma
probabilidade extremamente baixa da ordem de 0,5%, nós sorteamos um numero entre
0 e 1. Se por acaso este número for menor que a probabilidade predeterminada, então
o operador atuará sobre o gene em questão alterando-lhe o valor randomicamente.
Então repetiremos o processo para todos os genes que fazem parte dos dois filhos.
O que decide se o operador de mutação será ou não aplicado é um dos
parâmetros do GA sendo o mesmo um valor probabilístico onde simplesmente a
experiência pode determinar. Quanto ao valor probabilístico o seu conceito fundamental
é que ele deve ser baixo, pois caso ele seja muito alto, o algoritmo genético ficará
análogo com uma técnica chamada random walk, onde sua solução é determinada de
foram aleatória, ou seja, simplesmente sorteando-se elementos não utilizando
informações correntes ou passadas.
Se a taxa de mutação for colocada em 100%, ou seja, se todos os genes do
cromossomo forem alterados, os algoritmos genéticos se comportarão de forma
estranha. Sendo assim todos os bits do cromossomo serão invertidos, pois quando um
número for selecionado será sempre menor do que um, a probabilidade
predeterminada. Então a qualidade da população rapidamente será modificada para
pior e dificilmente o GA apresentará uma solução ideal para o problema.
Quando a taxa de mutação é baixa previne que a busca fique parada em sub-
regiões do espaço de busca. Então, possibilitará que qualquer ponto do espaço de
busca seja atingido. Sendo assim ao termos uma taxa muito alta a busca se tornará
essencialmente aleatória. Um exemplo de como ficará o cromossomo após a mutação
pode ser visto na Figura 10.
42

Figura 10 - Exemplo ilustrativo de mutação

O processo consiste em aplicarmos em dois pais escolhidos o operador de


crossover através do método da roleta viciada e logo após aplicarmos o operador de
mutação. Através da Figura 11 podemos olhar melhor como funciona.

Figura 11 - Descrição da operação do operador de crossover de um ponto e mutação (LINDEN, 2006, p.


69)
43

5 APLICABILIDADES

Podemos dizer que a aplicabilidade dos GAs é praticamente infinita, pois


sempre que houver a necessidade de buscar ou otimizar um problema para que sua
resposta seja a ideal os utilizaremos como ferramenta de solução, também podemos
incluir a solução de equações como uma utilizadora de GAs. Lembremos que ao
utilizarmos algoritmos genéticos simples devemos limitar sua aplicação principalmente
quando existir um algoritmo exato capaz de resolver o problema em um tempo
relativamente curto, dentro de uma memória finita. Pelo número de problemas com
estas características serem grandes o suficiente, podemos justificar a introdução de
uma nova resolução.
O maior problema que podemos encontrar ao utilizarmos um algoritmo
genético para resolver problemas está em torná-lo adequado aos requisitos de GAs, ou
seja, devemos encontrar uma representação cromossomial para cada aspecto do
problema considerado. Em nossas pesquisas encontramos algumas indagações que
através das mesmas podemos entender como um problema é resolvido, mas é
importante falarmos que nem todos os problemas recebem estas considerações. São
elas:

● Qual a representação adotada?


● Para esta representação, qual é o mecanismo dos operadores genéticos?
● Qual foi a função de avaliação utilizada?
● Qual é o critério de termino utilizado?. (LINDEN, 2006, p. 285)

Os GAs possuem uma larga aplicação em muitas áreas cientificas, dentre


elas podemos citar: Síntese de Circuitos Analógicos, Programação Genética,
Gerenciamento de Redes, Problemas de otimização complexos, Bioinformática, Setor
Elétrico, Filogenética, etc. A tabela a baixo (Tabela 4) traz algumas áreas cientificas e a
utilização do GA para as mesmas.
44

ÁREA CIENTIFICA UTILIZAÇÃO DO GA


Síntese de Circuitos Analógicos É utilizado para produzir uma certa entrada e uma
saída desejada, como na tensão existente em
circuitos analógicos, onde o GA gera a topologia,
o tipo e o valor dos componentes do circuito.
Síntese de Protocolos È utilizado para determinar quais as funções do
protocolo devem ser executadas em hardware e
quais devem ser executadas em software para
que seja alcançado um maior desempenho.
Alocação de Capacitores Como o próprio nome sugere, é utilizado para
melhor alocar os capacitores melhorando assim a
regulação e a voltagem fornecida como também
aumenta a capacidade de liberação de energia do
sistema, pois a extensão dos benefícios
conseguidos depende fortemente de como os
capacitores são colocados e controlados.
Escalonamento de Horários É utilizado na definição de horários das matérias,
de acordo com a preferência dos professores, a
necessidade de que duas turmas com alunos em
comum não tenham horários coincidentes, que
alunos estudem sempre em um único bloco da
faculdade e muitas outras restrições possíveis.
Sendo assim seu espaço de busca é
praticamente infinito, pois o numero de
combinações também depende do numero de
turmas e salas.
Escala de Tarefas É utilizado para o problema de escala de tarefas
(job shop scheduling problem) onde cada tarefa
consiste em uma seqüência de operadores, que
tem que ser processadas e um conjunto fechado
e limitado de maquinas (Computadores), de forma
que o conjunto dessas tarefas seja realizado no
menor tempo possível.
Filogenética Sua utilização consiste em avaliar os
relacionamentos evolucionários entre uma serie
de n organismos, ou seja, a relação de
parentesco entre esses organismos.
Ciências biológicas - É utilizado para transformar a imensa massa
Bioinformática bruta de informação em processos biológicos de
forma a permitir a compreensão destes processos
e, eventualmente, o desenvolvimento de novos
remédios que garantam o progresso e a melhoria
das condições de vida da humanidade.
Tabela 4 – Contem a área cientifica assinalando com a utilização do GA.
45

A quantidade de aplicativos que atualmente utilizam GAs é tão grande que


seria inviável elaborar e apresentar aqui uma lista de produtos disponíveis no mercado.
Alguns softwares que citaremos estão disponíveis para compra e/ou licenciamento. São
eles:
• Evolver, onde o mesmo é uma ferramenta para auxiliar o Microsoft
Excel na resolução rápida com problemas complexos de otimização
em finanças, distribuição, a programação, produção, orçamentos,
engenharia, e muito mais, para maiores detalhes o mesmo está
disponível em: http://www.palisade.com/evolver/.
• OptiGA, é um controle de ActiveX (OCX) utilizado na implementação
de Algoritmos Genéticos para aplicações em Visual Basic. O mesmo
está disponível em: http://www.optiwater.com/optiga.html.
• GeneticServer, é um componente ActiveX que pode ser facilmente
usado para construir aplicações genéticas personalizadas em Visual
Basic, para maiores informações visite: http://www.nd.com/genetic/.
Como já havíamos falado existem muitos outros produtos alem dos acima
citados, também encontraremos muitos deles não comercias onde os mesmos podem
ser encontrados na internet.
46

6 CONSIDERAÇÕES FINAIS

É sabido que a partir dos conhecimentos adquiridos no decorrer dos séculos


o homem obteve grandes avanços em diversas áreas do conhecimento, ressaltando a
área da inteligência artificial, mais precisamente os algoritmos genéticos, uma vez que
é o objeto de estudo do nosso trabalho. Atrelado ao desenvolvimento do intelecto do
ser humano, sugiram problemas próprios da complexidade trazidas pelos mesmos,
levando o homem a tentar soluciona-los, alguns de formas simples outros de forma
complexa, ou seja, de diferentes formas sendo característico de cada um.
Quando nos referimos aos algoritmos genéticos, os mesmo vieram com o
propósito de solucionar problemas onde os algoritmos normais não o conseguiam ou
eram demasiadamente lentos na obtenção da solução. Como foi mostrado no trabalho
os GA são uma importante e poderosa ferramenta para efetuar buscas em espaços
praticamente infinitos, porém, sua aplicabilidade é basicamente limitada a este tipo de
problema. Desta forma, afirmamos que não se trata de uma técnica que revolucionará
toda a ciência da computação, mas é importante entendermos que, como ferramenta de
busca, os mesmos se mostram muito eficientes, encontrando ótimas soluções para
problemas que talvez não pudessem ser solucionados de forma diversa.
Com base no exposto acima, podemos citar como principais vantagens na
utilização de GAs, como solução de problemas específicos: são extremamente simples
de implementar e modificar, uma vez que não é necessário conhecimento matemático
aprofundado do problema, apresenta um bom desempenho em problemas de
otimização de grande escala, na otimização multiobjetivo fornecem uma lista de
parâmetros ótimos e não uma só solução, ou seja, nem sempre o algoritmo genético
trará a mesma solução mas pode apresentar varias soluções ideais dependendo dos
parâmetros escolhidos, dentre outras.
É importante ressaltar ainda, que os GAs não oferecem nenhuma garantia de
desempenho, pois os mesmos são diretamente dependentes dos parâmetros
escolhidos pelo programador, podendo assim um mesmo problema ser resolvido de
varias formas, porem, quando estes parâmetros são ajustados da forma mais perfeita
47

possível, ai sim, poderemos encontrar a solução ideal. Apesar do GA não ser o método
mais preciso por ser um método heurístico, no momento é o mais eficiente.
Esperamos, pois, que o nosso trabalho monográfico venha contribuir para
melhorar o conhecimento acerca da aplicabilidade dos GAs em nossa área, pois é
interessante conhecer o processo para a obtenção do mesmo antes de pensarmos em
começar alguma implementação e com isso o algoritmo genético poderá chegar ao seu
total objetivo tendo um melhor desempenho.
Por fim, afirmamos que existem varias áreas em aberto dentro da pesquisa
teórica dos algoritmos genéticos, por tal motivo, tivemos como objetivo sinalizar
caminhos e não dar explicações de forma acabada com intuito de estimular outras
pesquisas. Ademias, devemos enfatizar que não há nenhum motivo plausível para
pararmos de aprender com a natureza, apesar de os GAs funcionarem muito bem na
atualidade, mas certamente a inclusão de técnicas utilizadas na natureza podem
melhorar demasiadamente o desempenho de tais algoritmos.
48

REFERÊNCIAS

ALVES, Ricardo Arantes. Algoritmos Genéticos. São Paulo: EDIÇÕES


INTELIGENTES, 2005.

CARVALHO, André Ponce de Leon F. de. Algoritmos Genéticos. Disponível em:


<http://www.icmc.usp.br/~andre/research/genetic/index.htm#intro>. Acessado em: 24
abril 2007.

CASTRO, Leandro de; ZUBEN, Fernando Von. Algoritmos Genéticos (AG’s).


Disponível em:
<ftp://ftp.dca.fee.unicamp.br/pub/docs/vonzuben/ia707_02/topico9_02.pdf>. Acessado
em: 24 abril 2007.

CORTES, Maria Bernadete de Sousa. Algoritmos Genéticos Em Problemas de


Programação Não Linear Contínua. Disponível em: <
http://www.eps.ufsc.br/teses96/cortes/index/index.htm>. Acessado em: 24 abril 2007.

FURTADO, João Carlos; LORENA, Luiz Antonio Nogueira. Algoritmo Genético


Construtivo na otimização de problemas combinatoriais de agrupamentos.
Disponível em: < http://www.lac.inpe.br/~lorena/sbpo98/agc-clust.pdf>. Acessado em:
24 abril 2007.

LINDEN, Ricardo. Algoritmos Genéticos – Uma importante ferramenta da


Inteligência Computacional. Rio de Janeiro: Brasport, 2006.

LOPES, Vanessa Meneses. Algoritmos Genéticos. Disponível em: <


http://www.zemoleza.com.br/trabalho_ver.asp?codTrabalho=33541&carreira=11>.
Acessado em: 24 abril 2007.

LUCAS, Diogo C.. Algoritmos Genéticos: uma Introdução. Disponível em: <
http://www.inf.ufrgs.br/~alvares/INF01048IA/ApostilaAlgoritmosGeneticos.pdf>.
Acessado em: 24 abril 2007.

MIRANDA, Marcio Nunes de. Algoritmos Genéticos – Fundamentos e Aplicações.


Disponível em: <http://www.gta.ufrj.br/~marcio/genetic.html#Introdução>. Acessado em:
24 abril 2007.

NARCISO, Marcelo Gonçalves. Uso de Algoritmos Genéticos em Sistema de Apoio


a Decisão para Alocação de Recursos no Campo e na Cidade. Disponível em: <
http://www.lac.inpe.br/~lorena/marcelo/PLC-CT.pdf>. Acessado em: 24 abril 2007.

NEITZEL, Luís Carlos. Aplicações práticas de Algoritmos Genéticos. Disponível em:


< http://www.geocities.com/Athens/Sparta/1350/ia/IA3_aplica/index.htm>. Acessado em:
24 abril 2007.
49

PACHECO, Marco Aurélio Cvalcanti. ALGORITMOS GENÉTICOS: PRINCÍPIOS E


APLICAÇÕES. Disponível em: <http://www.ica.ele.puc-rio.br/cursos/download/CE-
Apostila-Comp-Evol.pdf>. Acessado em: 24 abril 2007.

REZENDE, Solange Oliveira (org). Sistemas Inteligentes Fundamentos e


Aplicações. São Paulo: EDITORA MANOLE, 2005.

RIBEIRO, Elder. Algoritmos Genéticos – Fundamentos e Aplicações. Disponível em:


<http://www.zemoleza.com.br/trabalho_ver.asp?codTrabalho=24575&carreira=11>.
Acessado em: 24 abril 2007.

SILVA, Paulo Ricardo da; ZAMBONI, Rafael Régis; MARQUES, Ana Flavia. Teoria da
Evolução. Disponível em: <http://www.brasilescola.com/biologia/teoria-da-
evolucao.htm>. Acessado em: 25 julho 2007.

SOARES, Gustavo Luís. Algoritmos Genéticos: Estudo, Novas Técnicas e


Aplicações. Disponível em:
<http://www.cpdee.ufmg.br/~joao/TesesOrientadas/VAS1997_1.pdf>. Acessado em: 25
julho 2007.

TICONA, Waldo Gonzalo Cancino. Aplicação de Algoritmos Genéticos Multi-


Objetivo para Alinhamento de Seqüências Biológicas. Disponível em: <
http://www.jeo.org/emo/tesis_waldo_msc_final.pdf.gz>. Acessado em: 24 abril 2007.

WIKIPEDIA, The Free Encyclopedia. Algoritmo. Disponível em: <


http://pt.wikipedia.org/wiki/Algoritmo>. Acessado em: 25 Agosto 2007.

WIKIPEDIA, The Free Encyclopedia. Algoritmo genético. Disponível em: <


http://pt.wikipedia.org/wiki/Algoritmo_gen%C3%A9tico>. Acessado em: 25 Agosto 2007.

WIKIPEDIA, The Free Encyclopedia. Algoritmo evolutivo. Disponível em: <


http://pt.wikipedia.org/wiki/Algoritmo_evolutivo>. Acessado em: 25 Agosto 2007.

WIKIPEDIA, The Free Encyclopedia. Ingo Rechenberg. Disponível em: <


http://en.wikipedia.org/wiki/Ingo_Rechenberg>. Acessado em: 25 julho 2007.

WIKIPEDIA, The Free Encyclopedia. NP-completo. Disponível em: <


http://pt.wikipedia.org/wiki/NP-completo>. Acessado em: 25 julho 2007.

WIKIPEDIA, The Free Encyclopedia. Charles Darwin. Disponível em: <


http://pt.wikipedia.org/wiki/Charles_Darwin>. Acessado em: 25 Agosto 2007.

WIKIPEDIA, The Free Encyclopedia. Evolução. Disponível em: <


http://pt.wikipedia.org/wiki/Evolu%C3%A7%C3%A3o>. Acessado em: 25 Agosto 2007.

WIKIPEDIA, The Free Encyclopedia. Genética. Disponível em: <


http://pt.wikipedia.org/wiki/Gen%C3%A9tica>. Acessado em: 25 Agosot 2007.
50

WIKIPEDIA, The Free Encyclopedia. Gregor Mendel. Disponível em: <


http://pt.wikipedia.org/wiki/Gregor_Mendel>. Acessado em: 25 Agosto 2007.

WIKIPEDIA, The Free Encyclopedia. John Henry Holland. Disponível em: <
http://en.wikipedia.org/wiki/John_Henry_Holland>. Acessado em: 25 Agosto 2007.

WIKIPEDIA, The Free Encyclopedia. Programação genética. Disponível em: <


http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_gen%C3%A9tica>. Acessado
em: 25 Agosto 2007.