• Nenhum resultado encontrado

2016 Dr. Walter F. de Azevedo Jr.

N/A
N/A
Protected

Academic year: 2021

Share "2016 Dr. Walter F. de Azevedo Jr."

Copied!
48
0
0

Texto

(1)

20 16 D r. Wa lte r F . de Az ev ed o Jr . 1 000000000000000000000000000000000000000 000000000000000000000000000000000000000 000000000000111111111110001100000000000 000000000001111111111111111111000000001 000000000111111111111111111111111000000 000000000111111111111111111111111000000 000000000011111111111111111111100000000 000000001111111111111111111111111000000 000011111111111111111111111111111000000 001111111111111111111111111111110000000 111111111111111111111111111110000000000 111111111111111111111111111110000000000 000011111111111111111111111111111110000 001111111111111111111111111111111111000 011111111111111111111111111111111111000 001111111111111111111111111111111111100 000000011111111111111111111111111111110 000000001111111111111111111111111111110 000000000001111111111111111111111111110 000000000000011111111111111111111111110 000000000000000111111111111111111111000 000000000000000000000000001111000000000 000000000000000000000000000000000000000 000000000000000000000000000000000000000 000000000000000000000000000000000000000 www.python.org

(2)

As ideias da evolução têm sido usadas em problemas de otimização. Entendemos por

otimização um método computacional

(algoritmo), que procura achar as condições ótimas para um dado problema. Para evitar uma abordagem matemática, vamos ilustrar a otimização com um exemplo, chamado problema do caixeiro viajante (travelling

salesman problem). Neste problema temos

um vendedor (caixeiro viajante), que tem que passar por diversas cidades, digamos 4 cidades. O objetivo do problema é achar o menor caminho possível, que leva o caixeiro viajante a passar pelas quatro cidades, sem repetir nenhuma cidade. Sabemos as distâncias entre todos os pares de cidades, assim a solução ótima (otimizada) é aquela que leva a um menor percurso total. Este é o típico problema de otimização. C D A B dAC dAD dAB dBD dBC dCD

(3)

Apresentaremos alguns conceitos da evolução, usados como inspiração para os algoritmos evolucionários.

Vamos considerar um ambiente que pode sustentar só um número restrito de indivíduos (joaninhas nas figuras aqui), a natureza seleciona aquelas joaninhas que lutam pelos os recursos limitados de forma mais eficiente, em outras palavras, a

seleção dos indivíduos mais adaptados da população (as joaninhas mais adaptadas). Outro conceito básico da teoria de Darwin é a variação do fenótipo entre indivíduos da população. Traços do fenótipo são aqueles aspectos físicos e de comportamento de um indivíduo, que estão relacionados com sua reação ao ambiente, por exemplo a cor da joaninha. Os traços do fenótipo determinam seu ajuste (fitness) ao ambiente.

Indivíduo

População A cor aqui é um traço biológico

Conceitos básicos sobre evolução

(4)

Numa população, cada indivíduo mostra um conjunto de traços do fenótipo exclusivo, que estão continuamente sendo testados pelo ambiente. O ajuste de cada indivíduo pode ser quantificado numa análise matemática do sistema, os indivíduos com maior sucesso apresentam um ajuste mais alto, ou seja, uma função ajuste (fitness

function) mais alta.

Indivíduo

População A cor aqui é um traço biológico

(5)

População da primeira geração

População da segunda geração

Resumindo os conceitos básicos, uma população é um conjunto de indivíduos, cada um sendo considerado um “unidade

de seleção”, seu sucesso depende de o

quão bem adaptado ao ambiente eles estão. Indivíduos mais bem adaptados apresentam

probabilidade mais alta de gerar

descendentes, e, mutações ocasionais, dão origem a novos indivíduos que serão testados pelo ambiente.

Desta forma, de uma geração para outra, há variação no genótipo (conjunto de genes) da população. Cada gene codifica uma proteína, e pode ser responsável por uma característica do indivíduo, ou um conjunto de genes ser o responsável por uma característica. Na figura vemos claramente diferenças nos padrões de cores, embora alguns indivíduos tenham sobrevivido de uma geração para outra.

