• Nenhum resultado encontrado

4.2 An´ alise de Algoritmos de Redes Fundamentais

4.2.3 Rede de Bianconi-Barab´ asi

A grande diferen¸ca entre os modelos de Barab´asi-Albert e Bianconi-Barab´asi ´e o parˆametro η atribu´ıdo a cada v´ertice da rede e que altera significativamente o c´alculo de suas probabilidades. Vejamos como isso se reflete na constru¸c˜ao de uma rede do ponto de vista computacional.

4.2.3.1 C´odigo Padr˜ao

A partir do c´odigo padr˜ao do modelo de Barab´asi-Albert, devemos inicialmente incluir tanto uma nova lista (lista eta) quanto um la¸co que atribua o parˆametro de qualidade de cada v´ertice representado por eta. O c´odigo abaixo faz parte da etapa de inicializa¸c˜ao das vari´aveis. ite_n = 0 while ite_n < N: eta = random() lista_eta[ite_n] = eta ite_n = ite_n + 1

De acordo com o passo (1) do algoritmo da se¸c˜ao (3.2) o parˆametro η deve ser determinado aleatoriamente, por isso novamente foi utilizado a fun¸c˜ao random explicitamente. Observe que

os valores desse parˆametro para todos os v´ertices da rede s˜ao guardadas em lista eta. Em seguida, deve-se construir a condi¸c˜ao inicial da rede, que ´e semelhante `aquela apresentada para o modelo de Barab´asi-Albert.

O c´odigo padr˜ao para a rede de Bianconi tamb´em utiliza as fun¸c˜oes calcula prob e encontra v2 relatadas na se¸c˜ao anterior. Por´em h´a uma diferen¸ca na fun¸c˜ao que calcula a probabilidade de cada v´ertice, pois agora esta deve incluir em seus c´alculos o parˆametro η, de acordo com a equa¸c˜ao (3.13). A seguir ´e listado o c´odigo referente a esta fun¸c˜ao.

def calcula_prob(ite_n): soma_prob = 0

ite_s = 0

while ite_s < ite_n:

s = lista_k[ite_s]*lista_eta[ite_s] lista_k_eta[ite_s] = s

ite_s = ite_s + 1

soma_lista_k_eta = float(sum(lista_k_eta)) ite_p = 0

while ite_p < ite_n:

prob = lista_k_eta[ite_p]/soma_lista_k_eta lista_todas_prob[ite_p] = prob

soma_prob = soma_prob + prob

lista_soma_prob[ite_p] = soma_prob ite_p = ite_p + 1

Note que a fun¸c˜ao acima ´e divida em dois la¸cos. O primeiro realiza o somat´orio do produto ηk para todos os v´ertices e o segundo ´e respons´avel por concluir o c´alculo da probabilidade de cada v´ertice. Veja tamb´em que foi necess´ario a cria¸c˜ao de uma nova lista (lista k eta) para armazenar a quantidade ηk de cada v´ertice.

Como o formato deste c´odigo ´e derivado do c´odigo padr˜ao para o modelo de Barab´asi e Albert, ele herda a desvantagem do desperd´ıcio de tempo na execu¸c˜ao do c´alculo de proba- bilidades. E isso ainda ´e agravado devido ao aumento do n´umero de la¸cos necess´arios. Quanto maior o n´umero de v´ertices na rede, mais facilmente se poder´a verificar este excesso de tempo na execu¸c˜ao deste algoritmo.

4.2.3.2 C´odigo R´apido

A partir da ideia do c´odigo r´apido do modelo de Barab´asi e Albert, buscamos encontrar tamb´em uma forma de modificarmos o c´alculo das probabilidades do c´odigo padr˜ao do modelo de Bianconi-Barab´asi, com o objetivo de tornarmos mais eficientes as simula¸c˜oes para esse modelo. Vale ressaltarmos que at´e o presente momento, n˜ao foi encontrado na literatura nenhuma implementa¸c˜ao desse modelo igual a que ser´a apresentada, ou seja, uma vers˜ao r´apida do modelo de Bianconi-Barab´asi.

A maneira encontrada baseia-se no c´alculo das probabilidades de eventos independen- tes. Dizemos que dois eventos s˜ao independentes quando a probabilidade de ocorrer um deles n˜ao depende do fato do outro ocorrer ou n˜ao. Al´em disso, a probabilidade de que os dois eventos ocorram ao mesmo tempo ´e obtida pelo produto das probabilidades de ocorrˆencia de ambos individualmente. Esse produto ´e observado na defini¸c˜ao da probabilidade de conex˜ao do modelo de Bianconi (equa¸c˜ao 3.13). Neste caso, os eventos a que nos referimos s˜ao: (i) o sorteio aleat´orio de um v´ertice dentre os j´a existentes na rede, utilizando o mesmo m´etodo do c´odigo r´apido para o modelo de Barab´asi-Albert; (ii) o sorteio da probabilidade referente ao parˆametro η. O funcionamento deste algoritmo ´e baseado na independˆencia desses dois sor- teios. A seguir apresentaremos o la¸co principal deste c´odigo, onde estes sorteios s˜ao realizados:

ite_n = M+1 while ite_n < N: v1 = ite_n ite_m = 0 while ite_m < M: v2 = lista_todas_conex[int(conta_conex*random())] while v2 in lista_adj[v1]: v2 = lista_todas_conex[int(conta_conex*random())] test_eta = random() if lista_eta[v2] > test_eta: lista_adj[v1].append(v2) lista_adj[v2].append(v1) lista_k[v1] = lista_k[v1] + 1 lista_k[v2] = lista_k[v2] + 1 lista_todas_conex[conta_conex] = v1 conta_conex = conta_conex + 1 lista_todas_conex[conta_conex] = v2 conta_conex = conta_conex + 1 ite_m = ite_m + 1 ite_n = ite_n + 1

Observe ent˜ao que inicialmente utilizamos o m´etodo do c´odigo r´apido de Barab´asi-Albert para escolher um v´ertice j´a presente na rede para uma poss´ıvel conex˜ao com o v´ertice que est´a entrando nela (evento i). Em seguida, realizamos um sorteio de um n´umero aleat´orio que ´e comparado ao valor de η do s´ıtio candidato `a conex˜ao (evento ii). Se o n´umero sorteado (test eta) for menor ou igual ao η, o v´ertice sorteado no evento (i) realizar´a a conex˜ao. Quando o n´umero sorteado ´e maior do que o η do v´ertice que est´a sendo avaliado, realiza-se o sorteio de um novo v´ertice e de um novo n´umero para compara¸c˜ao com η. Portanto, para que um v´ertice da rede realize a conex˜ao com o v´ertice que est´a entrando, esses dois eventos devem ser satisfeitos. Isto ´e, o v´ertice deve ser sorteado e (ao mesmo tempo) ter o valor do η se encaixando dentro da probabilidade sorteada no segundo evento.

