• Nenhum resultado encontrado

Diâmetro da Pizza (cm) Número de Coberturas Preço (R$) 1 15,0 2 24, ,0 1 31, ,0 0 45, ,0 2 61, ,0 0 63,00

N/A
N/A
Protected

Academic year: 2021

Share "Diâmetro da Pizza (cm) Número de Coberturas Preço (R$) 1 15,0 2 24, ,0 1 31, ,0 0 45, ,0 2 61, ,0 0 63,00"

Copied!
106
0
0

Texto

(1)

1

(2)

2 Vimos anteriormente a análise dos conjuntos treino e teste.

Índice do Dado do Conjunto Treino

Diâmetro da Pizza (cm) Número de Coberturas Preço (R$)

1 15,0 2 24,50

2 20,0 1 31,50

3 25,0 0 45,50

4 35,0 2 61,25

5 45,0 0 63,00

SciKit-Learn (Regressão Linear Múltipla)

www.python.org

Índice do Dado do Conjunto Teste

Diâmetro da Pizza (cm) Número de Coberturas Preço (R$) 1 20,0 2 38,50 2 22,5 0 29,75 3 27,5 2 52,50 4 40,0 2 63,00 5 30,0 0 38,50

(3)

Aplicamos os métodos de regressão linear múltipla que podiam ser acessados a partir de métodos de biblioteca scikit-learn. Vamos ver a função usada no pizza4.py.

3

(4)

4 O resultado é repetido abaixo para futura referência. Com destaque para os valores de R2 e o preço previsto

para uma pizza de 40 cm.

Veja que houve uma melhora no modelo, o R2 foi de 0,66 para 0,77.

SciKit-Learn (Regressão Linear Simples) (pizza3.py)

www.python.org

Type CSV file name => pizza3.csv Type CSV file name => pizza4.csv

Best fit linear regression model: 2 1.415 x + 1.385 x + 4.156

R-squared: 0.7702

Predicted price for 40 cm pizza: 63.51 Índice do Dado do Conjunto Teste Diâmetro da Pizza (cm) Número de Coberturas Preço (R$) 1 20,0 2 38,50 2 22,5 0 29,75 3 27,5 2 52,50 4 40,0 2 63,00 5 30,0 0 38,50

(5)

De uma forma geral, podemos mudar o método de regressão variando a chamada do método, após linear_model., como destacado abaixo.

5

(6)

Temos que tomar um cuidado adicional com o acesso aos pesos obtidos pelo método de regressão (model.coef_) e com o formato do array y_in, que podem variar.

6

(7)

Modificamos o código da função multiple_linear_regression() alternado as linhas indicadas abaixo. O nome programa chama-se pizza5.py. Usaremos o método Lasso.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

7

(8)

Vejam que o acesso aos pesos se faz de forma distinta daquele do método de regressão linear múltipla do programa pizza4.py.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

8

(9)

Relembrando-se que o método Lasso adiciona a somatória dos coeficientes (ωj), como mostrado na equação do RSS abaixo, ou seja, além de minimizar a diferença entre o experimental e o previsto (yi – ycalc,i) o método Lasso tende a reduzir o número de coeficientes (ωj).

O N da primeira somatória refere-se ao número de pontos no conjunto treino. O P na segunda somatória é o número de variáveis explanatórias.

Tal redução do peso de alguns coeficientes tem como objetivo gerar um modelo de regressão com um número menor de variáveis explanatórias, com a esperança de eliminarmos variáveis que tenham pouca importância para o modelo final (equação de regressão). Convém destacar, que tal abordagem pode gerar modelos com coeficientes de correlação (R2) menores, mas podem ser vantajosos do ponto de vista

de extrair dos dados somente variáveis explanatórias representativas. O coeficiente λ1 pode ser otimizado para gerar o menor RSS possível, nesta situação temos o método LassoCV.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

9

Regressão Linear Múltipla

 

N i P j j i calc i

y

y

RSS

1 1 1 2 ,

(10)

Ao rodarmos o programa pizza5.py para os dados dos arquivos pizza3.csv e pizza4.csv temos uma redução do número de variáveis explanatórias. Vemos uma piora com relação ao R2 de 0,77 obtido com o método LinearRegression.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

10

Regressão Linear Múltipla

 

N i P j j i calc i

y

y

RSS

1 1 1 2 ,

(11)

Vejamos a função multiple_linear_regression() alternado as linhas indicadas abaixo, agora mudando para o método Ridge. O nome programa chama-se pizza6.py.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

11

(12)

O método Ridge adiciona a somatória dos coeficientes (ωj2) à equação do RSS, como

mostrado abaixo, ou seja, além de minimizar a diferença entre o experimental e o previsto (yi – ycalc,i) o método Ridge tende a reduzir o número de coeficientes (ωj), como destacado para o método Lasso.

O N da primeira somatória refere-se ao número de pontos no conjunto treino. O P na segunda somatória é o número de variáveis explanatórias.

O coeficiente λ2 pode ser otimizado para gerar o menor RSS possível, nesta situação temos o método RidgeCV.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

12

Regressão Linear Múltipla

 

P j j N i i calc i

y

y

RSS

1 2 2 1 2 ,

(13)

Na aplicação do método Ridge ao conjunto de dados das pizzas (pizza3.csv e pizza4.csv) não há redução do número de variáveis explanatórias, como observado na aplicação do método Lasso ao mesmo conjunto de dados. Por outro lado, há uma melhora no valor de R2, quando comparado com o método Lasso.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

13

(14)

Vejamos a função multiple_linear_regression() alternado as linhas indicadas abaixo, agora mudando para o método ElasticNet. O nome programa chama-se pizza7.py.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

14

(15)

Relembrando-se que o método ElasticNet adiciona a somatória dos coeficientes (ωj), e dos coeficientes ao quadrado (ωj2), como mostrado na equação do RSS.

O N da primeira somatória refere-se ao número de pontos no conjunto treino. O P na segunda e terceira somatórias referem-se ao número de variáveis explanatórias.

Os coeficientes λ1 e λ2 podem ser otimizados para gerar o menor RSS possível, nesta situação temos o método ElasticNetCV.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

15

Regressão Linear Múltipla

  

P j j N i P j j i calc i

y

y

RSS

1 2 2 1 1 1 2 ,

(16)

Relembrando-se que o método ElasticNet adiciona a somatória dos coeficientes e dos coeficientes ao quadrado, como mostrado na equação do RSS.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

16

(17)

Outro método disponível na biblioteca scikit-learn é o gradiente descendente estocástico (Stochastic Gradient Descent) (SGD). Este método usa o gradiente conjugado como método de otimização. De forma resumida, o pesos (ωj) são otimizados num processo iterativo, que leva em conta a soma do gradiente da função RSS original, como indicado abaixo.

O termo α é chamado taxa de aprendizado. O valor default da biblioteca scikit-learn é alpha = 0.0001.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

17

Regressão Linear Múltipla

N i j i i calc i j j

y

y

x

1 , ,

)

(

(18)

Na multiple_linear_regression() alternamos as linhas indicadas abaixo, agora mudando para o método SGDRegressor(). O nome programa chama-se pizza8.py.

18

Regressão Linear Múltipla

def multiple_linear_regression(x_in,y_in,x_test,y_test):

"""Function to generate a linear regression model for two explanatory variable and their response variable. This function uses

sklearn.linear_model.SGDRegressor()""" # Import library

from sklearn import linear_model import numpy as np

y = []

for line in y_in: y.append(line[0])

# Create and fit the model

model = linear_model.SGDRegressor(n_iter=1e7, power_t = 0.1, warm_start = True)

model.fit(x_in, y) # Get Linear Model

alpha1 = model.coef_[0] alpha2 = model.coef_[1]

const = float(model.intercept_)

z = np.array([alpha1,alpha2,const]) p = np.poly1d(z)

r_square = model.score(x_test, y_test)

print("\nBest fit linear regression model: ",p) print('R-squared: %.4f' % r_square)

(19)

Veja que definimos como argumentos do método SGDRegressor() o número de iterações(n_iter), um fator de escala adicional (power_t) e o warm_start que define que soluções da chamada anterior do método são usadas como valores iniciais.

19

Regressão Linear Múltipla

def multiple_linear_regression(x_in,y_in,x_test,y_test):

"""Function to generate a linear regression model for two explanatory variable and their response variable. This function uses

sklearn.linear_model.SGDRegressor()""" # Import library

from sklearn import linear_model import numpy as np

y = []

for line in y_in: y.append(line[0])

# Create and fit the model

model = linear_model.SGDRegressor(n_iter=1e7, power_t = 0.1, warm_start = True)

model.fit(x_in, y) # Get Linear Model

alpha1 = model.coef_[0] alpha2 = model.coef_[1]

const = float(model.intercept_)

z = np.array([alpha1,alpha2,const]) p = np.poly1d(z)

r_square = model.score(x_test, y_test)

print("\nBest fit linear regression model: ",p) print('R-squared: %.4f' % r_square)

(20)

Com o SGDRegressor() temos os resultados mostrados abaixo. Como dependemos dos valores iniciais, os resultados podem ser distintos. Mas abaixo obtivemos o melhor resultado de todos tentados para o conjunto de dados pizza.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

20

(21)

Quando o neurônio passa para o estado de potencial de ação, temos um aumento do potencial de membrana, além do potencial limiar. Tal aumento leva o neurônio a uma situação onde há influxo de Sódio, entram em ação dois outros canais transmembranares, os canais de Sódio e Potássio, ambos dependentes do potencial elétrico da membrana. Aqui cabe uma pequena observação. Na linguagem física não usamos o termo “voltagem” para indicar potencial elétrico, contudo, a grande maioria dos textos de fisiologia em português, quando referem-se aos canais citados, usam a denominação “dependentes de voltagem”. No presente texto usaremos os termos “canais dependentes de voltagem”, para mantermos os termos usados na área de fisiologia.

Fases indicadas no gráfico acima 1 Potencial de repouso

2 Despolarização

3 Repolarização Potencial de ação 4 Hiperpolarização P o te n c ia l d e m e m b ra n a ( m V ) Tempo(ms) 1 2 3 4 Corrente elétrica de estímulo 21

(22)

As etapas canônicas do potencial de ação ocorrem devido à ação coordenada dos canais de Sódio e Potássio dependentes de voltagem. A abertura do canal de Sódio dependente de voltagem (despolarização), o fechamento do canal de Sódio e abertura do canal de Potássio (repolarização e hiperpolarização), conforme vemos no gráfico ao lado. A linha roxa indica o estímulo que é dado para o início do potencial de ação, veja que o estímulo não está em escala com o potencial indicado pela linha vermelha. O eixo horizontal é o eixo do tempo (em ms), e o eixo vertical o eixo do potencial de membrana (em mV). A linha vermelha indica a variação do potencial de membrana, durante as diferentes etapas do potencial de ação. O neurônio é considerado inicialmente em potencial de repouso.

Fases indicadas no gráfico acima 1 Potencial de repouso

2 Despolarização

3 Repolarização Potencial de ação 4 Hiperpolarização P o te n c ia l d e m e m b ra n a ( m V ) Tempo(ms) 1 2 3 4 Corrente elétrica de estímulo 22

(23)

Membrana plasmática No repouso (Er = -75mV) Portão m fechado Portão h aberto Após a despolarização (Er= 50 mV) Portão m aberto Portão h aberto 5 ms depois da despolarização (Er= -50 mV) Portão m aberto Portão h fechado A) B) C) O canal de Sódio é um tipo especializado

