1
0
mirror of https://github.com/gsi-upm/soil synced 2024-11-14 07:22:29 +00:00
soil/soil.py

110 lines
3.4 KiB
Python
Raw Normal View History

from models import *
2015-12-04 10:41:42 +00:00
from nxsim import NetworkSimulation
2016-04-18 10:23:24 +00:00
import numpy
from matplotlib import pyplot as plt
2015-12-04 10:41:42 +00:00
import networkx as nx
import settings
import models
2015-12-18 12:03:58 +00:00
import math
import json
2015-12-04 10:41:42 +00:00
2015-12-04 11:32:24 +00:00
####################
# Network creation #
####################
2015-12-04 10:41:42 +00:00
if settings.network_type == 0:
G = nx.complete_graph(settings.number_of_nodes)
if settings.network_type == 1:
2017-04-21 11:55:42 +00:00
G = nx.barabasi_albert_graph(settings.number_of_nodes, 10)
2015-12-04 10:41:42 +00:00
if settings.network_type == 2:
G = nx.margulis_gabber_galil_graph(settings.number_of_nodes, None)
2015-12-04 11:32:24 +00:00
# More types of networks can be added here
2015-12-04 10:41:42 +00:00
2017-04-21 11:55:42 +00:00
2015-12-04 11:32:24 +00:00
##############
# Simulation #
##############
2015-12-04 10:41:42 +00:00
sim = NetworkSimulation(topology=G, states=init_states, agent_type=ControlModelM2,
2017-04-21 12:04:30 +00:00
max_time=settings.max_time, num_trials=settings.num_trials, logging_interval=1.0,
environment_params=settings)
2015-12-04 10:41:42 +00:00
sim.run_simulation()
2017-04-21 11:55:42 +00:00
2015-12-04 11:32:24 +00:00
###########
# Results #
###########
2017-04-21 11:55:42 +00:00
2016-04-18 10:23:24 +00:00
x_values = []
2016-04-27 11:30:31 +00:00
infected_values = []
neutral_values = []
cured_values = []
vaccinated_values = []
2016-04-18 10:23:24 +00:00
2016-04-21 10:56:06 +00:00
attribute_plot = 'status'
2016-04-18 10:23:24 +00:00
for time in range(0, settings.max_time):
2016-04-27 11:30:31 +00:00
value_infectados = 0
value_neutral = 0
value_cured = 0
value_vaccinated = 0
2016-04-18 10:23:24 +00:00
real_time = time * settings.timeout
2016-04-21 10:56:06 +00:00
activity= False
2016-04-18 10:23:24 +00:00
for x in range(0, settings.number_of_nodes):
2016-09-26 17:01:34 +00:00
if attribute_plot in models.networkStatus["agent_%s" % x]:
if real_time in models.networkStatus["agent_%s" % x][attribute_plot]:
2017-04-21 11:55:42 +00:00
if models.networkStatus["agent_%s" % x][attribute_plot][real_time] == 1: ## Infected
2016-04-27 11:30:31 +00:00
value_infectados += 1
activity = True
2017-04-21 11:55:42 +00:00
if models.networkStatus["agent_%s" % x][attribute_plot][real_time] == 0: ## Neutral
2016-04-27 11:30:31 +00:00
value_neutral += 1
activity = True
2017-04-21 11:55:42 +00:00
if models.networkStatus["agent_%s" % x][attribute_plot][real_time] == 2: ## Cured
2016-04-27 11:30:31 +00:00
value_cured += 1
activity = True
2017-04-21 11:55:42 +00:00
if models.networkStatus["agent_%s" % x][attribute_plot][real_time] == 3: ## Vaccinated
2016-04-27 11:30:31 +00:00
value_vaccinated += 1
2016-04-21 10:56:06 +00:00
activity = True
2016-04-18 10:23:24 +00:00
2016-04-21 10:56:06 +00:00
if activity:
x_values.append(real_time)
2016-04-27 11:30:31 +00:00
infected_values.append(value_infectados)
neutral_values.append(value_neutral)
cured_values.append(value_cured)
vaccinated_values.append(value_vaccinated)
2016-04-21 10:56:06 +00:00
activity=False
2016-04-18 10:23:24 +00:00
2016-04-27 11:30:31 +00:00
infected_line = plt.plot(x_values,infected_values,label='Infected')
neutral_line = plt.plot(x_values,neutral_values, label='Neutral')
cured_line = plt.plot(x_values,cured_values, label='Cured')
vaccinated_line = plt.plot(x_values,vaccinated_values, label='Vaccinated')
plt.legend()
plt.savefig('control_model.png')
2017-04-21 11:55:42 +00:00
# plt.show()
2015-12-04 10:41:42 +00:00
2015-12-04 11:32:24 +00:00
#################
# Visualization #
#################
2015-12-04 10:41:42 +00:00
for x in range(0, settings.number_of_nodes):
2016-09-26 17:01:34 +00:00
for attribute in models.networkStatus["agent_%s"%x]:
emotionStatusAux=[]
2016-09-26 17:01:34 +00:00
for t_step in models.networkStatus["agent_%s"%x][attribute]:
prec = 2
2017-04-21 11:55:42 +00:00
output = math.floor(models.networkStatus["agent_%s"%x][attribute][t_step] * (10 ** prec)) / (10 ** prec) # 2 decimals
2016-09-26 17:01:34 +00:00
emotionStatusAux.append((output,t_step,None))
attributes = {}
2016-09-26 17:01:34 +00:00
attributes[attribute] = emotionStatusAux
G.add_node(x, attributes)
2016-01-11 11:21:04 +00:00
print("Done!")
2015-12-17 11:56:39 +00:00
with open('data.txt', 'w') as outfile:
json.dump(models.networkStatus, outfile, sort_keys=True, indent=4, separators=(',', ': '))
2015-12-04 10:41:42 +00:00
nx.write_gexf(G,"test.gexf", version="1.2draft")
2015-12-04 11:32:24 +00:00