Conceitos básicos sobre evolução

(6)

Fitness

x y

O processo de evolução pode ser

visualizado usando uma superfície

adaptativa (adaptive surface). Nesta representação a altura z representa a função ajuste (fitness function). Aqui, quanto maior a altura na superfície, maior o ajuste do indivíduo. Os eixos x-y

representam todas as combinações

possíveis de traços biológicos. Cada ponto nesta superfície representa um indivíduo, com a combinação de traços biológicos representados pelo valores de x e y.

Os picos mais altos na figura representam os indivíduos mais bem adaptados.

(7)

Os vales indicam indivíduos menos adaptados ao ambiente. Cada pico na superfície indica um ponto ótimo local (ou

simplesmente máximo local) e o pico

mais alto o ponto de ótimo global (ou

máximo global). A partir desta analogia,

está clara as implicações da evolução em problemas de otimização, que podemos pensar que é representado pelo ponto de ótimo global. Num problema de otimização, como o do caixeiro viajante, nós podemos ter uma lista de soluções para o problema (diferentes rotas), e tentamos achar a melhor solução. O conjunto de soluções possíveis é chamado de espaço de busca, a superfície da figura ao lado é o espaço de busca.

Fitness

x y

Conceitos básicos sobre evolução

(8)

Na abordagem original dos algoritmos genéticos (genetic algorithms) (GAs) foram

usados números binários para a

representação de cromossomos [GO1989]. Faremos uma introdução (ou revisão) da matemática básica envolvida na conversão de um sistema para outro. Um número binário é um número que usa somente os algarismos “ zero ” e “ um ” , para representar uma quantidade. Por exemplo, 101 em binário representa 5 no decimal. Veremos exemplos para esclarecer o processo. Vamos converter 75 em decimal para sua representação binária. Para isto temos que dividir continuamente “75” por “ 2 ” e o resto da divisão é o último algarismo do número binário equivalente ao 75, como mostrado ao lado. O último resultado da divisão “1” é o algarismo mais significativo do número binário.

(9)

Para converter de binário (subscrito 2) de volta para decimal (subscrito 10) é ainda mais fácil. Temos que multiplicar “0” e “1” por 2 elevado à potencia que é a posição do número binário, começando na posição zero no lado direito, até o último número na sequência, como segue:

1.26 + 0.25 +0.24 + 1. 23 + 0.22 + 1.21 + 1.20

=64 + 0 + 0 + 8 + 0 + 2 + 1 = 75

Números binários

(10)

Agora que sabemos como operar com números binários, usaremos tais números nos algoritmos genéticos. Em muitos algoritmos genéticos os cromossomos dos indivíduos são representados por números binários, tal método tem o benefício de ser rápido na aplicação dos operadores genéticos, como mutação e crossover. Num número binário a mutação é simplesmente uma mudança de “0” para “1” ou vice-versa.

(11)

Binary numbers

Assim, a implementação de um algoritmo genético usa as ideias da evolução de Darwin, de forma que os indivíduos de uma dada população são submetidos aos princípios da evolução, tais como, seleção natural, recombinação (crossover) e mutação. Veja abaixo, um indivíduo será representado por uma string binária. Uma string binária é uma sequência de “0” e “1”. No algoritmo genético a string binária é convertida num número decimal, usando as operações matemática já vistas.

Números binários

011011110001

Representação do cromossomo de um indivíduo na abordagem de algoritmo genéticos

1777

String binária Decimal relacionado à string binária

(12)

Um algoritmo genético típico usa três operadores para manipular os cromossomos de uma população de indivíduos gerados aleatoriamente, são eles: seleção, crossover e mutação. Um diagrama esquemático dá uma visão geral destes passos para uma iteração (geração). A população inicial é formada de strings binárias geradas aleatoriamente. 101101011010 000010000100 000001111111 100111100111 111110011000 000001011010 000010111100 110100111100 Strings binárias (populatção incial) Operador seleção Operador crossover Operador mutação 110100111010 101101011100 100110011000 1111111100111 101101011010 100111100111 111110011000 110100111100 Strings binárias (Nova população)

(13)

O operador seleção é uma implementação computacional da “seleção natural”. É

uma tentativa de aplicar a pressão evolucionária sobre indivíduos de uma população. Indivíduos com função ajuste baixa serão descartados. Os indivíduos de mais alto valor de função ajuste apresentam maior probabilidade de sobreviver. Os sobreviventes farão parte da população, que começará a nova geração (iteração).

101101011010 000010000100 000001111111 100111100111 111110011000 000001011010 000010111100 110100111100 Strings binárias (populatção incial) Operador seleção Operador crossover Operador mutação 110100111010 101101011100 100110011000 1111111100111 101101011010 100111100111 111110011000 110100111100 Strings binárias (Nova população) Algoritmo genético www.python.org

(14)

O operador crossover (também conhecido como recombinação) faz com que os

indivíduos (strings binárias) troquem sua informação genética, de forma análoga à reprodução sexuada. Uma forma de implementar tal operador, é selecionar pares de indivíduos promovidos após a etapa de seleção (pais). Depois selecionamos aleatoriamente um local único (locus) (indicado pela barra vermelha vertical), dentro da string binária. Por último trocamos todos os dígitos à direita deste locus entre os dois pais, conforme indicado abaixo.

110100111010 101101011100 100110011000 1111111100111 110100111100 101101011010 100111100111 111110011000 Locus Locus Pais Descendentes Crossover

(15)

O operador crossover é aplicado a um par de pais, parar gerar um par de novas

strings binárias (descendentes). Um par de pais será submetido ao crossover, se e somente se, um número aleatório (Rn) for menor que a probabilidade de crossover (Pc). Rn está no intervalo [0,1], e um típico valor de Pc está no intervalo [0,4, 0,9].

110100111010 101101011100 100110011000 1111111100111 110100111100 101101011010 100111100111 111110011000 Locus Locus Pais Descendentes Crossover Gera um número aleatório (Rn) Rn<=Pc? Escolha novo par de pais Sim Não Algoritmo genético www.python.org

(16)

Para ilustrar os princípios básicos do GA, vamos resolver o seguinte problema simples, qual o número entre 0 e 4095 maximiza a função quadrática (f(x)=x2)? OK,

não precisamos de um GA para saber a resposta deste problema, tal problema é só para ilustrar o GA. Este problema foi discutido em diversos textos de GA [CO1999, GO1989]. Na implementação deste algoritmo temos strings binárias de comprimento 12 (11111111112 = 409510). Assim vamos gerar números aleatórios entre 0 e 4095, como mostrado parcialmente na tabela abaixo. Esta faixa de número é nosso espaço de busca.

String binária Decimal 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 2 0 0 0 0 0 0 0 0 0 0 1 1 3 0 0 0 0 0 0 0 0 0 1 0 0 4 0 0 0 0 0 0 0 0 0 1 0 1 5 0 0 0 0 0 0 0 0 0 1 1 0 6 0 0 0 0 0 0 0 0 0 1 1 1 7 0 0 0 0 0 0 0 0 1 0 0 0 8 ... ... 1 1 1 1 1 1 1 1 1 1 1 0 4094 1 1 1 1 1 1 1 1 1 1 1 1 4095

(17)

Neste algoritmo simples, o operador seleção escolherá a melhor metade da população, usando a função quadrática como função ajuste (fitness function). Inicialmente temos que gerar a população de forma aleatória. Tal população é formada por strings binárias (genótipo), que serão convertidas em números decimais, e então a função quadrática será calculada (fenótipo). Nós classificamos a metade dos melhores indivíduos da população e então aplicamos o operador crossover. Estes novos indivíduos gerados pelo operador crossover serão submetidos ao operador mutação. Na mutação nem todos os indivíduos sofrem mutação, só aqueles que passarem no critério de probabilidade de mutação (Pm). Na implementação do GA usaremos o critério de número de iterações (gerações), como critério de parada. Um típico conjunto de entrada para tal algoritmo é o seguinte:

Population size (tamanho da população):

Maximum number of iterations (Número máximo de iterações): Probability of crossover (probabilidade de crossover):

Length of strings (tamanho das strings):

Probability of mutation (probabilidade de mutação): Implementação de um algoritmo genético simples

(18)

Gera uma população aleatória de strings

binárias

Converte cada string binária a um número

decimal

Calcula a função ajuste para cada indivíduo

Seleciona parte da população para seguir

(operador seleção)

Seleciona pares de pais seguindo uma ordem

aleatória

Operador Crossover

Mutação dos descendentes (operador mutação)

Gera uma nova população Condição de parada satisfeita? Retorna os resultados N S Ordena aleatoriamente os melhores pais

(19)

Inicialização. Números aleatórios são gerados (genótipo), para representar cromossomos dos indivíduos numa população. Para cada cromossomo uma função ajuste será calculada. Esta função ajuste é o fenótipo de cada indivíduo.

Initialização

A

B

C

D

(20)

Operador seleção (A). Agora um dos maiores processos da evolução é aplicado. Os indivíduos gerados aleatoriamente são selecionados usando como critério a função ajuste. Esta função indica o quão adaptado um indivíduo está. Os indivíduos selecionados são chamados “pais”.

A

B

C

D

(21)

Operador crossover (B). Cada par de indivíduos selecionados (pais) podem gerar descendentes (filhos). Os pais são gerados aleatoriamente e seus cromossomos são combinados para gerar filhos. A posição de corte é chamada locus e é gerada aleatoriamente também.

Initialização

A

B

C

D

(22)

Operador mutação (C). É permitido que os descendentes sofram mutação. Em bactéria uma taxa de 2.10-3 mutações por genoma

por geração é observada. Aqui o operador mutação possibilita a diversidade genética na simulação da evolução.

A

B

C

D

(23)

Aqui os indivíduos (pais mais descendentes) tornam-se a população inicial para um novo ciclo, para manter a abordagem biológica, este ciclo é chamado de geração. Em computação um ciclo é chamado de iteração.

Initialização

A

B

C

D

(24)

Este ciclo está completo e todo o processo é repetido até que um critério de parada seja satisfeito, como por exemplo, o número de iterações (gerações) máximo.

A

B

C

D

(25)

Agora temos uma visão geral de como os algoritmos genéticos funcionam. Vamos ver alguns conceitos de como o estes são implementados. Os indivíduos nesta população podem ser representados por “0” e “1”, ou seja, uma string binária.

Initialização

A

B

C

D

(26)

Na inicialização números aleatórios são gerados para representar cada cromossomo na população. Cada linha (string binária) é um cromossomo de um indivíduo (equivalentes às joaninhas de cores diferentes). 101101011010 000010000100 000001111111 100111100111 111110011000 000001011010 000010111100 110100111100 Strings binárias

(27)

Initialização

A

Para ilustrar a evolução, vamos considerar que queremos achar o máximo da função quadrática para um inteiro entre 0 e 4095. Agora calculamos a função de ajuste (f=x2) para cada cromossomo. As

strings binárias são convertidas para decimal e então calculamos a função. Selecionamos a melhor metade da população, segundo a função ajuste. 101101011010 000010000100 000001111111 100111100111 111110011000 000001011010 000010111100 110100111100 101101011010 100111100111 111110011000 110100111100 f = x2 2906 132 127 2535 3992 90 188 3388 Converte binário para decimal 2906 2535 3992 3388

Strings binárias Decimals (x)

8444836 17424 16129 6426225 15936064 8100 35344 11478544 Decimais (x) 8444836 6426225 15936064 11478544 Strings binárias Seleção dos melhores resultados

(28)

Nesta etapa temos o operador crossover. Somente os melhores pais são submetidos ao crossover (também chamado de recombinação). Inicialmente as strings binárias são aleatoriamente posicionadas e então a posição de

