random <- function(){return(runif(1,0,1))} dice <- function(n=6){return(1+trunc(n*runif(1,0,1)))} even <- function(n){return(0 == n %% 2)} GilbertNet <- # generates a random undirected graph of Gilbert type # with edge probability p or average degree adeg and # stores it on the file fnet in Pajek's format # # Example: # GilbertNet('testGi.net',100, adeg=3.5) # ------------------------------------------------------- # by Vladimir Batagelj, R version: Ljubljana, 16. Dec 2004 # based on ALG.1 from: V. Batagelj, U. Brandes: # Efficient generation of large random networks function(fnet,n,p=0,adeg=0){ net <- file(fnet,"w"); cat("*vertices",n,"\n",file=net) if (adeg > 0) {p <- adeg/(n-1)} else {adeg <- p*(n-1)} cat('% random Gilbert undirected graph G(n,p) / p = ', p,' av_deg = ', adeg, '\n', file=net) # for (i in 1:n) cat(i," \"v",i,"\"\n",sep="",file=net) cat("*edges\n",file=net); v <- 0; m <- 0; u <- -1; lq <- log(1-p) while (v < n){ u <- u + 1 + trunc( log(1 - random()) / lq ) while (u >= v && v < n) {u <- u - v; v <- v + 1} if (v < n) {m <- m + 1; cat(u+1,v+1,'\n',file=net)} } close(net) } ErdosRenyiNet <- # generates a random undirected graph of Erdos-Renyi type # with edge probability p or average degree adeg and # stores it on the file fnet in Pajek's format # # Example: # ErdosRenyiNet('testER.net',100,175) # ------------------------------------------------------- # by Vladimir Batagelj, R version: Ljubljana, 20. Dec 2004 # based on ALG.2 from: V. Batagelj, U. Brandes: # Efficient generation of large random networks function(fnet,n,m){ net <- file(fnet,"w"); cat("*vertices",n,"\n",file=net) cat('% random Erdos-Renyi undirected graph G(n,m) / m = ', m,'\n',file=net) # for (i in 1:n) cat(i," \"v",i,"\"\n",sep="",file=net) cat("*edges\n",file=net); L <- new.env(TRUE,NULL) for (i in 1:m){ repeat { u <- dice(n); v <- dice(n) if (u!=v) { edge <- if (u