Skip to content

Commit

Permalink
Added EDGE Markovian RG
Browse files Browse the repository at this point in the history
Added new dynamic random graph model: Edge Markovian Random Graph
  • Loading branch information
Antonio-Cruciani committed Jun 7, 2020
1 parent 2998fca commit a216598
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 1 deletion.
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
47 changes: 46 additions & 1 deletion src/Graphs/Objects/MultipleEdge.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@
from src.Protocols.FloodOBJ import Flooding

class DynamicGraph:
# Aggiungere lista di archi iniziale del grafo

def __init__(self,n,d,c,lam,beta,falling_probability,model):
def __init__(self,n = 0,d = 4,c = 1.5,lam = 1 ,beta = 1,falling_probability = 0,model = None ,starting_edge_list = [],edge_birth_rate = None, edge_death_rate = None):
self.G = nx.Graph()
self.G.add_nodes_from([i for i in range(0,n)])
self.n = n
Expand All @@ -27,7 +28,21 @@ def __init__(self,n,d,c,lam,beta,falling_probability,model):
self.converged = False
self.target_density = self.target_size_achieved()
self.max_label = n
self.birth_rate = edge_birth_rate
self.death_rate = edge_death_rate
if(starting_edge_list):
self.G.add_edges_from(starting_edge_list)
if(model == "EdgeMarkovian"):
kn = nx.complete_graph(n)
self.kn_edges = []
for e in nx.generate_edgelist(kn,data=False):
if(int(e.split(" ")[0])<int(e.split(" ")[1])):

self.kn_edges.append((int(e.split(" ")[0]),int(e.split(" ")[1])))
else:
self.kn_edges.append((int(e.split(" ")[1]), int(e.split(" ")[0])))
else:
self.kn_edges = []

def set_target_size(self,lam, beta):
if(beta == 0):
Expand Down Expand Up @@ -90,6 +105,16 @@ def get_outrate(self):
return(self.outrate)
def get_list_of_nodes(self):
return(list(self.G.nodes()))
def get_list_of_edges(self):
edge_list_tuples = []
for edge in nx.generate_edgelist(self.G, data=False):
if(int(edge.split(" ")[0])<int(edge.split(" ")[1])):
edge_list_tuples.append((int(edge.split(" ")[0]),int(edge.split(" ")[1])))
else:
edge_list_tuples.append((int(edge.split(" ")[1]), int(edge.split(" ")[0])))

return(edge_list_tuples)

def get_converged(self):
return(self.converged)
def get_max_label(self):
Expand Down Expand Up @@ -245,3 +270,23 @@ def target_size_achieved(self):
return True
return False


def edge_markovian(self):

edges = self.get_list_of_edges()
new_edges = []
falling_edges = []
# Falling phase
for e in edges:
if(flip(self.death_rate) == 'H'):
falling_edges.append(e)
# Birth phase

birth_candidates = set(self.kn_edges) - set(edges)
for e in birth_candidates:
if(flip(self.birth_rate) == 'H'):
new_edges.append(e)
# Updating the graph
self.G.remove_edges_from(falling_edges)
self.G.add_edges_from(new_edges)

0 comments on commit a216598

Please sign in to comment.