de canal iônico dependente de voltagem (potencial elétrico). Sua abertura está condicionada ao aumento do potencial de membrana. Quando temos um potencial de membrana, acima de um valor limite de potencial (potencial limiar), o canal abre-se, permitindo o influxo de íons de Sódio na célula. O canal permanece aberto por aproximadamente 1 milisegundo (1 ms). Tempo suficiente para elevar o potencial de membrana para dezenas mV positivos. O canal de Sódio possui dois portões distintos, portões m (de ativação) e h (de inativação). O portão h fecha-se após a despolarização e permanece fechado, não permitindo o início de um novo potencial de ação (período refratário).

Imagem disponível em:<

http://www.blackwellpublishing.com/matthews/figures.html > Acesso em: 26 de agosto de 2015.

23

(24)

Os canais de Potássio abrem-se

imediatamente após a

despolarização, o que permite a saída de carga positiva da célula, na forma de íons de Potássio. O canal de Potássio fica aberto durante a fase de repolarização, onde o potencial de membrana será trazido a valores negativos, chegando a ficar mais negativo que o potencial de repouso, durante a fase seguinte, chamada de fase de hiperpolarização. Membrana plasmática No repouso (Er= -75mV) Canal de Potássio fechado Após a despolarização (Er = 50 mV) Canal de Potássio fechado 5 ms depois da despolarização (Er= -50 mV)

Canal de Potássio aberto

A)

B)

C)

24

Imagem disponível em:<

http://www.blackwellpublishing.com/matthews/figures.html > Acesso em: 26 de agosto de 2015.

(25)

Descrição passo a passo do potencial de ação A) Os canais de Sódio e Potássio estão fechados (potencial de repouso).

B) O aumento do potencial na membrana leva o canal de Sódio, que é dependente de voltagem (potencial elétrico), a abrir-se. O que permite o rápido influxo de Sódio na célula, aumentando de forma significativa o potencial de membrana. Esta fase é chamada despolarização (ou fase ascendente).

C) Aproximadamente 1 ms depois, os canais de Sódio fecham-se e os canais de Potássio, dependentes de voltagem (potencial elétrico), abrem-se. Permitindo a saída do excesso de carga positiva da célula. Esta fase é a de repolarização (ou fase descendente).

D) A saída de grande quantidade de íons de K+, leva a célula a atingir um potencial de

membrana abaixo do potencial de repouso, esta fase é chamada de hiperpolarização.

Membrana plasmática

Canal Na+ Canal K+

25

Imagem disponível em:<

http://www.blackwellpublishing.com/matthews/figures.html > Acesso em: 26 de agosto de 2015.

(26)

A presença do portão de inativação (portão h) no canal de Sódio dependente de voltagem garante a propagação unidirecional do potencial de ação. A entrada de íons de Sódio, decorrente da abertura do canal de Sódio dependente de voltagem, leva a uma difusão de íons de Sódio nos dois sentidos no axônio. Tal presença de íons de Sódio levaria à reabertura dos canais de Sódio, caso não tivessem o portão de inativação (portão h). Tal portal permanece fechado por alguns milisegundos, caracterizando o período refratário do neurônio. Durante este período a elevação do potencial de membrana, além do potencial limiar, não causa disparo de novo potencial de ação.

Dendritos Corpo celular Núcleo Axônio Terminais axonais Direção do impulso Cone de implantação Potencial de ação 26 Canais Iônicos

(27)

Um potencial de ação é uma súbita variação no potencial de membrana, que dura poucos milisegundos (ms). Lembre-se, 1 ms = 10-3 s, ou seja, a milésima

