PheromoneFlavour.py 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. if category not in flavour:
  12. flavour[category] = {}
  13. flavour[category][type] = Pheromone(category, type, distance, intensity)
  14. return cls(flavour)
  15. def get_raw_data(self):
  16. raw_data = {}
  17. for category in self._flavour:
  18. pheromones_by_category = self._flavour[category]
  19. for type in pheromones_by_category:
  20. pheromone = pheromones_by_category[type]
  21. if category not in raw_data:
  22. raw_data[category] = {}
  23. raw_data[category][type] = (pheromone.get_distance(), pheromone.get_intensity())
  24. return raw_data
  25. def __init__(self, flavour):
  26. self._flavour = flavour
  27. def get_pheromone(self, category, type):
  28. types = self.get_types(category)
  29. if type not in types:
  30. raise NoTypeInPheromone()
  31. return types[type]
  32. def get_types(self, category):
  33. if category not in self._flavour:
  34. raise NoCategoryInPheromone()
  35. return self._flavour[category]
  36. def set_pheromone(self, pheromone):
  37. category = pheromone.get_category()
  38. type = pheromone.get_type()
  39. if category not in self._flavour:
  40. self._flavour[category] = {}
  41. self._flavour[category][type] = pheromone