Os demais c´odigos apresentados ao longo deste trabalho derivam dos c´odigos discutidos nesta se¸c˜ao. Por isso, consideramos estes como c´odigos fundamentais para os estudo de redes. Deixamos a cargo do leitor interessado as demais implementa¸c˜oes.

Cap´ıtulo 5

Redes sem Escala T´ıpica:

Modelos Alternativos

Dada a diversidade de sistemas reais que apresentam distribui¸c˜ao de conectividade em lei de potˆencia, os estudos sobre quais mecanismos s˜ao respons´aveis por gerar redes sem escala t´ıpica tˆem ganhado grande destaque nos ´ultimos anos. Na maioria das redes reais, novos v´ertices preferem realizar liga¸c˜oes com os v´ertices mais conectados, processo que foi chamado de liga¸c˜ao preferencial e que retrata como a probabilidade de um certo v´ertice receber novas liga¸c˜oes aumenta com a sua conectividade. Acredita-se que a primeira inclus˜ao do mecanismo de liga¸c˜ao preferencial para se obter distribui¸c˜oes de conectividade em lei de potˆencia foi realizada por Yule em 1925 [38], buscando explicar a distribui¸c˜ao encontrada no estudo do n´umero de esp´ecies por genˆero de plantas com flores, processo que ficou conhecido como “Processo de Yule”. Outros modelos incluindo este mecanismo foram propostos nos anos seguintes por Simon [39], Price [40], entre outros. Entretanto, a denomina¸c˜ao liga¸c˜ao preferencial e a atual popularidade dos modelos de redes sem t´ıpica decorrem do trabalho de Barab´asi e Albert (se¸c˜ao 3.1), os quais redescobriram o mecanismo de forma independente e propuseram um modelo capaz de gerar redes com distribui¸c˜ao de conectividade em lei de potˆencia a partir de um algoritmo simples, com o objetivo inicial de entender as distribui¸c˜oes de conectividade da Web [17].

