mirror of
https://github.com/gsi-upm/soil
synced 2024-11-22 03:02:28 +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
|
||||
import numpy as np
|
||||
import random
|
||||
import settings
|
||||
|
||||
@ -55,6 +56,73 @@ class ComportamientoBase(BaseNetworkAgent):
|
||||
final[a][stamp] = attrs[a]
|
||||
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):
|
||||
|
||||
def __init__(self, environment=None, agent_id=0, state=()):
|
||||
@ -81,6 +149,8 @@ class BigMarketModel(ComportamientoBase):
|
||||
self.enterpriseBehaviour()
|
||||
else: # Usuario
|
||||
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)
|
||||
|
||||
|
29
settings.py
29
settings.py
@ -20,12 +20,23 @@ def init():
|
||||
global sentiment_about
|
||||
global tweet_probability_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
|
||||
number_of_nodes=50
|
||||
max_time=500
|
||||
num_trials=1
|
||||
timeout=1
|
||||
timeout=20
|
||||
|
||||
#Zombie model
|
||||
bite_prob=0.01 # 0-1
|
||||
@ -53,3 +64,19 @@ def init():
|
||||
##Enterprises
|
||||
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 nxsim import NetworkSimulation
|
||||
from nxsim import BaseLoggingAgent
|
||||
import numpy
|
||||
from matplotlib import pyplot as plt
|
||||
import networkx as nx
|
||||
import settings
|
||||
import models
|
||||
@ -26,7 +27,7 @@ if settings.network_type == 2:
|
||||
# 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)
|
||||
|
||||
|
||||
@ -35,10 +36,22 @@ sim.run_simulation()
|
||||
###########
|
||||
# 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)
|
||||
status_census = [sum([1 for node_id, state in g.items() if state['id'] == 1]) for t,g in trial.items()]
|
||||
x_values.append(real_time)
|
||||
y_values.append(value)
|
||||
|
||||
plt.plot(x_values,y_values)
|
||||
#plt.show()
|
||||
|
||||
|
||||
#################
|
||||
|
Loading…
Reference in New Issue
Block a user