user3141121
user3141121

Reputation: 490

setting upper bound on adjacent edges of vertices in igraph

I am attempting to draw a complete graph using igraph of some arbitrary size. I then want to trim the number of adjacent edges each vertice can have. How can I do this?

As an example, If I have a complete graph of 20 vertices, each vertice will originally have 19 adjacent edges. Now I would like to trim those edges so that each vertice has at most 10 edges.

EDIT

Below is the current code I've written for this. It tends to form disconnected vertices and a small cluster of connected vertices.

library(igraph)
node_number = 20
g=erdos.renyi.game(node_number, 1)

testfun = function(g, maxVert, node_number){
  neighbor_nodes = NULL; delete_edge = NULL; delete_these = NULL
  total_nodes = 1:node_number

  for (i in 1:node_number){
    neighbor_nodes <- unlist(neighborhood(g, order = 1, nodes = total_nodes[i] ))
    neighbor_nodes[1] <- NA
    neighbor_nodes <- neighbor_nodes[!is.na(neighbor_nodes)]
    neighbor_nodes <- sample(neighbor_nodes, maxVert)

    delete_edge <- which(total_nodes%in%neighbor_nodes == FALSE)
    delete_edge <- which(delete_edge%in%total_nodes[i] == FALSE)

    for (j in 1:length(delete_edge)){
      if (isTRUE(edgeFinder(g, total_nodes[i], delete_edge[j]))){
        g = delete.edges(g, E(g, P=c(i, delete_edge[j])))
      }
    }
  }
  return(g)
}

edgeFinder = function(g, v1,v2){
    if (g[v1,v2] == 1){
     return(TRUE) 
    } else { return(FALSE) }
}

g2 = testfun(g, 10, node_number)

Upvotes: 1

Views: 115

Answers (1)

user3141121
user3141121

Reputation: 490

I was able to solve this using the following approach.

library(igraph)     

SetEdge = rep(10, 20)
g=degree.sequence.game(SetEdge, method='vl')    
degree(g)
[1] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10

I'm now drawing a graph of 20 vertices with 10 adjacent edges. Simpler than my initial approach...

Upvotes: 2

Related Questions