Como consequˆencia do modelo de Barab´asi e Albert, foram surgindo outros modelos de redes, considerando diferentes tipos de fatores inclu´ıdos no mecanismo de liga¸c˜ao preferencial e que continuassem gerando distribui¸c˜oes de conectividade em lei de potˆencia. Observamos isto no cap´ıtulo 3, onde todos os modelos continham o mecanismo de liga¸c˜ao preferencial. Modelos que utilizam este mecanismo reproduzem satisfatoriamente o aparecimento das dis- tribui¸c˜oes que seguem lei de potˆencia em redes reais. Entretanto, a liga¸c˜ao preferencial n˜ao ´e o ´unico mecanismo atrav´es do qual uma rede pode crescer e gerar este tipo de distribui¸c˜ao de conectividade. Por isso, ´e importante estudarmos outros modelos cujas regras de conex˜ao s˜ao baseadas em mecanismos diferentes, aparentemente sem nenhum v´ınculo com a liga¸c˜ao preferencial, por´em convergindo para um comportamento semelhante ao do modelo de Ba-

rab´asi e Albert. Dois desses modelos, com distribui¸c˜ao de conectividade em lei de potˆencia, ser˜ao discutidos neste cap´ıtulo: o modelo de c´opia de v´ertices e o modelo de transforma¸c˜ao de redes Poissonianas. O primeiro ´e um modelo amplamente conhecido, o qual foi elaborado para modelar o crescimento da Web. Enquanto isso, o segundo ´e um modelo em desenvolvimento, proposto para verificar se caracter´ısticas de redes livres de escala poderiam ser reproduzidas em redes constru´ıdas sem a regra de crescimento.

5.1 Modelo de C´opia de V´ertices

O mecanismo de c´opia de v´ertices foi proposto originalmente por Kleinberg em 1999, ao estudar a Web [41], seguido por Vazquez, ao estudar redes biol´ogicas [42]. A relevˆancia deste mecanismo est´a em sua importˆancia para sistemas reais. A seguir, listamos trˆes exemplos. (i) Em redes sociais, quanto mais pessoas vocˆe conhece, maior ´e a sua chance de ser introduzido em novos c´ırculos de relacionamentos. Isso ocorre porque temos a tendˆencia de “copiar” os amigos de nossos amigos. Por outro lado, se n˜ao tivermos amigos, torna-se mais dif´ıcil fazermos novos amigos. (ii) Em redes de itera¸c˜oes de prote´ınas, a duplica¸c˜ao gen´etica, respons´avel pelo surgimento de novos genes em uma c´elula, pode ser mapeada pelo modelo de c´opia, explicando a natureza livre de escala presente nessas redes [42, 43]. (iii) Na Web, os autores de uma nova p´agina tendem a se conectar com links de outras p´aginas que possuam t´opicos relacionados [41, 45, 46]. Devido `a observa¸c˜ao deste tipo de comportamento em v´arios sistemas reais, nesta se¸c˜ao trataremos de um modelo baseado neste mecanismo e investigaremos suas caracter´ısticas.

A ideia b´asica deste mecanismo pode ser explicada fazendo alus˜ao `a rede de cita¸c˜oes cient´ıficas. Antes disso, vamos analisar este tipo de rede considerando explicitamente1o meca- nismo de liga¸c˜ao preferencial. Para este caso, ´e f´acil prever que ao lermos um artigo cient´ıfico, iremos encontrar em suas referˆencias artigos citados mais frequentemente na academia do que artigos menos citados. Segundo o mecanismo de liga¸c˜ao preferencial, isso nos conduziria a ter uma tendˆencia maior de citar os artigos mais citados ao produzirmos artigos sobre temas semelhantes. Isto ´e, considerando este mecanismo, os pesquisadores seriam levados a “copiar” cita¸c˜oes das referˆencias de artigos que leram.

