"""Example simulation with custom random nodes.""" __author__ = "Jarrod Pas <j.pas@usask.ca>" from random import Random from pydtn import Network, Node, random_trace, random_traffic class RandomNode(Node): """Node that sends packets to a random neightbour.""" def __init__(self, seed=None, **options): """ Create a random node. Keyword Arguments: seed -- seed for random number generator """ super().__init__(**options) self.random = Random(seed) def forward(self, packet): """Pick a random neighbour to send packet to.""" neighbours = list(self.neighbours) if neighbours: target = self.random.choice(neighbours) return {target: 'random'} return {} def main(): """Run a simulation with random nodes.""" duration = 500 nodes = 50 seed = 42 node_options = { 'seed': seed, 'tick_rate': 1, } nodes = { node_id: RandomNode(**node_options) for node_id in range(nodes) } traffic_options = { 'seed': seed, 'speed': 1, } traffic = random_traffic(nodes, **traffic_options) trace_options = { 'seed': seed, } trace = random_trace(nodes, **trace_options) network = Network(nodes, traffic=traffic, trace=trace) network.run(until=duration) print(network.stats_summary) if __name__ == '__main__': exit(main())