parte do segundo. Tal perturbação é conduzida ao longo do axônio. Num neurônio de vertebrado, o potencial de ação apresenta uma ação saltatória e unidirecional, ou seja, sai do corpo do neurônio e desloca-se ao longo do axônio até o terminal axonal. A amplitude do potencial de ação é a mesma, não havendo queda de potencial ao longo do axônio, como indicado por medidas de potencial elétricos em pontos distintos do axônio durante o potencial de ação (mostrado no slide seguinte).

Dendritos Corpo celular Núcleo Axônio Terminais axonais Direção do impulso Cone de implantação Potencial de ação 27

(28)

O modelo de Hodgkin-Huxley foi proposto em 1952 para modelar o potencial de ação do axônio de sépia. Os dados sobre a corrente iônica foram obtidos a partir do uso da técnica de “voltage clamp”. Nesta técnica, o potencial elétrico da célula é mantido constante, independente das concentrações iônicas. Na situação abaixo as correntes iônicas são medidas. O diagrama esquemático abaixo ilustra a técnica. Um sistema de retroalimentação permite que o potencial seja mantido num valor de referência, onde toda vez que o potencial de membrana desvia-se um pouco do valor ajustado, uma tensão adicional, fornecida pela fonte de tensão, leva o potencial de membrana de volta ao valor ajustado.

Axônio Amperímetro Eletrodo extracelular Eletrodo intracelular Amplificador do potencial de membrana Fonte de tensão Amplificador de retroalimentação 28 Modelo de Hodgkin-Huxley

(29)

O modelo de Hodgkin-Huxley usa o conceito de condutância (g), para elaborar uma equação diferencial que mostra o potencial de membrana em função do tempo E(t). Não é objetivo do presente curso detalhar a dedução de tal modelo, iremos somente ilustrar a equação, destacando as principais características. Quando analisamos o neurônio em repouso, vimos que o mesmo tinha um comportamento elétrico similar a um circuito resistivo-capacitivo (circuito RC) simples, ilustrado abaixo.

R Circuito RC +++++ - - - E I Q d +Q -Q P o te n cia l d e m e m b ran a Tempo(ms ) Potencial de repouso Potencial limiar 0 29 Modelo de Hodgkin-Huxley

(30)

Na figura ao lado, temos o circuito elétrico equivalente da membrana celular durante o potencial de ação, chamado de modelo de Hodgkin-Huxley. No circuito temos 3 tipos de correntes iônicas, a corrente do Sódio (INa), a corrente do Potássio (IK) e uma terceira corrente chamada em inglês de “leak current” (IL), que é composta principalmente de íons de cloro. A principal contribuição do modelo Hodgkin-Huxley, foi a introdução das condutâncias na análise do comportamento elétrico do axônio. A condutância (g) é o inverso da resistência elétrica (R), conforme a equação abaixo:

A unidade de condutância é o Siemens (1 S = 1/Ohm). gNa gK gL ENa EK EL Cm IC INa IK IL I IÍon

Circuito elétrico equivalente a membrana celular, segundo o modelo de Hodgkin-Huxley.

Meio extracelular

Meio intracelular

30

(31)

Ao incluirmos as condutâncias (g), temos a possibilidade de modelar o potencial de ação, considerando o circuito equivalente ao lado. Temos as condutâncias para Sódio (gNa), Potássio (gK) e uma terceira para o termo “leak” (gL), ou seja, vazamento de íons. A corrente total (I) é a soma da corrente iônica (Iíon) e a corrente capacitiva (IC), como segue:

I = IC + Iíon .

A corrente iônica total (Iion) é dada pela soma de todas as correntes devido a cada canal (INa e IK) e a terceira corrente (IL) é constante e minoritária. Assim temos,

Iion = INa + IK + IL gNa gK gL ENa EK EL Cm IC INa IK IL I IÍon

Circuito elétrico equivalente a membrana celular, segundo o modelo de Hodgkin-Huxley.

Meio extracelular

Meio intracelular

31

(32)

Vemos no circuito equivalente a presença de 3 fontes de potencial, nominalmente Ena , EK e EL, relativas ao Sódio, Potássio e vazamento (leak). Tais potenciais podem ser determinados a partir da equação de Nernst, vista anteriormente. Assim, temos as seguintes equações para as correntes que formam a corrente iônica,

INa = gNa (V - ENa ) ,

Ik = gk (V - Ek ) e

Il = gL (V - EL )

onde V é o potencial da membrana.

Veja no circuito, que as condutâncias do Sódio (gNa) e do Potássio (gK) são variáveis e a condutância de vazamento é constante. gNa gK gL ENa EK EL Cm IC INa IK IL I IÍon

Circuito elétrico equivalente a membrana celular, segundo o modelo de Hodgkin-Huxley.

Meio extracelular

Meio intracelular

32

(33)

Usando o circuito equivalente, vemos que na fase de despolarização temos a condutância do Na+ alta, o que permitirá entrada de íons de Na+ na célula, elevando a