Vamos analisar agora, este mesmo tipo de rede considerando explicitamente o me- canismo de c´opia de v´ertices. Note que inicialmente podemos estimar que os pesquisadores podem copiar todas as referˆencias de um artigo para usar como referˆencias do seu pr´oprio artigo, dado que o t´opico em estudo seja o mesmo. Isto seria ent˜ao como adicionar um novo

1Estamos usando o termo “explicitamente” para deixar claro que estamos olhando para o mecanismo de

liga¸c˜ao preferencial, embora estejamos buscando implicitamente enxergar o mecanismo de c´opia de v´ertices. De fato, a ideia fundamental por tr´as da c´opia de v´ertices est´a impl´ıcita na liga¸c˜ao preferencial, enquanto que a ideia b´asica da liga¸c˜ao preferencial est´a impl´ıcita no mecanismo de c´opia de v´ertices. Em outras palavras: quando um v´ertices escolhe ligar-se com um polo, ele est´a apenas copiando a escolha mais comum; enquanto que quando um v´ertice decide que a lista de seus vizinhos seja uma c´opia da lista de vizinhos de outro, ele est´a implicitamente tentando se ligar ao mais conectado.

v´ertice a uma rede, no qual os seus vizinhos fossem completamente copiados de um ´unico v´ertice j´a existente na rede. Esta situa¸c˜ao apresenta um problema, pois apenas os artigos que j´a est˜ao nas referˆencias dos artigos lidos ser˜ao citados, o que faria com que nenhum novo artigo fosse algum dia citado. Uma solu¸c˜ao para esse problema seria supormos que apenas uma parte das referˆencias de um ´unico artigo seja realmente copiada e que as outras cita¸c˜oes sejam de outros artigos que podem ser trabalhos nunca antes citados ou que podem j´a ter sido citados em outros artigos. O importante ´e n˜ao copiar todas as referˆencias de um ´unico artigo. Isto seria como se ao adicionarmos um novo v´ertice na rede, este copiasse somente uma fra¸c˜ao de vizinhos de um v´ertice j´a existente na rede e que seus outros vizinhos fossem escolhidos dentre os v´ertices restantes da rede. Dado esta ideia inicial, vamos conhecer as defini¸c˜oes exatas deste mecanismo.

O mecanismo de c´opia de v´ertices ocorre de tal forma que ao se introduzir um novo v´ertice em uma rede, este herda uma parte dos vizinhos de um v´ertice j´a presente nela. Isso ´e quase como se apenas duplic´assemos um v´ertice que j´a est´a na rede. Por´em n˜ao pode ser uma c´opia perfeita, apenas uma fra¸c˜ao γ dos vizinhos que o novo v´ertice pode ter deve ser copiada. O algoritmo para a constru¸c˜ao de uma rede utilizando o modelo de c´opia de v´ertices ´e o seguinte:

(1) Inicia-se a rede com N0 v´ertices conectados entre si.

(2) A cada passo de tempo ´e adicionado um novo v´ertice, o qual possui um n´umero m´ınimo M0

de liga¸c˜oes que deve realizar. Ao adicionar este novo v´ertice, ´e selecionado aleatoriamente um v´ertice que j´a est´a na rede e a partir dele sorteia-se aleatoriamente a fra¸c˜ao γ dos vizinhos iniciais do novo v´ertice.

(3) A fra¸c˜ao restante, ou seja, (1 − γ) dos seus vizinhos para serem copiados como vizinhos de cada novo v´ertice ´e preenchida ao se escolher aleatoriamente a quantidade necess´aria de v´ertices entre os que j´a fazem parte da rede e ainda n˜ao est˜ao ligados a ele.

(4) Repete-se os passos (2) e (3) at´e o tamanho desejado do sistema.

Esta fra¸c˜ao γ varia entre 0 e 1. Para os casos limites, ´e f´acil perceber que se fizermos γ = 0, n˜ao existir´a o sorteio da fra¸c˜ao γ dos vizinhos iniciais do novo v´ertice, ou seja, nenhum vizinho do v´ertice escolhido para c´opia se tornar´a vizinho do novo v´ertice. Ent˜ao, todos os vizinhos do novo v´ertice ser˜ao escolhidos aleatoriamente dentro da rede j´a existente at´e completar o n´umero m´ınimo de vizinhos iniciais M0. Teremos, portanto, uma rede aleat´oria

