PheromoneFlavour.py 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from intelligine.core.exceptions import NoTypeInPheromone, NoCategoryInPheromone
  2. from intelligine.simulation.pheromone.Pheromone import Pheromone
  3. class PheromoneFlavour():
  4. @classmethod
  5. def new_from_raw_data(cls, raw_data):
  6. flavour = {}
  7. for category in raw_data:
  8. pheromones_by_category = raw_data[category]
  9. for type in pheromones_by_category:
  10. distance, intensity = pheromones_by_category[type]
  11. flavour.update({category: {type: Pheromone(category, type, distance, intensity)}})
  12. return cls(flavour)
  13. def get_raw_data(self):
  14. raw_data = {}
  15. for category in self._flavour:
  16. pheromones_by_category = self._flavour[category]
  17. for type in pheromones_by_category:
  18. pheromone = pheromones_by_category[type]
  19. raw_data.update({category: {type: (pheromone.get_distance(), pheromone.get_intensity())}})
  20. return raw_data
  21. def __init__(self, flavour):
  22. self._flavour = flavour
  23. def get_pheromone(self, category, type):
  24. types = self.get_types(category)
  25. if type not in types:
  26. raise NoTypeInPheromone()
  27. return types[type]
  28. def get_types(self, category):
  29. if category not in self._flavour:
  30. raise NoCategoryInPheromone()
  31. return self._flavour[category]
  32. def set_pheromone(self, pheromone):
  33. category = pheromone.get_category()
  34. type = pheromone.get_type()
  35. if category not in self._flavour:
  36. self._flavour[category] = {}
  37. self._flavour[category][type] = pheromone