crossover é escolhida. Esta posição indica onde a troca dos

cromossomos acontecerá. Os novos cromossomos agora fazem parte da população, junto como os melhores pais.

111110011000 110100111100 110100111010 101101011100 100110011000 1111111100111 100111100111 111110011000 101101011010 100111100111 111110011000 110100111100 Strings filhas Strings pais

A

B

(29)

110100111010 101101011100 100110011000 1111111100111 101101011010 100111100111 111110011000 110100111100

O operador mutação é usualmente aplicado a um bit da string, mudando-o de “0” para “1”, ou vice-versa. Na maioria das aplicações é sugerida uma probabilidade de mutação (Pm) de 0,001, ou seja, uma

mutação para cada 1000 bits. 29

Strings pais Strings filhas

Initialização

A

B

C

D

(30)

110100111010 101101011100 100110011000 1111111100111 101101011010 100111100111 111110011000 110100111100

Há diversas formas de implementarmos o operador mutação, uma forma é aplicá-lo a um bit (número “0” ou “1” na string) na posição 1/pm e gerar um número aleatório, se o número aleatório é maior que 0,5 muda o

Strings filhas

Strings pais

A

B

C

D

(31)

110100111010 101101011100 100110011000 1111111100111 101101011010 100111100111 111110011000 110100111100

O operador mutação funciona para aumentar a diversidade genética, evitando que a população fique confinada a um mínimo local. 110100111011 101101011100 100110011000 1111111100111 Strings filhas 101101011011 100111100111 111110011000 110100111100 Mutação Strings pais Strings filhas Strings pais

Initialização

A

B

C

D

(32)

O ciclo é repetido até que uma condição de parada seja satisfeita. Podemos fixar o número de iterações ou outra condição de parada baseada na variação da população, ou seja, se os indivíduos de uma geração não estão variando com relação à geração anterior, atingimos um critério possível de parada. 110100111010 101101011100 100110011000 1111111100111 Strings binárias 101101011010 100111100111 111110011001

(33)

Para o problema descrito de maximização, temos numa simulação típica de algoritmos genéticos, as seguintes entradas: população inicial de 10 indivíduos, probabilidade de mutação de 0,01, probabilidade de crossover de 0,8 e número de iterações igual à 60.

Com estes dados de entrada,

observamos uma convergência para o valor correto após poucas iterações (gerações). O gráfico ao lado mostra os resultados de tal simulação. O eixo x indica o número de iterações (gerações) e o eixo y o valor máximo da função quadrática, obtido para cada geração. Como o indivíduo com maior valor para uma string binária de 12 algarismos é 1111111111112 , cujo o valor decimal é 4095, temos uma função quadrática de 16769025, que é alcançada na iteração 18. Depois disso não há alteração.

Implementação de um algoritmo genético simples

(34)

A simulação de docking é o processo pelo qual localizamos a posição de um ligante (fármaco) no sítio de ligação de uma proteína por meio de computador. Tomando uma enzima como exemplo, mas lembrando que tal abordagem computacional não restringe-se às enzimas, temos que o ligante é um

potencial inibidor da enzima.

Recorrendo-se à analogia com o modelo “chave-fechadura” o ligante é a chave e o sítio ativo da enzima a fechadura. A simulação de docking visa achar o posicionamento do ligante no sítio ativo da enzima. Vimos que podemos usar a cristalografia de proteínas para achar a posição do ligante, o problema é que a cristalografia é cara e demorada. Assim, com a simulação de docking temos um método rápido e barato de achar a posição do ligante.

Ligante (chave)

(35)

Mesmo usando uma abordagem computacional, não estamos livres da informação cristalográfica. A estrutura cristalográfica tem que estar presente como um “padrão ouro”, ou seja, antes de usarmos a simulação de docking, temos que verificar se o nosso algoritmo de docking está funcionando

adequadamente. Neste aspecto o