cuja distribui¸c˜ao de conectividade tende a uma exponecial. J´a quando fazemos γ = 1, todos os vizinhos do novo v´ertice ser˜ao herdados do v´ertice antigo, ou seja, neste caso sempre que adicionarmos um novo v´ertice e escolhermos um v´ertice aleatoriamente na rede para que sua fra¸c˜ao γ seja copiada, podemos dizer que estaremos “duplicando” o mesmo. Com isso, todos os v´ertices adicionados ter˜ao sempre conjuntos de vizinhos idˆenticos e a distribui¸c˜ao

de conectividade ter´a basicamente dois valores: M0 para a grande maioria dos v´ertices e

aproximadamente N para a minoria que j´a estava conectada aos v´ertices iniciais.

Note que, embora o processo de constru¸c˜ao da rede mencione explicitamente apenas escolhas de car´ater aleat´orio na descri¸c˜ao dos passos do algoritmo, o mecanismo de c´opia de v´ertices tamb´em privilegia os v´ertices mais conectados, pois eles possuem maior probabilidade de que um de seus vizinhos seja escolhido para c´opia. Como consequˆencia ocorrer´a o aumento de sua conectividade, resultando em uma maior probabilidade de adquirir novas conex˜oes (ver figura 5.1). Ou seja, este mecanismo tamb´em tender´a a produzir o efeito “ricos ficam cada vez mais ricos”, como o mecanismo de liga¸c˜ao preferencial.

Figura 5.1: Ilustra¸c˜ao do mecanismo de c´opia de v´ertices. Ao se introduzir um novo v´ertice `a rede, este escolhe um v´ertice aleatoriamente (na cor vermelha) que j´a existe na rede para copiar uma fra¸c˜ao (50% para o caso representado) dos seus vizinhos.

C´alculos anal´ıticos mostram que a distribui¸c˜ao de conectividade P (k) para redes constru´ıdas atrav´es do mecanismo de c´opia de v´ertices, segue uma lei de potˆencia do tipo P (k) ∼ k1+1/γ. Pode-se explicar este resultado, analisando a probabilidade de que um v´ertice qualquer da rede, o qual rotularemos como v´ertice i, receba uma nova conex˜ao como resultado da adi¸c˜ao de um novo v´ertice. Perceba que, considerando este mecanismo, a conectividade de um v´ertice qualquer da rede pode aumentar de duas maneiras: (i) quando ele ´e vizinho do v´ertice do qual ser´a copiada uma parcela dos vizinhos e ele faz parte dessa parcela; (ii) quando ele n˜ao ´e vizinho do v´ertice do qual ser´a copiada uma parcela dos vizinhos, mas ´e escolhido diretamente para conex˜ao.

A primeira maneira, considera dois eventos independentes: o sorteio de um v´ertice que tem o v´ertice i como vizinho e o sorteio do v´ertice i dentro da parcela dos vizinhos a serem copiados. O primeiro evento leva em conta o sorteio aleat´orio de um v´ertice qualquer entre os N presentes na rede, o que acontece com probabilidade N1. Al´em disso, o v´ertice sorteado deve ter o v´ertice i como vizinho, o que ocorre com ki dentre os N v´ertices da rede,

logo a probabilidade de ocorrˆencia do primeiro evento ´e ki

N. O segundo evento diz respeito `a

probabilidade de que o v´ertice i esteja entre os vizinhos a serem copiados. Essa probabilidade ´e igual `a fra¸c˜ao γ. Portanto, a probabilidade do v´ertice i ter sua conectividade aumentada tem probabilidade kiγ

N para o caso relatado.

Assim como no caso anterior, a segunda maneira tamb´em leva em conta dois eventos independentes: o fato do v´ertice i n˜ao fazer parte dos vizinhos copiados e o sorteio do v´ertice i

para se conectar diretamente com o novo v´ertice. Lembre-se que nesta etapa a fra¸c˜ao restante (1 − γ) dos vizinhos do novo v´ertice ´e preenchida ao se escolher aleatoriamente a quantidade necess´aria de v´ertices entre os que j´a fazem parte da rede e ainda n˜ao est˜ao ligados a ele. Neste caso, o n´umero inicial de conex˜oes que um novo v´ertice adicionado `a rede estabelece, sem contar as conex˜oes copiadas, ´e dado por (1−γ)c, onde c expressa a quantidade m´ınima de conex˜oes estabelecidas por cada v´ertice (c = M0). Logo, a probabilidade do v´ertice i receber

