mirror of
https://github.com/gsi-upm/soil
synced 2024-11-25 20:32:29 +00:00
SISa model implemented
This commit is contained in:
parent
77f2f1c91b
commit
9aebacd4c7
70
models.py
70
models.py
@ -1,4 +1,5 @@
|
|||||||
from nxsim import BaseNetworkAgent
|
from nxsim import BaseNetworkAgent
|
||||||
|
import numpy as np
|
||||||
import random
|
import random
|
||||||
import settings
|
import settings
|
||||||
|
|
||||||
@ -55,6 +56,73 @@ class ComportamientoBase(BaseNetworkAgent):
|
|||||||
final[a][stamp] = attrs[a]
|
final[a][stamp] = attrs[a]
|
||||||
return final
|
return final
|
||||||
|
|
||||||
|
class SISaModel(ComportamientoBase):
|
||||||
|
def __init__(self, environment=None, agent_id=0, state=()):
|
||||||
|
super().__init__(environment=environment, agent_id=agent_id, state=state)
|
||||||
|
|
||||||
|
self.neutral_discontent_spon_prob = np.random.normal(settings.neutral_discontent_spon_prob, settings.standard_variance)
|
||||||
|
self.neutral_discontent_infected_prob = np.random.normal(settings.neutral_discontent_infected_prob,settings.standard_variance)
|
||||||
|
self.neutral_content_spon_prob = np.random.normal(settings.neutral_content_spon_prob,settings.standard_variance)
|
||||||
|
self.neutral_content_infected_prob = np.random.normal(settings.neutral_content_infected_prob,settings.standard_variance)
|
||||||
|
|
||||||
|
self.discontent_neutral = np.random.normal(settings.discontent_neutral,settings.standard_variance)
|
||||||
|
self.discontent_content = np.random.normal(settings.discontent_content,settings.variance_d_c)
|
||||||
|
|
||||||
|
self.content_discontent = np.random.normal(settings.content_discontent,settings.variance_c_d)
|
||||||
|
self.content_neutral = np.random.normal(settings.content_neutral,settings.standard_variance)
|
||||||
|
|
||||||
|
def step(self, now):
|
||||||
|
|
||||||
|
if self.state['id'] == 0:
|
||||||
|
self.neutral_behaviour()
|
||||||
|
if self.state['id'] == 1:
|
||||||
|
self.discontent_behaviour()
|
||||||
|
if self.state['id'] == 2:
|
||||||
|
self.content_behaviour()
|
||||||
|
|
||||||
|
self.attrs['status'] = self.state['id']
|
||||||
|
super().step(now)
|
||||||
|
|
||||||
|
|
||||||
|
def neutral_behaviour(self):
|
||||||
|
|
||||||
|
#Spontaneus effects
|
||||||
|
if random.random() < self.neutral_discontent_spon_prob:
|
||||||
|
self.state['id'] = 1
|
||||||
|
if random.random() < self.neutral_content_spon_prob:
|
||||||
|
self.state['id'] = 2
|
||||||
|
|
||||||
|
#Infected
|
||||||
|
discontent_neighbors = self.get_neighboring_agents(state_id=1)
|
||||||
|
if random.random() < len(discontent_neighbors)*self.neutral_discontent_infected_prob:
|
||||||
|
self.state['id'] = 1
|
||||||
|
content_neighbors = self.get_neighboring_agents(state_id=2)
|
||||||
|
if random.random() < len(content_neighbors)*self.neutral_content_infected_prob:
|
||||||
|
self.state['id'] = 2
|
||||||
|
|
||||||
|
def discontent_behaviour(self):
|
||||||
|
|
||||||
|
#Healing
|
||||||
|
if random.random() < self.discontent_neutral:
|
||||||
|
self.state['id'] = 0
|
||||||
|
|
||||||
|
#Superinfected
|
||||||
|
content_neighbors = self.get_neighboring_agents(state_id=2)
|
||||||
|
if random.random() < len(content_neighbors)*self.discontent_content:
|
||||||
|
self.state['id'] = 2
|
||||||
|
|
||||||
|
def content_behaviour(self):
|
||||||
|
|
||||||
|
#Healing
|
||||||
|
if random.random() < self.content_neutral:
|
||||||
|
self.state['id'] = 0
|
||||||
|
|
||||||
|
#Superinfected
|
||||||
|
discontent_neighbors = self.get_neighboring_agents(state_id=1)
|
||||||
|
if random.random() < len(discontent_neighbors)*self.content_discontent:
|
||||||
|
self.state['id'] = 1
|
||||||
|
|
||||||
|
|
||||||
class BigMarketModel(ComportamientoBase):
|
class BigMarketModel(ComportamientoBase):
|
||||||
|
|
||||||
def __init__(self, environment=None, agent_id=0, state=()):
|
def __init__(self, environment=None, agent_id=0, state=()):
|
||||||
@ -81,6 +149,8 @@ class BigMarketModel(ComportamientoBase):
|
|||||||
self.enterpriseBehaviour()
|
self.enterpriseBehaviour()
|
||||||
else: # Usuario
|
else: # Usuario
|
||||||
self.userBehaviour()
|
self.userBehaviour()
|
||||||
|
for i in range(self.number_of_enterprises): # Para que nunca este a 0 si no ha habido cambios(logs)
|
||||||
|
self.attrs['sentiment_enterprise_%s'% self.enterprises[i]] = self.sentiment_about[i]
|
||||||
|
|
||||||
super().step(now)
|
super().step(now)
|
||||||
|
|
||||||
|
29
settings.py
29
settings.py
@ -20,12 +20,23 @@ def init():
|
|||||||
global sentiment_about
|
global sentiment_about
|
||||||
global tweet_probability_enterprises
|
global tweet_probability_enterprises
|
||||||
global enterprises
|
global enterprises
|
||||||
|
global neutral_discontent_spon_prob
|
||||||
|
global neutral_discontent_infected_prob
|
||||||
|
global neutral_content_spon_prob
|
||||||
|
global neutral_content_infected_prob
|
||||||
|
global discontent_content
|
||||||
|
global discontent_neutral
|
||||||
|
global content_discontent
|
||||||
|
global content_neutral
|
||||||
|
global variance_d_c
|
||||||
|
global variance_c_d
|
||||||
|
global standard_variance
|
||||||
|
|
||||||
network_type=1
|
network_type=1
|
||||||
number_of_nodes=50
|
number_of_nodes=50
|
||||||
max_time=500
|
max_time=500
|
||||||
num_trials=1
|
num_trials=1
|
||||||
timeout=1
|
timeout=20
|
||||||
|
|
||||||
#Zombie model
|
#Zombie model
|
||||||
bite_prob=0.01 # 0-1
|
bite_prob=0.01 # 0-1
|
||||||
@ -53,3 +64,19 @@ def init():
|
|||||||
##Enterprises
|
##Enterprises
|
||||||
tweet_probability_enterprises = [0.3, 0.3, 0.3]
|
tweet_probability_enterprises = [0.3, 0.3, 0.3]
|
||||||
|
|
||||||
|
#SISa
|
||||||
|
neutral_discontent_spon_prob = 0.04
|
||||||
|
neutral_discontent_infected_prob = 0.04
|
||||||
|
neutral_content_spon_prob = 0.18
|
||||||
|
neutral_content_infected_prob = 0.02
|
||||||
|
|
||||||
|
discontent_neutral = 0.13
|
||||||
|
discontent_content = 0.07
|
||||||
|
variance_d_c = 0.02
|
||||||
|
|
||||||
|
content_discontent = 0.009
|
||||||
|
variance_c_d = 0.003
|
||||||
|
content_neutral = 0.088
|
||||||
|
|
||||||
|
standard_variance = 0.02
|
||||||
|
|
||||||
|
Binary file not shown.
21
soil.py
21
soil.py
@ -1,6 +1,7 @@
|
|||||||
from models import *
|
from models import *
|
||||||
from nxsim import NetworkSimulation
|
from nxsim import NetworkSimulation
|
||||||
from nxsim import BaseLoggingAgent
|
import numpy
|
||||||
|
from matplotlib import pyplot as plt
|
||||||
import networkx as nx
|
import networkx as nx
|
||||||
import settings
|
import settings
|
||||||
import models
|
import models
|
||||||
@ -26,7 +27,7 @@ if settings.network_type == 2:
|
|||||||
# Simulation #
|
# Simulation #
|
||||||
##############
|
##############
|
||||||
|
|
||||||
sim = NetworkSimulation(topology=G, states=init_states, agent_type=BigMarketModel,
|
sim = NetworkSimulation(topology=G, states=init_states, agent_type=SISaModel,
|
||||||
max_time=settings.max_time, num_trials=settings.num_trials, logging_interval=1.0)
|
max_time=settings.max_time, num_trials=settings.num_trials, logging_interval=1.0)
|
||||||
|
|
||||||
|
|
||||||
@ -35,10 +36,22 @@ sim.run_simulation()
|
|||||||
###########
|
###########
|
||||||
# Results #
|
# Results #
|
||||||
###########
|
###########
|
||||||
|
x_values = []
|
||||||
|
y_values = []
|
||||||
|
|
||||||
|
for time in range(0, settings.max_time):
|
||||||
|
value = settings.sentiment_about[0]
|
||||||
|
real_time = time * settings.timeout
|
||||||
|
for x in range(0, settings.number_of_nodes):
|
||||||
|
if "sentiment_enterprise_BBVA" in models.networkStatus["agente_%s" % x]:
|
||||||
|
if real_time in models.networkStatus["agente_%s" % x]["sentiment_enterprise_BBVA"]:
|
||||||
|
value += models.networkStatus["agente_%s" % x]["sentiment_enterprise_BBVA"][real_time]
|
||||||
|
|
||||||
trial = BaseLoggingAgent.open_trial_state_history(dir_path='sim_01', trial_id=0)
|
x_values.append(real_time)
|
||||||
status_census = [sum([1 for node_id, state in g.items() if state['id'] == 1]) for t,g in trial.items()]
|
y_values.append(value)
|
||||||
|
|
||||||
|
plt.plot(x_values,y_values)
|
||||||
|
#plt.show()
|
||||||
|
|
||||||
|
|
||||||
#################
|
#################
|
||||||
|
Loading…
Reference in New Issue
Block a user