1
0
mirror of https://github.com/gsi-upm/soil synced 2025-08-24 12:02:20 +00:00

Improved docs

Fixed several bugs
Added convenience methods in soil.analysis
This commit is contained in:
J. Fernando Sánchez
2017-10-18 20:28:42 +02:00
parent 78364d89d5
commit a7c51742f6
69 changed files with 30969 additions and 3300 deletions

View File

@@ -1,8 +1,8 @@
import random
from . import NetworkAgent
from . import BaseAgent
class BassModel(NetworkAgent):
class BassModel(BaseAgent):
"""
Settings:
innovation_prob

View File

@@ -1,8 +1,8 @@
import random
from . import NetworkAgent
from . import BaseAgent
class BigMarketModel(NetworkAgent):
class BigMarketModel(BaseAgent):
"""
Settings:
Names:

View File

@@ -1,7 +1,7 @@
from . import NetworkAgent
from . import BaseAgent
class CounterModel(NetworkAgent):
class CounterModel(BaseAgent):
"""
Dummy behaviour. It counts the number of nodes in the network and neighbors
in each step and adds it to its state.
@@ -16,7 +16,7 @@ class CounterModel(NetworkAgent):
self.state['total'] = total
class AggregatedCounter(NetworkAgent):
class AggregatedCounter(BaseAgent):
"""
Dummy behaviour. It counts the number of nodes in the network and neighbors
in each step and adds it to its state.
@@ -28,4 +28,5 @@ class AggregatedCounter(NetworkAgent):
neighbors = len(list(self.get_neighboring_agents()))
self.state['times'] = self.state.get('times', 0) + 1
self.state['neighbors'] = self.state.get('neighbors', 0) + neighbors
self.state['total'] = self.state.get('total', 0) + total
self.state['total'] = total = self.state.get('total', 0) + total
self.debug('Running for step: {}. Total: {}'.format(self.now, total))

View File

@@ -1,9 +1,9 @@
import random
import numpy as np
from . import NetworkAgent
from . import BaseAgent
class SpreadModelM2(NetworkAgent):
class SpreadModelM2(BaseAgent):
"""
Settings:
prob_neutral_making_denier
@@ -104,7 +104,7 @@ class SpreadModelM2(NetworkAgent):
neighbor.state['id'] = 2 # Cured
class ControlModelM2(NetworkAgent):
class ControlModelM2(BaseAgent):
"""
Settings:
prob_neutral_making_denier

View File

@@ -1,9 +1,9 @@
import random
import numpy as np
from . import FSM, NetworkAgent, state
from . import FSM, state
class SISaModel(FSM, NetworkAgent):
class SISaModel(FSM):
"""
Settings:
neutral_discontent_spon_prob

View File

@@ -1,8 +1,8 @@
import random
from . import NetworkAgent
from . import BaseAgent
class SentimentCorrelationModel(NetworkAgent):
class SentimentCorrelationModel(BaseAgent):
"""
Settings:
outside_effects_prob

View File

@@ -72,9 +72,10 @@ class BaseAgent(nxsim.BaseAgent, metaclass=MetaAgent):
return None
def run(self):
interval = self.env.interval
while self.alive:
res = self.step()
yield res or self.env.timeout(self.env.interval)
yield res or self.env.timeout(interval)
def die(self, remove=False):
self.alive = False
@@ -99,7 +100,10 @@ class BaseAgent(nxsim.BaseAgent, metaclass=MetaAgent):
count += 1
return count
def get_agents(self, state_id=None, limit_neighbors=False, **kwargs):
def count_neighboring_agents(self, state_id=None):
return len(super().get_agents(state_id, limit_neighbors=True))
def get_agents(self, state_id=None, limit_neighbors=False, iterator=False, **kwargs):
if limit_neighbors:
agents = super().get_agents(state_id, limit_neighbors)
else:
@@ -113,9 +117,13 @@ class BaseAgent(nxsim.BaseAgent, metaclass=MetaAgent):
return False
return True
return filter(matches_all, agents)
f = filter(matches_all, agents)
if iterator:
return f
return list(f)
def log(self, message, level=logging.INFO, **kwargs):
def log(self, message, *args, level=logging.INFO, **kwargs):
message = message + " ".join(str(i) for i in args)
message = "\t@{:>5}:\t{}".format(self.now, message)
for k, v in kwargs:
message += " {k}={v} ".format(k, v)
@@ -130,11 +138,6 @@ class BaseAgent(nxsim.BaseAgent, metaclass=MetaAgent):
def info(self, *args, **kwargs):
return self.log(*args, level=logging.INFO, **kwargs)
class NetworkAgent(BaseAgent, nxsim.BaseNetworkAgent):
def count_neighboring_agents(self, state_id=None):
return self.count_agents(state_id, limit_neighbors=True)
def state(func):
@@ -150,7 +153,7 @@ def state(func):
try:
self.state['id'] = next_state.id
except AttributeError:
raise NotImplemented('State id %s is not valid.' % next_state)
raise ValueError('State id %s is not valid.' % next_state)
return when
func_wrapper.id = func.__name__