Skip to content

Commit

Permalink
🆕 Ising Fluctuation Model
Browse files Browse the repository at this point in the history
  • Loading branch information
GiulioRossetti committed Mar 28, 2019
1 parent 688d4b3 commit 166d6c9
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 13 deletions.
22 changes: 13 additions & 9 deletions ndlib/models/epidemics/IsingFluctuationModel.py
Expand Up @@ -42,7 +42,7 @@ def __init__(self, graph):
"range": "[-1,1]",
"optional": False},
"T2": {
"descr": "Temperature node 2",
"descr": "Temperature node 2, must be grater than T1",
"range": "[-1,1]",
"optional": False}
},
Expand All @@ -52,7 +52,7 @@ def __init__(self, graph):

self.name = "IF"

def __change_status(self, u, actual_status):
def __change_status(self, u):

neighbors = self.graph.neighbors(u)
if isinstance(self.graph, nx.DiGraph):
Expand All @@ -61,21 +61,23 @@ def __change_status(self, u, actual_status):
s_u = 0
s_u_inv = 0
for n in neighbors:
s_u += actual_status[u] * actual_status[n]
s_u_inv += (-1 * actual_status[u]) * actual_status[n]
s_u += self.status[u] * self.status[n]
s_u_inv += (-1 * self.status[u]) * self.status[n]

# regular node scenario
if u != self.params['model']['N1'] and u != self.params['model']['N2']:
if s_u == s_u_inv:
flip = random.randint(0, 1)
if flip == 1:
return True
return False

# Fixed temperature scenario
dif = s_u_inv - s_u
if u == self.params['model']['N1']:
dif /= self.params['model']['T1']
else:
dif /= self.params['model']['T2']
dif /= self.params['model']['T2']

if s_u_inv < s_u:
return True
Expand Down Expand Up @@ -105,11 +107,13 @@ def iteration(self, node_status=True):
return {"iteration": 0, "status": {},
"node_count": node_count.copy(), "status_delta": status_delta.copy()}

for u in self.graph.nodes():
change = self.__change_status(u, actual_status)
if change:
actual_status[u] = -1*actual_status[u]
# random node selection
u = random.sample(list(self.graph.nodes()), 1)[0]

# spin change evaluation
change = self.__change_status(u)
if change:
actual_status[u] = -1*self.status[u]

delta, node_count, status_delta = self.status_delta(actual_status)
self.status = actual_status
Expand Down
8 changes: 4 additions & 4 deletions ndlib/test/test_ndlib.py
Expand Up @@ -494,17 +494,17 @@ def test_ising_model(self):
config = mc.Configuration()
config.add_model_parameter('N1', 1)
config.add_model_parameter('N2', 100)
config.add_model_parameter('T1', 1)
config.add_model_parameter('T2', -1)
config.add_model_parameter('T1', -1)
config.add_model_parameter('T2', 1)

population = set(g.nodes()) - {n1, n2}

negative_spin = random.sample(population, int(len(population)/2))
positive_spin = list(population - set(negative_spin))
positive_spin.append(n1)
positive_spin.append(n2)

negative_spin = list(negative_spin)
negative_spin.append(n2)
negative_spin.append(n1)

config.add_model_initial_configuration("-1", negative_spin)
config.add_model_initial_configuration("1", positive_spin)
Expand Down

0 comments on commit 166d6c9

Please sign in to comment.