trabalho em Boinformática é similar ao trabalho em bancada experimental. Quando vamos testar um novo protocolo experimental, normalmente recorremos ao um padrão, para validarmos o protocolo novo. No caso do docking, o padrão é a estrutura cristalográfica.

Assim, visamos achar a posição

cristalográfica usando o docking e

comparando com a posição

cristalográfica, como mostrado ao lado.

Simulação de docking molecular

Posição cristalográfica (branca) e posição obtida pela simulação de docking (vermelha).

(36)

A validação da simulação de docking com uma estrutura cristalográfica é o que chamamos de re-docking, onde vamos recolocar o ligante no sítio ativo e comparar com a posição cristalográfica. A comparação se faz por meio do cálculo do desvio médio quadrático, ou RMSD. Podemos pensar no RMSD como uma média das distâncias atômicas entre a posição cristalográfica ( xcristal, ycristal, zcristal) e a posição do ligante obtida pela simulação de docking ( xpose, ypose, zpose). Chamamos esta posição de pose. Abaixo temos em vermelho a posição do ligante obtida pela simulação de

docking (pose) e em branco a posição cristalográfica. Vemos que temos uma boa

concordância entre as duas posições. A equação para o cálculo do RMSD está mostrada abaixo, onde N indica que a soma é feita para todos os átomos do ligante.

 

 

N z z y y x x RMSD N j j pose j cristal j pose j cristal j pose j cristal

       1 2 , , 2 , , 2 , ,

(37)

As posições dos átomos nas moléculas são representadas por coordenadas atômicas, x, y e z. As coordenadas identificam a posição do centro do átomo no espaço, como as posições dos átomos mostradas ao lado. São estas coordenadas atômicas que são usadas para o cálculo do RMSD. Como as coordenadas atômicas estão na unidade angstrom (Å), o valor calculado para o RMSD é dado também em Å.

Simulação de docking molecular

Posição do átomo é indicada pelas coordenadas (x,y,z) www.python.org

(38)

Abaixo temos a captura da tela do programa Molegro Virtual Docker (MVD), com um inibidor de CDK2 na tela gráfica (lado direito). Ao colocarmos o cursor sobre o átomo, vemos as coordenadas atômicas na janela à esquerda (dentro do retângulo vermelho), as unidades em Å.

Coordenadas atômicas do átomo indicado.

(39)

Uma das formas de realizarmos a simulação de docking molecular, é por meio de algoritmos evolucionários. Nas simulações de docking com algoritmos evolucionários, o primeiro passo é gerar posições aleatórias para a molécula do

ligante, como no exemplo das

joaninhas. Cada joaninha representa uma posição do ligante.

Simulação de docking molecular

(40)

No passo seguinte calculamos a função ajuste, que indica a adaptação de cada indivíduo, no caso do docking a energia de ligação de cada posição da molécula. Como a energia de ligação de Gibbs, só que agora usamos as coordenadas atômicas para calcularmos a energia de

ligação. No próximo passo

selecionamos os melhores indivíduos, as posições de menor energia para a molécula. Depois aplicamos o operador

crossover, onde duas posições da

molécula (pais) geram uma posição filha, como mostrado ao lado.

Pai 1 Pai 2

crossover

(41)

Por último aplicamos a mutação, onde uma das posições filha é modificada. Terminamos um ciclo da evolução, ou iteração. O processo se repete um número finito de vezes.

Simulação de docking molecular

Filha

Filha mutada Mutação

(42)

Ao final temos a posição obtida da simulação de docking (pose) comparada com a cristalográfica, como mostrada ao lado. Consideramos que a simulação de

docking está funcionando bem, se o

RMSD da sobreposição for menor que 2,00 Å, no exemplo ao lado o RMSD foi de 1,68 Å.

O programa AutoDock é uma

implementação do algoritmo genético para docking.

(43)

