Este documento simula a percolação de arestas numa caixa finita de \(\mathbb Z^2\).

Para isso usaremos os pacotes igraph, que possibilita a manipulação de grafos no R, e o pacote animation para gerar animações.

#install.packages("igraph")
suppressMessages(library(igraph))
#install.packages("animation")
suppressMessages(library(animation))

Criando um reticulado bidimensional

O igraph possui uma lista de grafos padrões. Vamos fazer um reticulado de \(30\times 30\). Este grafo fica reconhecido no layout em grid

#Fazendo um reticulado de 30x30
g<-make_lattice(c(30, 30))
#Escolhendo o layout de grid
layou= layout_on_grid(g, width = 0.4, height = 1, dim = 2)
#Plotando
plot(g,layout=layou,vertex.label=NA,vertex.size=3,pin=c(10,5))

Vamos ver alguns elementos desse grafo

#Vértices
V(g)
## + 900/900 vertices, from 750a089:
##   [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17
##  [18]  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34
##  [35]  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51
##  [52]  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68
##  [69]  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85
##  [86]  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102
## [103] 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
## [120] 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
## [137] 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
## [154] 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
## + ... omitted several vertices
#Arestas
E(g)
## + 1740/1740 edges from 750a089:
##   [1]  1-- 2  1--31  2-- 3  2--32  3-- 4  3--33  4-- 5  4--34  5-- 6  5--35
##  [11]  6-- 7  6--36  7-- 8  7--37  8-- 9  8--38  9--10  9--39 10--11 10--40
##  [21] 11--12 11--41 12--13 12--42 13--14 13--43 14--15 14--44 15--16 15--45
##  [31] 16--17 16--46 17--18 17--47 18--19 18--48 19--20 19--49 20--21 20--50
##  [41] 21--22 21--51 22--23 22--52 23--24 23--53 24--25 24--54 25--26 25--55
##  [51] 26--27 26--56 27--28 27--57 28--29 28--58 29--30 29--59 30--60 31--32
##  [61] 31--61 32--33 32--62 33--34 33--63 34--35 34--64 35--36 35--65 36--37
##  [71] 36--66 37--38 37--67 38--39 38--68 39--40 39--69 40--41 40--70 41--42
##  [81] 41--71 42--43 42--72 43--44 43--73 44--45 44--74 45--46 45--75 46--47
##  [91] 46--76 47--48 47--77 48--49 48--78 49--50 49--79 50--51 50--80 51--52
## + ... omitted several edges

Vamos guardar a lista de Arestas de g

arestas<-E(g)

Percolação

Para criarmos o modelo de percolação de arestas. Escolheremos uma uniforme em cada aresta.

Atribuindo uma uniforme a cada aresta:

arestaspeso<-runif(length(arestas)/2, 0, 1)

E agora para cada \(p\) removeremos as arestas com peso menor que p

#Dado p escolher as com maior que p para remover

seleciona<-function(p){
arestas[arestaspeso<p]
}

Vamos plotar duas situações. Primeiro peso 0.4. Ou seja estamos removendo com probabilidade 0.4. Observe que o tamanho das componentes conexas são grandes.

plot(g-seleciona(0.4),layout=layou,vertex.label=NA,vertex.size=2,edge.color="red")

Agora peso 0.6. Ou seja estamos removendo com probabilidade 0.6

plot(g-seleciona(0.6),layout=layou,vertex.label=NA,vertex.size=2,edge.color="red")

Vamos fazer uma animação escolhendo pesos \(p=1/10, i=0,\dots,10\)

a<-saveGIF({
    for (i in 0:10) plot(g-seleciona(i/10),layout=layou,vertex.label=NA,vertex.size=2,edge.color="red")
}) 
## Executing: 
## convert -loop 0 -delay 100 Rplot1.png Rplot2.png Rplot3.png
##     Rplot4.png Rplot5.png Rplot6.png Rplot7.png Rplot8.png
##     Rplot9.png Rplot10.png Rplot11.png 'animation.gif'
## Output at: animation.gif
Percolação de Arestas

Percolação de Arestas