Algoritmos Genéticos na procura de raízes de funções - ISR
Algoritmos Genéticos na procura de raízes de funções - ISR
Algoritmos Genéticos na procura de raízes de funções - ISR
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Algoritmos</strong> <strong>Genéticos</strong> <strong>na</strong> <strong>procura</strong> <strong>de</strong> <strong>raízes</strong> <strong>de</strong> <strong>funções</strong><br />
Alberto Vale, Nuno Antunes, Agostinho Rosa<br />
Laboratório <strong>de</strong> Sistemas Evolutivos e Engenharia Biomédica<br />
<strong>ISR</strong> - Instituto Superior Técnico<br />
Av. Rovisco Pais, 1 - Torre Norte 6.21<br />
1049-001 Lisboa - Portugal<br />
Sumário:<br />
Habitualmente, para <strong>de</strong>termi<strong>na</strong>r <strong>raízes</strong> <strong>de</strong> <strong>funções</strong>,<br />
é necessário recorrer a algoritmos específicos, que<br />
exigem muitas restrições sobre estas, para além <strong>de</strong><br />
ser necessário o conhecimento a-priori do<br />
comportamento da função. Neste algoritmo é a<br />
comparação do plano complexo, ao mundo animal,<br />
on<strong>de</strong> se verifica o cruzamento*, mutação,<br />
reprodução e selecção, <strong>de</strong> forma a criar uma vida<br />
artificial perante os números, que permite<br />
<strong>de</strong>termi<strong>na</strong>r as <strong>raízes</strong> das <strong>funções</strong>. É este o<br />
objectivo <strong>de</strong> aplicar os algoritmos genéticos <strong>na</strong>s<br />
<strong>funções</strong>, sejam elas lineares, não lineares,<br />
periódicas, ou não periódicas, polinómios, etc.<br />
1. INTRODUÇÃO<br />
Na realização <strong>de</strong> um projecto, surgem muitas<br />
situações, as quais necessitam <strong>de</strong> solução, <strong>de</strong> forma a<br />
minimizar os custos e maximizar os resultados das<br />
mesmas. Nem sempre é possível resolver<br />
matematicamente estas situações e, em caso<br />
afirmativo, ao tentar solucioná-las através <strong>de</strong><br />
algoritmos específicos, surgem outros problemas, tais<br />
como, a mo<strong>de</strong>lização, não linearida<strong>de</strong>s, entre outros,<br />
que se po<strong>de</strong>m tor<strong>na</strong>r incompatíveis <strong>na</strong> programação, o<br />
que leva muitas vezes ao insucesso e falta <strong>de</strong> eficácia.<br />
Este projecto <strong>procura</strong> <strong>de</strong>monstrar como é possível<br />
<strong>de</strong>termi<strong>na</strong>r as <strong>raízes</strong> <strong>de</strong> <strong>funções</strong>, sem conhecimentos<br />
<strong>de</strong> análise numérica, ou algoritmos que lhes<br />
imponham restrições. Não é trivial afirmar que uma<br />
função genérica que tenha <strong>raízes</strong> complexas, estas<br />
sejam conjugadas, no entanto, tal facto é admitido.<br />
Tudo começa numa geração <strong>de</strong> uma população<br />
(conjunto aleatório <strong>de</strong> pontos no plano complexo),<br />
sujeita a uma vida artificial, on<strong>de</strong> vai crescer,<br />
apren<strong>de</strong>r e acabar por convergir para o i<strong>de</strong>al, <strong>na</strong>da<br />
mais do que a raiz, i.e., solução pretendida. [1],[2],[3]<br />
2. APLICAÇÃO<br />
A população sujeita a esta vida artificial, segue os<br />
<strong>Algoritmos</strong> <strong>Genéticos</strong> (AG’s), que operam com a<br />
codificação dos indivíduos que constituem a<br />
população. A pesquisa feita pelos AG’s é global,<br />
através <strong>de</strong> uma função objectivo (fitness), operando <strong>na</strong><br />
população utilizando técnicas mo<strong>de</strong>ladas pela genética<br />
biológica, on<strong>de</strong> sobrevivem os melhores indivíduos da<br />
população. As gerações <strong>de</strong>senvolvem-se por processos<br />
probabilísticos. [1],[3]<br />
Na figura 2.1, está sintetizado a aplicação dos AG’s <strong>na</strong><br />
<strong>procura</strong> <strong>de</strong> <strong>raízes</strong>.<br />
Não<br />
Inicialização<br />
Reprodução<br />
Cruzamento<br />
Mutação<br />
Descobriu<br />
nova<br />
raiz?<br />
Sim<br />
Há mais<br />
<strong>raízes</strong> por<br />
<strong>de</strong>scobrir?<br />
Não<br />
Fim<br />
Sim<br />
Inicialização<br />
Figura 2.1 - diagrama<br />
<strong>de</strong> blocos do algoritmo<br />
Começa pela geraração aleatória <strong>de</strong> uma população,<br />
on<strong>de</strong> <strong>de</strong>pois <strong>de</strong> seleccio<strong>na</strong>dos os melhores indivíduos,<br />
ficam sujeites ao cruzamento e à alteração <strong>de</strong><br />
<strong>de</strong>termi<strong>na</strong>das características (mutação). O processo<br />
repete-se até ser alcançado o objectivo pretendido.<br />
Cada indivíduo é i<strong>de</strong>ntificado por um cromossoma,<br />
que representa uma posição no plano complexo (ex: o<br />
número complexo conjugado 2±4j, ou o número -<br />
6.12).<br />
Po<strong>de</strong>m ser consultados <strong>na</strong> bibliografia os seguintes<br />
termos, que vão ser inseridos no contexto dos AG’s:<br />
[1],[2],[3]<br />
• cromossoma;<br />
• codificação;<br />
• selecção;<br />
• cruzamento (é mais correcto o uso da<br />
palavra retrocruzamento pois esta é a<br />
tradução <strong>de</strong> crossing-over)<br />
• mutação;<br />
• mérito (fitness);<br />
• aprendizagem.<br />
2.1- Cromossoma<br />
Uma população é constituída por vários indivíduos,<br />
que nos AG’s necessitam <strong>de</strong> ser i<strong>de</strong>ntificados. Esta<br />
i<strong>de</strong>ntificação é <strong>de</strong>sig<strong>na</strong>da por cromossoma, constituída<br />
por uma parte real (não esquecendo o si<strong>na</strong>l) e uma<br />
parte imaginária (o si<strong>na</strong>l po<strong>de</strong> ser <strong>de</strong>sprezado, pois<br />
como foi citado, todas as <strong>funções</strong> possuem <strong>raízes</strong> reais<br />
e/ou complexas conjugadas).
cromossoma - 45<br />
cromossoma - 9<br />
cromossoma - 23<br />
cromossoma - 1<br />
cromossoma - 3<br />
cromossoma - 12<br />
População<br />
cromossoma<br />
cromossoma<br />
-<br />
-<br />
4<br />
4<br />
cromossoma - 6<br />
cromossoma - 34<br />
2.2- Codificação<br />
Tal como as tiras <strong>de</strong> ADN (ácido<br />
<strong>de</strong>soxirribonucleico) i<strong>de</strong>ntificam<br />
as ca<strong>de</strong>ias <strong>de</strong> amino ácidos nos<br />
seres vivos, garantindo a<br />
transição <strong>de</strong> características <strong>de</strong><br />
geração para geração, pela sua<br />
auto duplicação ou réplica.<br />
Também nos cromossomas <strong>de</strong>ste<br />
projecto, terá <strong>de</strong> haver uma<br />
codificação que permita as<br />
mesmas potencialida<strong>de</strong>s. [4],[5]<br />
Na escolha da codificação,<br />
<strong>de</strong>vem ser seguidos os seguintes<br />
princípios [1] :<br />
Parte Real Parte Imaginária<br />
• princípio dos blocos básicos significativos,<br />
seleccio<strong>na</strong>r uma codificação que resulta em<br />
esquemas relevantes com distâncias curtas e <strong>de</strong><br />
or<strong>de</strong>ns baixas e relativamente incorrelacio<strong>na</strong>dos em<br />
relação às outras posições fixas dos esquemas;<br />
• princípio do alfabeto mínimo, o alfabeto que<br />
permita uma representação <strong>na</strong>tural do problema.<br />
O primeiro princípio compromete a codificação<br />
<strong>de</strong>cimal (a vulgar i<strong>de</strong>ntificação dos números<br />
complexos), no entanto satisfaz o facto <strong>de</strong> ter uma<br />
única representação. Quanto ao segundo princípio,<br />
induz à utilização da codificação binária, constituída<br />
ape<strong>na</strong>s por dois algarismos: ‘0’ e ‘1’, satisfazendo<br />
também o primeiro princípio.<br />
Por uma questão computacio<strong>na</strong>l, a codificação binária<br />
é ligeiramente modificada, <strong>de</strong>vido à necessida<strong>de</strong> <strong>de</strong><br />
<strong>de</strong>termi<strong>na</strong>r <strong>raízes</strong> elevadas e/ou com precisão. Optar<br />
por uma população com algumas <strong>de</strong>ze<strong>na</strong>s <strong>de</strong><br />
cromossomas, iria tor<strong>na</strong>r o algoritmo mais lento.<br />
O método implementado é o seguinte: codificar, quer a<br />
parte real, quer a imaginária, como se fossem inteiras,<br />
mas conhecendo a posição da vírgula, que terá <strong>de</strong> ser<br />
comum a todos os cromossomas <strong>de</strong> uma geração. Ao<br />
passar para outra geração, a posição da vírgula po<strong>de</strong><br />
ser alterada, consoante seja exigida maior precisão, ou<br />
um maior espaço <strong>de</strong> <strong>procura</strong> (aprendizagem como é<br />
apresentado em 2.7).<br />
Codificação <strong>de</strong> cada cromossoma:<br />
Cromossoma<br />
Figura 2.2 - representação<br />
<strong>de</strong> uma população e a<br />
constituição do cromossoma<br />
parte real parte imaginária<br />
bit(si<strong>na</strong>l) bitn …bit1 bit0 | bitn …bit1 bit0<br />
Figura 2.3 -<br />
tiras <strong>de</strong> ADN<br />
[4]<br />
(2.1.1)<br />
Exemplo:<br />
- 7 ± 2.3 j => - 70 ± 23 j => 11000110 0010111<br />
bit <strong>de</strong> si<strong>na</strong>l:<br />
‘1’ equivale a -;<br />
‘0’ equivale a +;<br />
2.3- Selecção<br />
Tal como numa população real, os melhores<br />
indivíduos têm tendência a subsistir, criando novas<br />
gerações, também o mesmo ocorre nos AG’s. Existem<br />
vários tipos <strong>de</strong> selecção, tendo em conta o mérito e por<br />
vezes a introdução <strong>de</strong> certa aleatorieda<strong>de</strong>.<br />
2.3.1- Roda da Sorte<br />
Mantendo constante o número <strong>de</strong> elementos da<br />
população, steady state, é optada por uma selecção<br />
proporcio<strong>na</strong>l ao mérito, que no entanto é<br />
probabilística. De facto um elemento que tenha maior<br />
mérito que outro, tem também maior probabilida<strong>de</strong> <strong>de</strong><br />
ser seleccio<strong>na</strong>do, no entanto, <strong>na</strong>da impe<strong>de</strong> que seja<br />
seleccio<strong>na</strong>do o pior, per<strong>de</strong>ndo-se assim talvez o<br />
melhor elemento da população, que po<strong>de</strong>ria levar a<br />
uma convergência mais rápida. [1],[2]<br />
2.3.2- Elitismo<br />
Para tentar minimizar este possível problema, é<br />
adicio<strong>na</strong>do à selecção roda da sorte (roulette Wheel<br />
Sampling) uma forma <strong>de</strong> manter o melhor elemento<br />
encontrado até então: elitismo.<br />
Para que o número <strong>de</strong> indivíduos por população se<br />
mantenha constante, é substituído o pior elemento pelo<br />
melhor encontrado até então. A figura 2.4 apresenta<br />
um exemplo on<strong>de</strong> são seleccio<strong>na</strong>dos talvez elementos<br />
<strong>de</strong> mérito relativamente alto, mas o melhor <strong>de</strong> todos,<br />
estaria perdido, não fosse o elitismo.<br />
geração anterior Selecção geração seguinte<br />
Roda<br />
da<br />
Sorte<br />
elitismo<br />
o melhor<br />
o pior<br />
Figura 2.4 - exemplo <strong>de</strong> uma situação, on<strong>de</strong> pela<br />
selecção da “roda da sorte” é perdido o melhor<br />
elemento, que no entanto é salvo pelo elitismo<br />
O elitismo po<strong>de</strong> ser utilizado não ape<strong>na</strong>s num, mas nos<br />
dois, três, ou até mais dos melhores elementos, por<br />
outro lado, o elitismo não po<strong>de</strong> ser muito elevado, o<br />
que po<strong>de</strong> resultar em máximos locais. [1],[2]<br />
2.4- Cruzamento<br />
Como foi referido, os cromossomas i<strong>de</strong>ntificam as<br />
características <strong>de</strong> cada indivíduo. O cruzamento<br />
permite a criação <strong>de</strong> outros cromossomas com as<br />
características dos antecessores. Tal como <strong>na</strong> vida<br />
huma<strong>na</strong>, se o pai apresentar estatura elevada e a mãe,<br />
olhos azuis, é <strong>na</strong>tural (não necessariamente) que o<br />
filho venha a possuir as mesmas características. O<br />
cruzamento em humanos é diplói<strong>de</strong> (o mecanismo<br />
consiste em guardar uma réplica <strong>de</strong> segurança dos<br />
genes potencialmente úteis evitando a sua <strong>de</strong>struição
por selecção <strong>na</strong>tural), no entanto esta comparação é<br />
fraca e sujeita a erros. [1],[2],[3],[4]<br />
Nesta situação, para que haja codificação quer <strong>na</strong><br />
parte real quer <strong>na</strong> parte imaginária, mas<br />
in<strong>de</strong>pen<strong>de</strong>ntes, é seleccio<strong>na</strong>do o cruzamento em duplo<br />
ponto. Estes dois pontos são escolhidos<br />
aleatoriamente, <strong>de</strong>ntro das dimensões a<strong>de</strong>quadas. O<br />
exemplo apresentado <strong>na</strong> figura 2.5 elucida um pouco o<br />
cruzamento entre dois cromossomas, que gera outros<br />
dois. A escolha dos cromossomas para o cruzamento<br />
é também aleatória.<br />
Parte Real Parte Imaginária<br />
<br />
Convém salientar que a partir do momento em que é<br />
efectuado o cruzamento, são perdidos os elementos<br />
imediatamente anteriores. No entanto tem a vantagem<br />
<strong>de</strong> <strong>na</strong>s primeiras fases do algoritmo gerar bastante<br />
varieda<strong>de</strong>, estando a selecção encarregue <strong>de</strong> captar os<br />
indivíduos mais próximos do óptimo. Nas fases fi<strong>na</strong>is,<br />
on<strong>de</strong> é <strong>procura</strong>da a solução mas, com precisão, o<br />
cruzamento está a gerar indivíduos em torno do<br />
óptimo ou até mesmo este (nesta fase, <strong>de</strong>vido à<br />
codificação utilizada, os cromossomas tem os “lados<br />
esquerdos”, quer da parte real, quer da imaginária em<br />
relação aos pontos <strong>de</strong> cruzamento muito parecidos,<br />
enquanto os “lados direitos” dos mesmos, diferem<br />
bastante. Como resultado do cruzamento surgem<br />
pontos em torno do óptimo (ex: óptimo=1.274±2.735j,<br />
são gerados valores tais como 1.281±2.726j,<br />
1.277±2.730j, 1.269±2.745j).<br />
lado esquerdo<br />
da parte real<br />
Cromossoma 1<br />
Cromossoma 2<br />
Parte Real Parte Imaginária<br />
<br />
Parte Real Parte Imaginária<br />
<br />
<br />
<br />
1º ponto <strong>de</strong><br />
cruzamento<br />
lado direito<br />
da parte real<br />
<br />
lado esquerdo da<br />
parte imaginária<br />
2º ponto <strong>de</strong><br />
cruzamento<br />
lado direito da<br />
parte imaginária<br />
Cromossoma 1’<br />
Parte Real Parte Imaginária<br />
Cromossoma 2’<br />
Parte Real Parte Imaginária<br />
Figura 2.5 - exemplo do cruzamento entre<br />
dois cromossomas, resultando em dois<br />
novos cromossomas<br />
Figura 2.6 -<br />
i<strong>de</strong>ntificação das<br />
partes do<br />
cromossoma<br />
influentes no<br />
cruzamento<br />
2.5- Mutação<br />
Quantas vezes os filhos aparecem com características<br />
que os pais, e outros antece<strong>de</strong>ntes não possuem? Isto<br />
<strong>de</strong>ve-se ao efeito da mutação. Também nos AG’s esta<br />
proprieda<strong>de</strong> é importante, quando o algoritmo encalha<br />
em máximos locais, bastando alterar um bit, para este<br />
po<strong>de</strong>r saltar para uma situação completamente<br />
diferente.<br />
A mutação consiste assim, <strong>na</strong> alteração <strong>de</strong> certas<br />
características do cromossoma, o que nesta<br />
codificação, correspon<strong>de</strong> à alteração <strong>de</strong> um ou mais<br />
bits.<br />
Cromossoma<br />
Parte Real Parte Imaginária<br />
bit(si<strong>na</strong>l) bitn … bit3 bit2 bit1 bit0 bitn … bit3 bit2 bit1 bit0<br />
cromossoma<br />
inicial<br />
A escolha dos bits<br />
que vão ser alterados<br />
é aleatória, no entanto,<br />
a probabilida<strong>de</strong><br />
<strong>de</strong> ser alterado o bitn<br />
é menor do que a<br />
probabilida<strong>de</strong> do<br />
bit(n-1). Isto, para<br />
não resultarem números<br />
complexos muito<br />
longe daqueles com<br />
que se trabalha.<br />
P Mutação (bitn) > P Mutação (bit(n-1)), n=1,2,3,… (2.4.1)<br />
Na codificação utilizada, a simples alteração do bit <strong>de</strong><br />
maior peso resulta num número completamente<br />
diferente<br />
(ex: 11±9j => 01011 01001<br />
passava para 27±9j => 00011 01001).<br />
A probabilida<strong>de</strong> <strong>de</strong> um cromossoma ser alterado é<br />
<strong>de</strong>finida exteriormente como probabilida<strong>de</strong> <strong>de</strong><br />
mutação, enquanto a <strong>de</strong> cada bit (gene do<br />
cromossoma), já é <strong>de</strong>finida inter<strong>na</strong>mente, i.e., caso o<br />
cromossoma não seja sujeito à mutação <strong>na</strong>da é<br />
alterado, caso contrário, os bits estarão sujeitos a<br />
alteração, obe<strong>de</strong>cendo à probabilida<strong>de</strong> <strong>de</strong> mutação <strong>de</strong><br />
cada bit. [1],[2],[3]<br />
Para além <strong>de</strong>ste tipo <strong>de</strong> mutação, o algoritmo é<br />
optimizado para gerar número(s) aleatório(s) em torno<br />
do cromossoma, que se <strong>de</strong>sti<strong>na</strong> a ser mudado. A figura<br />
2.8 elucida como se geram números <strong>na</strong> vizinhança do<br />
inicial.<br />
110010100 01001101 110010110 01001011<br />
- 148 ± 77 j<br />
bit <strong>de</strong> si<strong>na</strong>l<br />
110010111 01001100<br />
- 151 ± 76 j<br />
Probabilida<strong>de</strong> <strong>de</strong><br />
mutação<br />
110010110 01001101<br />
Figura 2.7 - I<strong>de</strong>ntificação<br />
do cromossoma e<br />
exemplificação da mutação<br />
bit0 bit1 bit2 bit3 . . . bits<br />
Figura 2.7 - evolução<br />
da probabilida<strong>de</strong> <strong>de</strong><br />
mutação ao longo dos<br />
bits<br />
- 150 ± 75 j<br />
(cromossoma inicial)<br />
- 150 ± 77 j<br />
110011000 01001110<br />
Figura 2.8 - exemplificação da<br />
optimização <strong>na</strong> mutação<br />
- 152 ± 78 j
2.6- Mérito<br />
Para a selecção, é necessário ter em conta a<br />
importância, o mérito, <strong>de</strong> cada cromossoma. Este não<br />
traduz a distância a que o cromossoma está da solução<br />
<strong>procura</strong>da, ape<strong>na</strong>s dá uma medida da diferença do<br />
mérito entre este e o <strong>de</strong>sejado (que em muitos casos é<br />
uma boa representação da distância à solução).<br />
Descodificado o cromossoma, i.e., convertendo para<br />
número <strong>de</strong>cimal, sem esquecer a posição da vírgula e<br />
substituindo esse valor <strong>na</strong> função f(x), da qual<br />
preten<strong>de</strong>mos obter a raiz, vai resultar o mérito <strong>de</strong>ste,<br />
que quanto mais próximo <strong>de</strong> zero melhor. Para<br />
reforçar a i<strong>de</strong>ia, é utilizada a função <strong>de</strong> mérito (2.5.1)<br />
que aumenta o mérito para pontos tais que f(x) se situe<br />
perto <strong>de</strong> zero e, diminui para pontos que verifiquem o<br />
contrário, como nos elucida a figura 2.9.<br />
Função <strong>de</strong> Mérito<br />
1<br />
0.8<br />
0.6<br />
0.4<br />
0.2<br />
F Merito<br />
1<br />
=<br />
2<br />
( 1 + f ( x)<br />
)<br />
0<br />
-5 -2.5 0 2.5 5<br />
(2.5.1)<br />
y=f(x)<br />
Uma função <strong>de</strong> mérito não po<strong>de</strong> ser <strong>de</strong>masiado<br />
selectiva, pois sujeita-se a que uma população convirja<br />
para um valor consi<strong>de</strong>rado bom, no entanto longe do<br />
óptimo.<br />
2.7- Aprendizagem<br />
O algoritmo é inicializado com indivíduos cujos<br />
cromossomas são gerados aleatoriamente, com<br />
comprimento fixo. Caso a raiz se localize no espaço <strong>de</strong><br />
<strong>procura</strong>, os indivíduos (pontos no plano complexo)<br />
começam a convergir para a solução pretendida.<br />
Imaginário<br />
Real<br />
Figura 2.9 -<br />
gráfico da<br />
função <strong>de</strong><br />
mérito (2.5.1)<br />
Figura 2.10 - <strong>de</strong>monstração da convergência dos<br />
pontos para a solução <strong>procura</strong>da<br />
2.7.1- Alargamento do espaço <strong>de</strong> <strong>procura</strong>/virgula<br />
flutuante<br />
Quando uma gran<strong>de</strong> maioria dos cromossomas se<br />
encontra numa vizinhança do melhor encontrado até<br />
então, o tamanho do cromossoma é aumentado para<br />
efectuar uma <strong>procura</strong> com maior precisão (ex: a<br />
<strong>procura</strong> era feita até às casas <strong>de</strong>cimais, passando para<br />
as centesimais) e assim por diante, até a solução ser<br />
encontrada.<br />
Outra situação que po<strong>de</strong> acontecer é, a raiz não se<br />
localiza no espaço <strong>de</strong> <strong>procura</strong> (ex: a raiz é -250 e o<br />
espaço <strong>de</strong> <strong>procura</strong> permite pontos que distam da<br />
origem no máximo <strong>de</strong> 100), então é acrescido o<br />
tamanho do cromossoma (nunca esquecendo a posição<br />
da vírgula), até que se verifique o facto referido atrás,<br />
a convergência dos pontos para solução.<br />
São apresentados dois exemplos: o primeiro<br />
<strong>de</strong>monstra a evolução do tamanho dos cromossomas<br />
para a <strong>procura</strong> <strong>de</strong> uma raiz (cuja precisão é da or<strong>de</strong>m<br />
x10 -4 ), ou seja, logo que se encontre o melhor<br />
indivíduo para o espaço <strong>de</strong> <strong>procura</strong> em causa, aumenta<br />
o tamanho dos cromossomas para mais uma casa<br />
<strong>de</strong>cimal; o segundo, cuja raiz é inteira, mas elevada, os<br />
cromossomas evoluem até alcançar um espaço <strong>de</strong><br />
<strong>procura</strong> que contenha a raiz.<br />
evolução do tamanho<br />
do cromossoma<br />
<strong>procura</strong> da<br />
raiz<br />
- 4.1537<br />
<strong>procura</strong> da<br />
raiz<br />
41827<br />
evolução do tamanho<br />
do cromossoma<br />
Figura 2.11 - <strong>de</strong>monstração da evolução do tamanho do<br />
cromossoma, para duas situações diferentes<br />
Se os pontos não convergirem para os extremos,<br />
conclui-se que o espaço <strong>de</strong> <strong>procura</strong> contém a raiz a<br />
<strong>de</strong>termi<strong>na</strong>r. Mesmo que a raiz se localize no extremo,<br />
o algoritmo tem tendência a passar para o novo espaço<br />
<strong>de</strong> <strong>procura</strong> mas, sendo este maior e contendo a raiz, já<br />
não há convergência para os extremos <strong>de</strong>ste espaço <strong>de</strong><br />
<strong>procura</strong>.<br />
2.7.2- Função <strong>de</strong> mérito para <strong>funções</strong> com mais do<br />
que uma raiz<br />
Outro factor importante, surge quando se preten<strong>de</strong><br />
<strong>procura</strong>r a raiz <strong>de</strong> uma função, e esta possui mais do<br />
que uma. Até encontrar uma raiz, que será consi<strong>de</strong>rada<br />
como a primeira, não há <strong>na</strong>da a acrescentar. A partir<br />
<strong>de</strong>ste momento, são pe<strong>na</strong>lizados os pontos que se<br />
aproximem das <strong>raízes</strong> já encontradas. A função <strong>de</strong><br />
mérito passa a ter uma componente que pe<strong>na</strong>lize, ou<br />
seja, diminua o mérito para os pontos <strong>de</strong>masiado<br />
próximos das <strong>raízes</strong> já encontradas. Uma forma<br />
possível será a expressão (2.7.2.1).<br />
1 N<br />
F =<br />
× ∏ ( x − raiz )<br />
Merito<br />
2<br />
i<br />
( 1 + f ( x)<br />
) i = 1<br />
(2.7.2.1)
Para elucidar esta situação, é apresentado a <strong>procura</strong><br />
das <strong>raízes</strong> do polinómio x 2 -30. Os pontos azuis<br />
<strong>de</strong>monstram a <strong>procura</strong> da raiz positiva, enquanto <strong>na</strong><br />
<strong>procura</strong> da outra, os pontos (<strong>de</strong>sta vez vermelhos, para<br />
não serem confundidos), afastam-se da raiz já<br />
encontrada.<br />
Imaginário<br />
Real<br />
Exemplo:<br />
raiz = -5.447<br />
2<br />
raiz = 5.447<br />
Figura 2.12 on<strong>de</strong> - <strong>de</strong>termi<strong>na</strong>ção f(x) = x - das 30 <strong>raízes</strong> do<br />
polinómio x 2 -30 como <strong>de</strong>monstração <strong>na</strong> <strong>procura</strong><br />
<strong>de</strong> múltiplas <strong>raízes</strong><br />
3. RESULTADOS<br />
Em bastantes experiências, esporádicamente surgia a<br />
seguinte situação: os pontos convergiam para o<br />
“melhor encontrado até então”, no entanto este<br />
localizava-se longe do “óptimo”, i.e., a raiz que<br />
procurávamos.<br />
“óptimo”<br />
Imaginário<br />
Real<br />
“melhor” encontrado<br />
até então<br />
Figura 3.1 - situação on<strong>de</strong> os pontos convergem<br />
para o “melhor encontrando até então”, no<br />
entanto longe da solução<br />
Nestas situações, a solução do problema consiste em<br />
aumentar a probabilida<strong>de</strong> <strong>de</strong> mutação, permitindo que<br />
surjam pontos mais próximos da solução e, logo que o<br />
fitness aumente (já próximo da solução), a<br />
probabilida<strong>de</strong> <strong>de</strong> mutação volte ao valor inicial.<br />
Feito um teste exaustivo ao algoritmo, <strong>procura</strong>ndo 250<br />
vezes a raiz da função f(x) x e x<br />
= + . A <strong>procura</strong> foi<br />
sempre efectuada com sucesso.<br />
Figura 3.2 - resultado <strong>de</strong> 250 <strong>procura</strong>s da raiz da<br />
função x+e x , como teste ao algoritmo<br />
Da análise aos gráficos da figura 3.2 e após 10<br />
gerações, a função f(x) apresenta valores sempre<br />
inferiores a 2, <strong>de</strong> on<strong>de</strong> resulta uma média <strong>de</strong> 22.5<br />
gerações para <strong>de</strong>termi<strong>na</strong>r a solução. Numa das<br />
experiências, foi preciso aumentar a mutação, como<br />
foi referido em 2.7, tendo sido <strong>de</strong>termi<strong>na</strong>da a raiz após<br />
53 gerações.<br />
A população é constituída por número constante <strong>de</strong><br />
indivíduos. Esta quantida<strong>de</strong> <strong>de</strong>ve ser tal que permita<br />
uma larga varieda<strong>de</strong> <strong>de</strong> cromossomas <strong>na</strong> inicialização,<br />
mas <strong>de</strong> forma a não prejudicar a convergência para a<br />
solução pretendida e, até mesmo, evitar a lentidão no<br />
algoritmo. Daí existir também uma relação entre o<br />
número <strong>de</strong> indivíduos e a probabilida<strong>de</strong> <strong>de</strong> mutação:<br />
se a população for muito reduzida a probabilida<strong>de</strong> <strong>de</strong><br />
mutação <strong>de</strong>ve ser maior do que numa população<br />
elevada, on<strong>de</strong> existe maior varieda<strong>de</strong>.<br />
Foi colocada a hipótese <strong>de</strong> as <strong>funções</strong> possuírem<br />
<strong>raízes</strong> reais ou complexas conjugadas. Se for<br />
pretendido <strong>de</strong>termi<strong>na</strong>r <strong>raízes</strong> <strong>de</strong> <strong>funções</strong>, cujo<br />
conjugado da raiz não seja também solução, basta<br />
adicio<strong>na</strong>r um bit respeitante ao si<strong>na</strong>l da parte<br />
imaginária, mantendo o resto da implementação com<br />
AG’s.<br />
São apresentados ainda dois exemplos, on<strong>de</strong> é<br />
<strong>de</strong>monstrado, a <strong>de</strong>termi<strong>na</strong>ção das <strong>raízes</strong> complexas<br />
conjugadas ou simplesmente reais: <strong>na</strong> figura 3.3 à<br />
esquerda, as <strong>raízes</strong> do polinómio x 3 +312 e à direita,<br />
x 4 +1200.<br />
Figura 3.3 - <strong>de</strong>monstração da <strong>procura</strong> <strong>de</strong> <strong>raízes</strong><br />
reais e complexas conjugadas
4. COMENTÁRIO FINAL<br />
Com polinómios, este algoritmo po<strong>de</strong> não se tor<strong>na</strong>r<br />
competitivo no que respeita à velocida<strong>de</strong> <strong>na</strong><br />
<strong>de</strong>termi<strong>na</strong>ção <strong>de</strong> <strong>raízes</strong>, quando comparado com<br />
programas já <strong>de</strong>sti<strong>na</strong>dos a este fim. No entanto não se<br />
restringe só a este tipo <strong>de</strong> <strong>funções</strong>.<br />
Seja a função f(x) não polinomial, <strong>de</strong>finida por ramos:<br />
⎧2<br />
− x , x ≤ 1<br />
⎪<br />
f( x)<br />
= ⎨sin<br />
[ 2( x − 2) ] , 1< x < 3<br />
(4.1)<br />
⎪<br />
⎩2<br />
− 2x , x ≥ 3<br />
existe <strong>de</strong>scontinuida<strong>de</strong> nos pontos: x = 1 e x = 3, on<strong>de</strong><br />
também não é diferenciável. Esta função anula-se no<br />
ponto x = 2, como se constata <strong>na</strong> figura (4.1).<br />
É comprovado o facto <strong>de</strong> o algoritmo não ser afectado<br />
pelas <strong>de</strong>scontinuida<strong>de</strong>s, tendo sida <strong>de</strong>termi<strong>na</strong>da a raiz<br />
<strong>de</strong> forma análoga às outras <strong>funções</strong>.<br />
Figura 4.1 - aspecto gráfico da função f(x)<br />
Na figura 4.2, é <strong>de</strong>monstrada a evolução da população,<br />
on<strong>de</strong> bastou 28 gerações, cada uma constituída por 30<br />
indivíduos (pontos).<br />
Figura 4.2 - evolução dos pontos no<br />
plano complexo para a <strong>de</strong>termi<strong>na</strong>ção da<br />
raiz da função f(x)<br />
Convergência<br />
para a<br />
raiz da<br />
função<br />
f(x)<br />
3 x<br />
Fi<strong>na</strong>lmente com a função f ( x) = x + e + 5 x , é<br />
comparado o algoritmo em termos <strong>de</strong> convergência<br />
com o seguinte método iterativo:<br />
x<br />
x<br />
0<br />
3<br />
atribuir<br />
+ e<br />
x<br />
+ 5x<br />
= 0<br />
3<br />
x<br />
xn<br />
+ e<br />
xn+<br />
1 = − , n = 1,<br />
2,<br />
3,...<br />
5<br />
Este método consiste em efectuar iterações sucessivas,<br />
aproveitando sempre o resultado anterior. Neste<br />
método foram necessárias 23 iterações, enquanto no<br />
algoritmo com AG’s bastavam em média, 17. O<br />
método supracitado tem vários inconvenientes: o valor<br />
inicial convém que se situe próximo da raiz, acabando<br />
muitas vezes por não convergir. Tal como este método<br />
Funções polinomiais<br />
Funções não polinomiais<br />
Funções periódicas<br />
Funções <strong>de</strong>scontínuas<br />
Funções aletórias<br />
iterativo, a gran<strong>de</strong> maioria, impõe restrições, facto<br />
<strong>de</strong>snecessário para os AG’s.<br />
Ao termi<strong>na</strong>r este artigo não podíamos <strong>de</strong>ixar <strong>de</strong> frisar<br />
que esta ca<strong>de</strong>ira <strong>de</strong> opção, <strong>Algoritmos</strong> <strong>Genéticos</strong> &<br />
Vida Artificial, abriu-nos novos horizontes <strong>na</strong><br />
resolução <strong>de</strong> problemas <strong>de</strong> engenharia. Com esta<br />
implementação, procurámos ser pedagógicos e<br />
<strong>de</strong>monstrar como po<strong>de</strong> ser aliciante a fusão entre a<br />
Matemática e a Genética.<br />
5. BIBLIOGRAFIA<br />
Funções trignométricas<br />
Funções diferenciáveis<br />
Funções logarítmicas<br />
<strong>Algoritmos</strong> <strong>Genéticos</strong><br />
[1] “Introdução aos <strong>Algoritmos</strong> <strong>Genéticos</strong> e Vida<br />
Artificial”, Rosa AC, Soares J. Pereira H, Allen Lima<br />
J e Gracias N, DEEC-IST,1995<br />
[2] “Genetic Algorithms in Search, Optimization and<br />
Machine Learning”, Goldberg D, Addison-<br />
Wesley,1989<br />
[3] “Artificial Life”, Langton C (ed), Santa Fé<br />
Institute, 1990<br />
[4] “Enciclopédia Luso - Brasileira <strong>de</strong> Cultura”,<br />
Verbo<br />
[5] “Microsoft Encarta 96 Encyclopedia”, Microsoft<br />
[6] “Matlab, User’s Gui<strong>de</strong>”<br />
[7] “Mathematica”, Enhanced Version 2.2, Wolfram<br />
Research, Inc