corrente INa e o potencial de membrana (V). Na fase repolarização, teremos aumento condutância do K+, o que levará K+ para o meio extracelular e diminuirá potencial de

membrana.

1

2 3

4

Gráfico do potencial contra o tempo (linha vermelha), gerado pelo HHSim (http://www.cs.cmu.edu/~dst/HHsim/).

gNa gK gL ENa EK EL Cm IC INa IK IL I IÍon Meio extracelular Meio intracelular 33 Modelo de Hodgkin-Huxley

(34)

O modelo de Hodgkin-Huxley é um modelo computacional, sendo considerado o primeiro modelo da abordagem de biologia de sistemas. Tal modelo descreve a resposta do axônio de sépia a diferentes estímulos elétricos. Temos a implementação do modelo computacional de Hodgkin-Huxley (modelo HH) em diversos programas. Apresentaremos aqui um que foi implementado na linguagem MatLab, chamado HHSim que está disponível no site http://www.cs.cmu.edu/~dst/HHsim/ . Esse simulador do potencial de ação possibilita testarmos diferentes tipos de estímulos elétricos aplicados ao axônio, bem como o efeito de moléculas que

interagem com os canais iônicos. Axônio pré-sináptico da sépia, colorido em rosa para

destaque.

Disponível em: http://dels-old.nas.edu/USNC-IBRO-USCRC/resources_methods_squid.shtml

Acesso em: 28 de novembro de 2016.

Diagrama esquemático de uma seção do axônio de sépia.

34

(35)

O diagrama esquemático abaixo ilustra o arranjo experimental, simulado no HHSim. Temos o cilindro representando uma seção do axônio da sépia, onde foram inseridos 2 eletrodos. Temos o eletrodo 1 responsável pelo estímulo, que será medido em unidades de corrente elétrica, nA (nanoAmpére, 10-9 A).

Eletrodo 1

Gerador de corrente elétrica (estímulo)

Seção do axônio de sépia. 35

(36)

Temos um segundo eletrodo (eletrodo 2), inserido após o eletrodo 1. O posicionamento de eletrodo 2 indica que ele está mais próximo do terminal axonal que o eletrodo 1. Assim, o estímulo gerado no eletrodo 1 pode propagar-se ao longo do axônio e ser registrado no eletrodo 2. O eletrodo 2 está ligado a um voltímetro, que registra o potencial de membrana em mV em função do tempo (eixo horizontal).

Eletrodo 1

Eletrodo 2

Gerador de corrente elétrica (estímulo) Voltímetro (eixo vertical em mV)

Seção do axônio de sépia. 36

(37)

Na situação ilustrada abaixo, temos que o voltímetro mostra a evolução temporal do potencial de membrana, num período de 20 ms, suficiente para vermos todas as fases do potencial de ação (despolarização, repolarização e hiperpolarização).

Eletrodo 1

Eletrodo 2

Gerador de corrente elétrica (estímulo) Voltímetro (eixo vertical em mV)

Seção do axônio de sépia. 37

(38)

Vamos usar o HHSim para destacar as características do potencial de ação. Na figura abaixo temos a situação de potencial de repouso. A linha vermelha indica o potencial da membrana (em repouso), a linha roxa indica o estímulo aplicado, a linha amarela a condutância do Na+ e a verde a condutância do K+ .

Gráfico do potencial contra o tempo (linha vermelha), gerado pelo HHSim (http://www.cs.cmu.edu/~dst/HHsim/). Acesso em: 28 de novembro de 2016.

38

(39)

Aplicamos um estímulo, linha roxa, temos que o potencial de membrana atinge uma valor acima do potencial limiar (linha vermelha). Em tal situação, abrem-se os canais de Na+ dependentes de voltagem. Cofirmarmos a situação, verificando a condutância

do Na+ (linha amarela), que começa a subir, indicado o influxo de Na+. O eixo

horizontal é o do tempo. Todo evento está registrado em pouco mais de 20 ms.

39

Modelo de Hodgkin-Huxley

Gráfico do potencial contra o tempo (linha vermelha), gerado pelo HHSim (http://www.cs.cmu.edu/~dst/HHsim/). Acesso em: 28 de novembro de 2016.

(40)

Comparando-se as condutâncias, vemos que a condutância do Na+ (linha amarela)

atinge o valor máximo, antes da a condutância do K+ (linha amarela). Isto deve-se ao

fato do canal de Na+ dependente de voltagem abrir-se antes do canal de K+

dependente de voltagem.

40

Modelo de Hodgkin-Huxley

Gráfico do potencial contra o tempo (linha vermelha), gerado pelo HHSim (http://www.cs.cmu.edu/~dst/HHsim/). Acesso em: 28 de novembro de 2016.

(41)

Depois de poucos milisegundos, ambos canais estão fechados, como vemos com as condutâncias retornando para o valor zero. Depois de mais alguns milisegundos, o potencial de membrana (linha vermelha) retorna ao valor de repouso.

41

Modelo de Hodgkin-Huxley

Gráfico do potencial contra o tempo (linha vermelha), gerado pelo HHSim (http://www.cs.cmu.edu/~dst/HHsim/). Acesso em: 28 de novembro de 2016.

(42)

Vimos que precisamos de um um estímulo acima do potencial limiar para termos um potencial de ação. Não precisamos realizar uma simulação computacional do processo complexo que envolve a abertura de canais iônicos ao longo do axônio para termos um aproximação computacional do funcionamento do neurônio. A abordagem computacional chamada rede neural usa uma visão simplificada do neurônio, onde a inspiração biológica restringe-se a acharmos uma função matemática que dispara, ou seja, assume valor 1 para um dado conjunto de entradas. Usando uma definição mais formal, temos que uma rede neural é um sistema computacional composto por um certo número de elementos altamente conectados que processam informação por meio de sua resposta dinâmica a um conjunto externo de entradas.

"...a computing system made up of a number of simple, highly interconnected processing elements, which process information by their dynamic state response to external inputs.

In "Neural Network Primer: Part I" by Maureen Caudill, AI Expert, Feb. 1989

42

(43)

De uma forma geral as redes neurais são organizadas em camadas, onde temos uma camada de entrada, algumas camadas intermediárias e uma cada de saída. As camadas são compostas de nós interconectados que apresentam uma função de ativação. Padrões são apresentados à rede neural na camada de entrada, que se conecta às camadas “escondidas” onde o processamento ocorre por meio de pesos atribuídos às conexões. Por último, as camadas escondidas se conectam a camada de saída onde a resposta é mostrada. Abaixo temos um diagrama esquemático de uma rede neural típica.

Fonte da imagem: http://pages.cs.wisc.edu/~bolo/shipyard/neural/local.html.

Acesso em: 27 de novembro de 2016. 43

(44)

A maioria das redes neurais apresenta alguma regra de aprendizado, que otimiza os pesos das conexões, usando-se o padrão de entrada como modelo. Podemos pensar que estamos ensinando figuras geométricas ao um aluno de ensino fundamental, onde vamos mostrando exemplos de figuras e definido seus nomes e características. As redes neurais “aprendem” por exemplo, como fazem as redes neurais biológicas.

Fonte da imagem: http://pages.cs.wisc.edu/~bolo/shipyard/neural/local.html.

Acesso em: 27 de novembro de 2016. 44

(45)

Muitas das redes neurais usadas hoje em dia têm sua fundamentação teórica baseada na regra delta. Sendo que a regra delta é normalmente usada pelas redes neurais chamadas de redes neurais de retropropagação (backpropagational neural networks). A retropropagação refere-se a propagação para trás do erro.

Fonte da imagem: http://pages.cs.wisc.edu/~bolo/shipyard/neural/local.html.

Acesso em: 27 de novembro de 2016. 45

(46)

Na regra delta, quando uma rede neural com retropropagação do erro é inicialmente apresentada com um padrão de entrada, esta faz um chute inicial com valores aleatórios para os pesos. Em seguida é feito o cálculo da diferença entre o valor esperado e aquele obtido usando-se pesos aleatórios e um ajuste aos pesos é aplicado. O diagrama esquemático abaixo ilustra a ideia principal do processo para um neurônio isolado.

Fonte da imagem: http://pages.cs.wisc.edu/~bolo/shipyard/neural/local.html.

Acesso em: 27 de novembro de 2016. 46

(47)

Resumindo, podemos ter uma simulação da rede neural mais simples que existe, que é uma rede com um neurônio, onde este processa as entradas e “aprende” a partir do padrão. Este processo de aprendizado é traduzido na otimização dos pesos que são treinados a partir do conjunto treino. Abaixo temos o pseudo código para esta rede neural.

47

(48)

Para o algoritmo anterior usaremos como padrão de aprendizado uma tabela verdade com as seguintes entradas e saídas. Depois de treinada, nossa rede neural será submetida a nova situação mostrada abaixo.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

48

(49)

A equação para o treinamento do neurônio é baseada na função sigmóide, mostrada abaixo.

Se usarmos o inMathematica001.py para gerarmos o gráfico da função acima com o comando Plot[1/(1+Exp[-]),{x,-6,6}] teremos o gráfico abaixo.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

49

(50)

Na equação abaixo o x foi substituído pelo peso que leva em conta o peso de cada entrada, como mostrado abaixo.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

50

(51)

Como os pesos inicialmente recebem valores aleatórios, temos que corrigir os pesos de forma iterativa, no nosso exemplo usaremos a seguinte equação:

Onde o error é a diferença entre o valor previsto e o inserido como entrada no conjunto treino. O SigmoidCurveGradient é a derivada da função sigmoide, de forma que num processo iterativo espera-se que os novos pesos levem a uma previsão previsão próxima à real.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

51

(52)

Como os pesos são inicialmente recebem valores aleatórios, temos que corrigir os pesos de forma iterativa, no nosso exemplo usaremos a seguinte equação:

Onde o error é a diferença entre o valor previsto e o inserido como entrada no conjunto treino. A variável output traz o valor da saída na iteração anterior, com os pesos antigos.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

52

(53)

Vejamos o código da nossa rede neural. Começaremos com a função main(). Inicialmente chamamos a função gen_training_set() que gera o nosso conjunto treino, ou seja, o padrão que será usado para treinar a rede neural. Na função seguinte (show_training_set()) é mostrado o conjunto treino na tela. em seguida fazemos a simulação da rede neural com a função neuron001() que retorna um array com os pesos devidamente otimizados para nosso conjunto treino. Por último a função show_prediction() faz a previsão para o array [1,0,0] como entrada.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

53

(54)

A função gen_training_set() gera os arrays para as entradas e saídas do conjunto treino. Ambos arrays são retornados para onde a função foi evocada.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

54

(55)

A função show_training_set() simplesmente é um print dos arrays gerados como conjunto treino.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

55

(56)

A função neuron01() implementa a rede neural. Inicialmente estabelecemos uma semente aleatória. Esta etapa é importante pois em problemas masi complexos podemos ter resultados distintos com semenetes aleatórias distintas, assim é importante registramos com qual semente aleatória estamos trabalhando.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

56

(57)

Em seguida geramos um array aleatório com três números que serão os pesos iniciais. O loop em destaque faz a atualização do array peso (weight) em cada iteração do loop. No loop é calculada a função sigmoidal com os pesos iniciais e o resultado atribuído à variável output. O método np.dot() faz o produto escalar entre os elementos do array transposto (.T) com o array (t_out - output)*output(1-output). Que é a implementação da equação vista anteriormente para o ajuste do peso.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

57

(58)

Por último a função show_prediction() mostra previsão para o array considerado. A função faz uso dos pesos otimizados para o conjunto treino obtidos na função neuron01() e usa a função sigmoidal para o cálculo do resultado.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

58

(59)

Abaixo temos o resultado da simulação.

Fonte da imagem: https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1#.m56adhcdw

Acesso em: 27 de novembro de 2016.

59 Redes Neurais <mauricio.boff@acad.pucrs.br> | sex 11/11, 10:54

(60)

60 Um aspecto interessante que une a biologia e a computação de uma forma sinergética é o uso de algoritmos biologicamente inspirados. A principal ideia dos algoritmos bio-inspirados é usar a natureza como fonte de inspiração para propor novos algoritmos. Entre os algoritmos bio-inspirados de maior sucesso, temos os algoritmos evolucionários, onde as ideais da evolução são usadas como inspiração para propormos novos algoritmos.

(61)

As ideias da evolução têm sido usadas em otimização de soluções de problemas específicos. A otimização é um método computacional (algoritmo), que procura achar as condições ótimas para um dado problema. Para evitar uma abordagem mais 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, dAB por exemplo, 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 61 Otimização

(62)

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 natural 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. 62

Indivíduo

População

A cor das joaninha é um traço do fenótipo

(63)

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

Veja que estamos modelando nosso sistema biológico, para capturar os aspectos essenciais do sistema, que possibilitarão o seu uso para resolver problemas de otimização. Colocando de outra forma, estamos simplificando o sistema biológico, para extrairmos suas características mais fundamentais, como a seleção natural.

63

Conceitos Básicos sobre Evolução

Indivíduo

População

A cor das joaninha é um traço do fenótipo

Referência:

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

(64)

População inicial da primeira geração

População inicial da segunda geração

Resumindo os conceitos básicos, uma população é um conjunto de indivíduos, cada um sendo considerado uma “ 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. Assim, 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 sem alterações.

64

(65)

O processo de evolução pode ser visualizado usando uma superfície adaptativa (adaptive surface). No gráfico ao lado, a altura z representa a função ajuste (fitness function), também chamada de função escore (scoring function). Aqui, quanto maior a altura na superfície, melhor o ajuste do indivíduo. Os eixos x-y representam todas as combinações possíveis de dois traços do fenótipo. Cada ponto na superfície representa um indivíduo, com a combinação de traços do fenótipo representados pelo valores de x e y. Para exemplificar, o eixo x pode representar a capacidade de mimetismo (camuflagem) das joaninhas, e o eixo y a capacidade de escalar obstáculos. A combinação de x e y dará a função ajuste. Os picos mais altos na figura representam os indivíduos mais bem adaptados. 65

Conceitos Básicos sobre Evolução

Ajuste

x y

(66)

Os vales indicam indivíduos menos adaptados ao ambiente. Cada pico na superfície indica um ponto ótimo local (ou simplesmente máximo local). 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 adaptativa, da figura ao lado, é uma representação gráfica do espaço de busca. Ajuste

x y

66

Conceitos Básicos sobre Evolução

Máximo local

Máximo global

(67)

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, cruzamento (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áticas já vistas.

67

011011110001

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

1777

String binária Decimal relacionado à string binária

(68)

Um algoritmo genético típico usa três operadores para manipular 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, os números indicados à esquerda.

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 111111110011 1 101101011010 100111100111 111110011000 110100111100 Strings binárias (Nova população) 68 Algoritmo Genético

(69)

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 (ou função escore) 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). 69 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 111111110011 1 101101011010 100111100111 111110011000 110100111100 Strings binárias (Nova população) Algoritmo Genético

(70)

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 70 Algoritmo Genético

(71)

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 operador 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 71 Algoritmo Genético

(72)

Para ilustrar os princípios básicos do algoritmo genético, 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 algoritmo genético para saber a resposta deste

problema, tal problema é só para ilustrar o algoritmo. 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úmeros é 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 72 Algoritmo Genético

(73)

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), também chamados de cromossomos no jargão dos algoritmos genéticos. As strings binárias que serão convertidas em números decimais, e então a função quadrática será calculada. A função quadrática é nossa função ajuste. 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 serão submetidos a este operador, só aqueles que passarem no critério de probabilidade de mutação (Pm). Na implementação do algoritmo genético, 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): 73

(74)

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 Critério de parada satisfeito? Retorna os resultados Não Sim Ordena aleatoriamente os melhores pais 74

(75)

Inicialização. Números aleatórios são gerados (genótipo), para representar indivíduos numa população. Em algoritmos genéticos tais números são chamados cromossomos. Para cada cromossomo uma função ajuste (função escore) será calculada.

75

Initialização

A

B

C

D

(76)

Operador seleção (A). Agora um dos maiores processos da evolução é aplicado. Os cromossomos 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”. 76

Initialização

A

B

C

D

(77)

Operador crossover (B). Os 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, sendo gerada aleatoriamente também. . 77

Initialização

A

B

C

D

(78)

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. 78

Initialização

A

B

C

D

(79)

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

Initialização

A

B

C

D

(80)

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 foi atingido.

80

Initialização

A

B

C

D

(81)

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

Initialização

A

B

C

D

(82)

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 82

Initialização

(83)

Initialização

A

Seleção. 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 (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 83 Função ajuste ou escore

(84)

Nesta etapa temos o operador crossover. Somente os melhores pais são submetidos ao crossover, (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.

10110101101 0 10011110011 1 11111001100 0 11010011110 0 Strings binárias 110100111010 101101011100 100110011000 1111111100111 110100111100 101101011010 100111100111 111110011000 101101011010 100111100111 111110011000 110100111100 Strings filhas

Strings de posição aleatória

84

Strings pais

Initialização

(85)

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. 85

Strings pais Strings filhas

Initialização

A

B

C

D

(86)

110100111010 101101011100 100110011000 1111111100111 101101011010 100111100111 111110011000 110100111100

Há diversas formas de implementar 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 bit, caso contrário deixa como está. 86 Strings filhas Strings pais

Initialização

A

B

C

D

(87)

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áximo local.

110100111011 101101011100 100110011000 1111111100111 Strings filhas 101101011011 100111100111 111110011000 110100111100 Mutação 87 Strings pais Strings filhas Strings pais

Initialização

A

B

C

D

(88)

Depois da aplicação do operador mutação, os indivíduos tornam-se a população de uma nova iteração.

O ciclo é repetido até que um critério de parada seja satisfeito. Podemos fixar o número de iterações, ou outro critério de parada. Um outro critério de parada possível, está baseado 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. Quando não há variação durante um certo número de gerações, não faz sentido continuar a simulação, pois não iremos gerar indivíduos que gerem melhores funções ajuste, assim podemos parar a simulação.

110100111010 101101011100 100110011000 1111111100111 Strings binárias 101101011010 100111100111 111110011001 110100111100 88

(89)

Para o problema descrito de maximização, temos numa simulação típica de algoritmos genéticos, as seguintes entradas: número de indivíduos da 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 (função escore ou ajuste), 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, dizemos que houve convergência.

89

(90)

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.

90

Algoritmos Evolucionários (Evolução Diferencial)

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

(91)

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.

91

(92)

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.

92

(93)

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.

93

Cromossomo k

Cromossomo l

Cromossomo m

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

Algoritmos Evolucionários (Evolução Diferencial)

Cromossomo n

Referências

Documentos relacionados

Tabela 5.19: A análise de convergência na direção radial para o caso da cápsula com tampas de alumínio e parede de teflon, preenchida com

A Fase II envolve um número maior de participantes (algumas centenas) e prolonga a análise da segurança iniciada na Fase I ao mesmo tempo que analisa de forma mais robusta a

1) Falta de apoio, orientação e assessoria técnica do órgão estadual de Defesa Civil (Coordenadoria Estadual de Defesa Civil) e de outras instituições do

Procedimento concursal para constituição de reserva de recrutamento de pessoal docente do ensino português no estrangeiro, para o cargo de professor, compreendendo os níveis

O Banco Alfa de Investimento S.A., instituição líder do Conglomerado Prudencial Alfa elaborou um conjunto de demonstrações contábeis para fins gerais referentes ao semes- tre findo

No Quadro 4 demonstra-se os insumos de produção variáveis e os custos e despesas fixos para a fabricação do produto, de acordo com o preço- meta de venda, após a utilização da

Dessa forma, os objetivos são apresentar e discutir a aceleração como alternativa no processo educacional de alunos com altas habilidades ou superdotação, apresentando um caso

De um modo geral, foram explicadas que as medidas que devem ser tomadas para compensar as interrupções são: transferir os doentes para outro acelerador com características