Vimos um tipo de algoritmo evolucionário chamado de algoritmo genético. Há outros algoritmos que usam as ideias de evolução, mas são baseados em métodos computacionais distintos. Todos usam como inspiração a evolução, mas sua implementação computacional varia de algoritmo para algoritmo. Um dos algoritmos evolucionários de maior sucesso é o algoritmo de evolução diferencial. Na evolução diferencial temos os operadores clássicos dos algoritmos genéticos: seleção, crossover e mutação, como mostrados abaixo. Como uma implementação distinta do crossover.

Algoritmos Evolucionários (Evolução Diferencial)

Operador seleção Operador crossover Operador mutação Critério de parada satisfeito ? Mostra resultados Sim Não www.python.org

(44)

O algoritmo de evolução diferencial executa a parte inicial de geração aleatória de uma população com N cromossomos, em seguida avalia a função ajuste de cada cromossomo. A novidade está na formação cromossomos filhos. O filhos são gerados da seguinte forma, para cada cromossomo pai na população, chamado aqui cromossomo j, são escolhidos aleatoriamente três outros cromossomos pais distintos, cromossomos k, l e m. Calcula-se um novo cromossomo, chamado aqui de n, da seguinte forma:

cromossomo(n) = cromossomo(m) + peso.[cromossomo(k) - cromossomo(l)]

o peso varia entre 0 e 2.

O cromossomo novo (n) será incorporado à população se ao gerarmos um número aleatório entre 0 e 1, este for menor que a probabilidade de crossover, caso não seja, o cromossomo filho não é considerado. Um último teste é realizado no cromossomo filho n, se este apresenta função escore maior que o cromossomo pai j, caso seja, o cromossomo j é deletado e substituído pelo cromossomo n. As etapas seguintes são idênticas ao algoritmo genético original. Estamos considerando aqui que a função ajuste de maior valor é a que representa um indivíduo mais bem adaptado. Veja, este critério depende do tipo de problema a ser resolvido pelo algoritmo evolucionário.

(45)

Na implementação do algoritmo de

evolução diferencial, como nos

algoritmos genéticos, o primeiro passo é gerar indivíduos de forma aleatória, como no exemplo das joaninhas.

Algoritmos Evolucionários (Evolução Diferencial)

(46)

No passo seguinte, calculamos a função ajuste, que indica a adaptação de cada indivíduo. Depois aplicamos o operador

crossover, descrito anteriormente, onde

três joaninhas pais (joaninhas cinza, branca e amarela) geram uma joaninha filha, para cada cromossomo pai (joaninha verde), como mostrado ao lado.

Cromossomo k

Cromossomo l

Cromossomo m

cromossomo(n) = cromossomo(m) + peso.[cromossomo(k) - cromossomo(l)]

Cromossomo n

(47)

Considerando que o cromossomo n passou no teste da probabilidade de crossover, e que tem função ajuste maior que a do pai (cromossomo j), este ocupa o lugar do pai, ou seja, o cromossomo j é deletado e substituído

pelo cromossomo n. Por último,

aplicamos a mutação, onde

selecionamos aleatoriamente

cromossomos filhos. O critério para escolher se um cromossomo filho sofrerá mutação, é a probabilidade de mutação (Pm). Geramos um número aleatório entre 0 e 1, se este número for menor ou igual à probabilidade de mutação, a mutação ocorre, caso contrário não. Testamos a condição de mutação para todos os cromossomos

filhos. Terminamos um ciclo da

evolução, ou iteração. O processo se repete um número finito de vezes.

Cromossomo n

Cromossomo n mutado Mutação

Algoritmos Evolucionários (Evolução Diferencial)

Cromossomo j é deletado e substituído pelo n

(48)

-BRESSERT, Eli. SciPy and NumPy. Sebastopol: O’Reilly Media, Inc., 2013. 56 p.

-COLEY DA. An Introduction to Genetic Algorithms for Scientist and Engineers. World Scientific Publishing Co. Pte. Ltd. Toh Tuck Link, Singapore, 1999.

-DAWSON, Michael. Python Programming, for the absolute beginner. 3ed. Boston: Course Technology, 2010. 455 p.

