gsimul_graph <- function(nodetype,nodenum){
#Loading Main Library
library(igraph)
library(netseg)
eom <- 1
invec <- eom
ttp <- nodetype
opvec <- rep(3,nodenum)
typevec <- sample(ttp, nodenum, replace = TRUE)
rph <- erdos.renyi.game(nodenum, 0.3, type=c("gnp", "gnm"),
directed = TRUE, loops = FALSE)
adjrph <- as.matrix(as_adjacency_matrix(rph))
V(rph)$label <- typevec
#Centrality Measures
Degree.Directed <- degree(rph)
Indegree <- degree(rph, mode="in")
Outdegree <- degree(rph, mode="out")
Eig <- eigen_centrality(rph)$vector
Hub <- hub_score(rph)$vector
Authority <- authority_score(rph)$vector
Closeness <- closeness(rph)
reach1 <- ego_size(rph, 1)/(vcount(rph)-1)
Betweenness <- betweenness(rph)
centralities <- cbind(mean(Degree.Directed), mean(Eig), mean(Hub), mean(Authority), mean(Closeness), mean(reach1), mean(Betweenness))
#Homophily Measures
fhom <- coleman(rph, "label")
#Deciding strategy
focstrat <- which(adjrph[1,] == 1)
if(length(focstrat)<=2){
ridx <- sample(nrow(adjrph), 4)
ridx <- ridx[! ridx %in% focstrat]
adjrph[1,ridx] = 1
}
allstrat <- list("F", "B")
focstrat <- sample(which(adjrph[1,] == 1),ceiling(runif(1, 1, (length(which(adjrph[1,] == 1))-1))))
act <- focstrat
for (k in 1:3) {
if(opinion_update(invec,eom,adjrph,typevec,opvec,"F",rph,act)[[3]] != "Finished"){
linvec <- opinion_update(invec,eom,adjrph,typevec,opvec,"F",rph,act)[[2]]
lopvec <- opinion_update(invec,eom,adjrph,typevec,opvec,"F",rph,act)[[1]]
invec <- linvec
opvec <- lopvec
}
}
#Output from Focus
fopvec <- opvec
eom <- 1
invec <- eom
opvec <- rep(3,10)
for (k in 1:3) {
if(opinion_update(invec,eom,adjrph,typevec,opvec,"B",rph,act)[[3]] != "Finished"){
kinvec <- opinion_update(invec,eom,adjrph,typevec,opvec,"B",rph,act)[[2]]
kopvec <- opinion_update(invec,eom,adjrph,typevec,opvec,"B",rph,act)[[1]]
invec <- kinvec
opvec <- kopvec
}
}
#Output from Broadcast
bopvec <- opvec
#Counting number of 1 in focus
ff <- fopvec[! fopvec %in% c(3)]
ff <- ff[-1]
nfop <- sum(ff==1)
#Counting number of 1 in broadcast
bb <- bopvec[! bopvec %in% c(3)]
bb <- bb[-1]
nbop <- sum(bb==1)
return(c(length(focstrat),nfop,nbop,centralities,fhom[[1]], fhom[[2]],sum(typevec == "S"), sum(typevec == "T")))
}