uma dessas liga¸c˜oes ´e dada por (1−γ)cN .

A partir dessa an´alise, podemos expressar a probabilidade de que o v´ertice i se conecte ao novo v´ertice adicionado `a rede, incrementando sua conectividade, como:

P (ki → ki+ 1) = kiγ N + (1 − γ)c N = kiγ + (1 − γ)c N (5.1)

Para uma rede com N v´ertices, podemos definir pk(N ) como sendo a fra¸c˜ao destes v´ertices

que possuem conectividade k. Assim, o n´umero total esperado de tais v´ertices que devem receber uma nova conex˜ao ´e dado por:

N pk(N )

kiγ + (1 − γ)c

N = [kiγ + (1 − γ)c]pk(N ) (5.2) Definindo uma nova vari´avel a = c1γ − 1, podemos escrever γ em termo dela:

γ = c

c + a (5.3)

Dado isso, a equa¸c˜ao (5.2) resulta em:

[kiγ + (1 − γ)c]pk(N ) =

c(ki+ a)

c + a pk(N ) (5.4)

Podemos usar essa probabilidade para escrever a equa¸c˜ao mestra, na qual exclu´ımos o uso do ´ındice i: (N + 1)pk(N + 1) = N pk(N ) + c(k − 1 + a) c + a pk−1(N ) − c(k + a) c + a pk(N ) (5.5) que informa o n´umero de v´ertices com conectividade k ap´os adi¸c˜ao de um novo v´ertice. Nesta equa¸c˜ao cada termo, da esquerda para a direita, significa: o n´umero de v´ertices com conectividade k ap´os a adi¸c˜ao do novo v´ertice; o n´umero de v´ertices com conectividade k antes da adi¸c˜ao do novo v´ertice; o n´umero de v´ertices que tinham conectividade k−1 antes da adi¸c˜ao do novo v´ertice e passaram a ter conectividade k ap´os a adi¸c˜ao; e o n´umero de v´ertices com conectividade k antes da adi¸c˜ao do novo v´ertice e passaram a ter conectividade k + 1 ap´os a adi¸c˜ao. A resolu¸c˜ao desta equa¸c˜ao ´e trabalhosa e foge ao escopo deste trabalho, portanto sugerimos que vejam o passo-a-passo em [44]. Depois de resolvida a equa¸c˜ao, obtemos a distribui¸c˜ao de conectividade do modelo.

No limite em que k se torna grande, observa-se que a distribui¸c˜ao de conectividade para o modelo de c´opia de v´ertices segue uma lei de potˆencia P (k) ∼ k−α, onde o expoente ´e dado por:

α = 2 + a

c = 1 + 1

γ (5.6)

Isto nos fornece que o expoente varia de 2 a infinito, dependendo de qu˜ao fiel ´e a c´opia dos v´ertices. Entretanto, observe que o resultado previsto pela equa¸c˜ao mestra leva a uma distribui¸c˜ao em lei de potˆencia que ´e apropriada para valores de γ na vizinhan¸ca de γ = 12, pois nesse caso a distribui¸c˜ao realmente ´e uma lei de potˆencia. Por´em quando o resultado da equa¸c˜ao mestra ´e testado com γ = 0 ou γ = 1, as distribui¸c˜oes resultantes n˜ao s˜ao adequadas. Ou seja, a equa¸c˜ao mestra produz uma solu¸c˜ao em lei de potˆencia que ´e apenas uma aproxima¸c˜ao do resultado exato que ocorre para um valor intermedi´ario de γ. Quando fazemos γ = 12, isto ´e, quando metade dos vizinhos iniciais do novo v´ertice ´e herdada do v´ertice antigo, a distribui¸c˜ao de conectividade desse modelo ´e descrita pela mesma lei de potˆencia v´alida para o modelo de Barab´asi e Albert, pois o expoente tem valor igual a 3 nos dois casos. Este resultado concorda corretamente com os resultados num´ericos (ver figura 5.2). No entanto, esse resultado n˜ao ´e suficiente para podermos afirmar que o mecanismo de c´opia