-EIBEN AE, SMITH SJ. Introduction to Evolutionary Computing. Springer-Verlag, Berlin, 2007.

-FOGEL DB. Evolutionary Computation: Toward a New Philosophy of Machine Intelligence, IEEE Press, 1995.

-GOLDBERG DE. Genetic Algorithms in Search, Optimization, and Machine Learning. Addison Wesley Longman, Ins.,Indiana, USA, 1989.

-HETLAND, Magnus Lie. Python Algorithms. Mastering Basic Algorithms in the Python Language. Nova York: Springer Science+Business Media LLC, 2010. 316 p.

-HOLLAND JH. Adaptation in Natural and Artificial Systems. MIR Press. Cambridge MA, 1992.

-IDRIS, Ivan. NumPy 1.5. An action-packed guide dor the easy-to-use, high performance, Python based free open source NumPy mathematical library using real-world examples. Beginner’s Guide. Birmingham: Packt Publishing Ltd., 2011. 212 p.

-KIUSALAAS, Jaan. Numerical Methods in Engineering with Python. 2ed. Nova York: Cambridge University Press, 2010. 422 p.

-LANDAU, Rubin H. A First Course in Scientific Computing: Symbolic, Graphic, and Numeric Modeling Using Maple, Java, Mathematica, and Fortran90. Princeton: Princeton University Press, 2005. 481p.

-LANDAU, Rubin H., PÁEZ, Manuel José, BORDEIANU, Cristian C. A Survey of Computational Physics. Introductory Computational Physics. Princeton: Princeton University Press, 2008. 658 p.

-LUTZ, Mark. Programming Python. 4ed. Sebastopol: O’Reilly Media, Inc., 2010. 1584 p.

-MICHALEWICZ Z.Genetic Algorithms + Data Structures = Evolution Programs, Springer-Verlag, 3rd, revised and extended edition, 1999.

-MODEL, Mitchell L. Bioinformatics Programming Using Python. Sebastopol: O’Reilly Media, Inc., 2011. 1584 p. -SCHWEFEL H-P. Evolution and Optimum Seeking, Wiley Inter-Science, 1995.

-STORN R,PRICE K. Differential evolution – A simple and efficient adaptive scheme for global optimization over continuous spaces. Technical Report TR-95-012, International Computer Science Institute, Berkeley, CA, 1995.

-TOSI, Sandro. Matplotlib for Python Developers. Birmingham: Packt Publishing Ltd., 2009. 293 p.

- XAVIER MM, HECK GS, DE AVILA MB, LEVIN NM, PINTRO VO, CARVALHO NL, AZEVEDO WF Jr. SAnDReS a Computational Tool for Statistical Analysis of Docking Results and Development of Scoring Functions. Comb Chem High Throughput Screen; 2016; 19(9), 1-12.

Referências

Documentos relacionados

a) será necessário esperar mais de 400 anos para que o objeto deixe de oferecer risco. b) já se passou 50 anos do início do processo radioativo. c) após exatamente 400 anos,

Para responder a essa questão, este estudo se propôs analisar as alterações posturais, a percepção de desconforto corporal (dor), o tempo de prática e as lesões

Chefe de Departamento Centro de Ciências Exatas e Tecnologia (CCET) Departamento de Informática Aplicada Escola de Informática

01) A Chanchada é um gênero musical utilizado como trilha sonora para a produção dos filmes de comédia que reúnem elementos do circo, do teatro e do cinema estrangeiro.

· Indicações sobre cuidados médicos urgentes e tratamentos especiais necessários Não existe mais nenhuma informação relevante disponível.. 5 Medidas de combate a incêndios ·

· Utilizações identificadas relevantes da substância ou mistura e utilizações desaconselhadas Não existe mais nenhuma informação relevante disponível.. · Utilização

· Indicações sobre cuidados médicos urgentes e tratamentos especiais necessários Não existe mais nenhuma informação relevante disponível.. 5 Medidas de combate a incêndios ·

· Outras informações Não existe mais nenhuma informação relevante disponível. 10 Estabilidade