-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTaller1.R
184 lines (115 loc) · 4.35 KB
/
Taller1.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
# Taller 1
library(igraph)
# Punto 1 -----------------------------------------------------------------
# Red binaria no dirigida G(n,m) n nodos y orden m
set.seed(123)
g <- sample_gnm(7,10)
V(g)
vcount(g) # Orden del grafo
E(g)
ecount(g) # Tamaño del grafo
as_edgelist(g) # Lista de relaciones
as_adjacency_matrix(g, sparse = F) # Matriz de adyacencia
set.seed(123)
plot(g)
# Red ponderada no dirigida
## Empecemos por asignar pesos a las conexiones de nuestra red
wg <- g
set.seed(123)
E(wg)$weight <- round(runif(n = ecount(wg)), 3)
E(wg)$weight # Visualizo los pesos creados
is_weighted(wg) # Pregunto si es ponderada
as_data_frame(wg) #Puedo ver los pesos por cada conexión
as_adjacency_matrix(wg,sparse = F, attr = 'weight')
set.seed(123)
plot(wg,edge.width = E(g)$weight)
# Red binaria dirigida
dg <- sample_gnm(3, 4, directed = TRUE)
set.seed(123)
plot(dg)
vcount(dg) # Orden del gráfo
ecount(dg) # Tamaño del grafo
#Conexión
is.connected(dg, mode = 'weak') # Conexión debil
is.connected(dg, mode = 'strong') # No conexión fuerte
# Punto 2 -----------------------------------------------------------------
# Consideramos un grafo G(V,E) con los siguientes edges
enla <- c(1,2,1,3,2,3,2,4,2,5,3,5,4,5)
# Lo convertimos en un grafo
g <- graph(edges = enla,directed = F)
# Lo visualizamos
set.seed(123)
plot(g)
# Orden, tamaño y diámetro del gráfo
sprintf('El orden del gráfo es de %d', vcount(g))
sprintf('El tamaño del gráfo es de %d', ecount(g))
sprintf('El diametro del gráfo es %d', diameter(g))
# Grado de cada vértice
degree(graph = g, v = V(g)) #Grado de todos los vértices
# Graficar subgrafo generado por los nodos 1,2,3 y 4
nodos_subgrafo <- c(1, 2, 3, 4)
subgrafo <- induced_subgraph(g, nodos_subgrafo) # Obtener el subgrafo
set.seed(123)
plot(subgrafo)
# Punto 3 -----------------------------------------------------------------
# Consideramos un digrafo G(V,E) con los siguientes edges
enla3 <- c(1,3,2,3,2,4,2,5,3,1,3,5,4,5,5,4)
# Lo convertimos en un grafo
g3 <- graph(edges = enla3,directed = T)
# Lo visualizamos
set.seed(123)
plot(g3)
# Orden, tamaño y diámetro del gráfo
sprintf('El orden del gráfo es de %d', vcount(g3)) # 5
sprintf('El tamaño del gráfo es de %d', ecount(g3)) # 8
sprintf('El diametro del gráfo es %d', diameter(g3)) # 3
# Grado de cada vértice
degree(graph = g3, v = V(g3), mode = 'in') #Grados de entrada
degree(graph = g3, v = V(g3), mode = 'out') #Grados de salida
# Graficar subgrafo generado por los nodos 1,2,3 y 4
nodos_subgrafo <- c(1, 2, 3, 4)
subgrafo3 <- induced_subgraph(g3, nodos_subgrafo) # Obtener el subgrafo
set.seed(123)
plot(subgrafo3)
# Punto 4 -----------------------------------------------------------------
# Empecemos por graficar la triada; para ello, definamosla
# Triada o tripleta
# Una tríada es un conjunto de tres vertices
# Estados triádicos dirigidos
# Cuántaos estádos triadicos no dirigidos puede haber? 2^3 = 8
# Ninguna, una, dos o tres aristas
# Definamos vertices
vertices <- c("v1", "v2", "v3")
# Generemos una lista con el número de aristas posibles por cada grafo
edgelists <- list(
c(), # Ninguna arista
c("v1", "v2"), # Una arista (v1 - v2)
c("v1", "v3"), # Una arista (v1 - v3)
c("v2", "v3"), # Una arista (v2 - v3)
c("v1", "v2", "v1", "v3"), # Dos aristas (v1 - v2, v1 - v3)
c("v1", "v2", "v2", "v3"), # Dos aristas (v1 - v2, v2 - v3)
c("v1", "v3", "v2", "v3"), # Dos aristas (v1 - v3, v2 - v3)
c("v1", "v2", "v1", "v3", "v2", "v3") # Tres aristas (triángulo completo)
)
# Los convertimos en grafos para tener los estados triadicos no dirigidos
for (i in 1:length(edgelists)) {
edgelists[[i]] <- graph(edgelists[[i]],directed = F)
}
edgelists[[1]] <- make_empty_graph(n = 3, directed = FALSE)
V(edgelists[[1]])$name <- vertices
# Los graficamos
par(mfrow=c(3,3))
for (i in edgelists) {
plot(i, main = sprintf('Grafo con %d aristas', ecount(i)))
}
# Valoremos ahora cuales de estos grafos son isomorfos
# Mostremos cuales de estos grafos son isomorfos
prueba_isomorfismo <- list()
for (i in 1:(length(edgelists) - 1)) {
for (j in (i + 1):length(edgelists)) {
iso <- isomorphic(edgelists[[i]], edgelists[[j]])
if(iso == T){
cat(sprintf("Grafo %d y Grafo %d son isomorfos: %s\n", i, j, iso), "\n")}
}
}
# Punto 6 -----------------------------------------------------------------