mirror of
https://github.com/gsi-upm/soil
synced 2025-04-25 06:09:05 +00:00
All tests pass but some features are still missing/unclear: - Mesa agents do not have a `state`, so their "metrics" don't get stored. I will probably refactor this to remove some magic in this regard. This should get rid of the `_state` dictionary and the setitem/getitem magic. - Simulation is still different from a runner. So far only Agent and Environment/Model have been updated.
22 lines
783 B
Python
22 lines
783 B
Python
from scipy.spatial import cKDTree as KDTree
|
|
import networkx as nx
|
|
from . import NetworkAgent, as_node
|
|
|
|
class Geo(NetworkAgent):
|
|
'''In this type of network, nodes have a "pos" attribute.'''
|
|
|
|
def geo_search(self, radius, node=None, center=False, **kwargs):
|
|
'''Get a list of nodes whose coordinates are closer than *radius* to *node*.'''
|
|
node = as_node(node if node is not None else self)
|
|
|
|
G = self.subgraph(**kwargs)
|
|
|
|
pos = nx.get_node_attributes(G, 'pos')
|
|
if not pos:
|
|
return []
|
|
nodes, coords = list(zip(*pos.items()))
|
|
kdtree = KDTree(coords) # Cannot provide generator.
|
|
indices = kdtree.query_ball_point(pos[node], radius)
|
|
return [nodes[i] for i in indices if center or (nodes[i] != node)]
|
|
|