Advertisement
Guest User

Untitled

a guest
Apr 19th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.35 KB | None | 0 0
  1. from pymote.algorithm import NodeAlgorithm
  2. from pymote.message import Message
  3. import random
  4.  
  5. class Saturation(NodeAlgorithm):
  6. #required_params = {}
  7. default_params = {'neighborsKey': 'Neighbors', 'numNeighboursKey': 'numNeighbours', 'eccentrityKey': 'eccentrity', 'parentKey': 'parent'}
  8.  
  9. def initializer(self):
  10. ini_nodes = []
  11. isInitiator = False
  12.  
  13. for node in self.network.nodes():
  14. node.memory[self.neighborsKey] = node.memory['neighborsTree']
  15. node.memory[self.eccentrityKey] = 0
  16.  
  17. node.memory[self.numNeighboursKey] = len(node.memory[self.neighborsKey])
  18. node.status = 'AVAILABLE'
  19.  
  20. print "INITIATORS: "
  21. isInitiator = random.choice([True, False])
  22. if isInitiator:
  23. ini_nodes.append(node)
  24. print str(node)
  25.  
  26. for ini_node in ini_nodes:
  27. self.network.outbox.insert(0, Message(header=NodeAlgorithm.INI,
  28. destination=ini_node))
  29.  
  30. def available(self, node, message):
  31.  
  32. if message.header == NodeAlgorithm.INI:
  33. status = 'ACTIVE'
  34. destination_nodes = list(node.memory[self.neighborsKey])
  35. header = 'Activate'
  36. node.send(Message(destination=destination_nodes,
  37. header=header,
  38. data="Activate"))
  39.  
  40. if len(destination_nodes) == 1:
  41. status = 'PROCESSING'
  42. header = 'Message'
  43. data = node.memory[self.eccentrityKey]
  44. #zapisi parenta
  45. node.send(Message(destination=destination_nodes,
  46. header=header,
  47. data=data))
  48. else:
  49. status = 'ACTIVE'
  50.  
  51. elif (message.header == 'Activate'):
  52. header = 'Activate'
  53. destination_nodes = list(node.memory[self.neighborsKey])
  54. destination_nodes.remove(message.source)
  55. node.send(Message(destination=destination_nodes,
  56. header=header,
  57. data="Activate"))
  58.  
  59. destination_nodes = list(node.memory[self.neighborsKey])
  60. if len(destination_nodes) == 1:
  61. status = 'PROCESSING'
  62. header = 'Message'
  63. data = node.memory[self.eccentrityKey]+1
  64. #zapisi parenta
  65. node.send(Message(destination=destination_nodes,
  66. header=header,
  67. data=data))
  68. else:
  69. status = 'ACTIVE'
  70.  
  71. node.status = status
  72.  
  73. def active(self, node, message):
  74. status = 'ACTIVE'
  75.  
  76. if (message.header == 'Message'):
  77. if (message.data+1 > node.memory[self.eccentrityKey]):
  78. node.memory[self.eccentrityKey] = message.data+1
  79. print "ECCENTRITY: " + str(node) + str(message.source) + "+1"
  80.  
  81. destination_nodes = list(node.memory[self.neighborsKey])
  82. destination_nodes.remove(message.source)
  83. node.memory[self.neighborsKey] = destination_nodes
  84.  
  85. if len(destination_nodes) == 1:
  86. status = 'PROCESSING'
  87. header = 'Message'
  88. data = node.memory[self.eccentrityKey]
  89. #zapisi parenta
  90. node.send(Message(destination=destination_nodes,
  91. header=header,
  92. data=data))
  93.  
  94. node.status = status
  95.  
  96. def processing(self, node, message):
  97. status = 'PROCESSING'
  98. if (message.header == 'Message'):
  99. status = 'SATURATED'
  100. node.memory[self.parentKey] = message.source
  101. if (message.data+1 > node.memory[self.eccentrityKey]):
  102. node.memory[self.eccentrityKey] = message.data+1
  103.  
  104. elif (message.header == 'Distance'):
  105. node.memory[self.parentKey] = message.source
  106. if (message.data+1 > node.memory[self.eccentrityKey]):
  107. node.memory[self.eccentrityKey] = message.data+1
  108. destination_nodes = list(node.memory[self.neighborsKey])
  109. destination_nodes.remove(node.memory[self.parentKey])
  110. if (destination_nodes):
  111. header = 'Distance'
  112. data = node.memory[self.eccentrityKey]
  113. node.send(Message(destination=destination_nodes,
  114. header=header,
  115. data=data))
  116.  
  117. node.status = status
  118.  
  119.  
  120. def saturated(self, node, message):
  121. print "#####################"
  122. destination_nodes = list(node.memory[self.neighborsKey])
  123. destination_nodes.remove(node.memory[self.parentKey])
  124. if(destination_nodes):
  125. header = 'Distance'
  126. data = node.memory[self.eccentrityKey]
  127. node.send(Message(destination=destination_nodes,
  128. header=header,
  129. data=data))
  130.  
  131. node.status = 'DONE'
  132.  
  133.  
  134. def done():
  135. pass
  136.  
  137.  
  138. STATUS = {
  139. 'ACTIVE': active,
  140. 'AVAILABLE': available,
  141. 'PROCESSING': processing,
  142. 'SATURATED': saturated,
  143. 'DONE': done
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement