1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- from intelligine.core.exceptions import BestPheromoneHere, NoPheromone
- from intelligine.cst import PHEROMON_INFOS
- from intelligine.simulation.pheromone.PheromoneFlavour import PheromoneFlavour
- from intelligine.simulation.pheromone.Pheromone import Pheromone
-
-
- class PheromonesManager():
-
- def __init__(self, context):
- self._context = context
-
- def get_flavour(self, position):
- point_pheromones = self._context.metas.value.get(PHEROMON_INFOS,
- position,
- allow_empty=True,
- empty_value={})
- return PheromoneFlavour(point_pheromones)
-
- current_check = point_pheromones
- for prepare_key in prepare:
- if prepare_key not in current_check:
- current_check[prepare_key] = {}
- current_check = current_check[prepare_key]
-
- return point_pheromones
-
- def set_flavour(self, position, flavour):
- self._context.metas.value.set(PHEROMON_INFOS, position, flavour.get_raw_data())
-
- def get_pheromone(self, position, category, type, allow_empty=False, empty_value=None):
- # TODO: empty_value as du sens ?
- flavour = self.get_flavour(position)
- try:
- return flavour.get_pheromone(category, type)
- except NoPheromone:
- if allow_empty:
- return Pheromone()
- raise
-
-
- pheromone = pheromones
- for key in address[:-1]:
- pheromone = pheromone[key]
-
- if address[-1] not in pheromone:
- if allow_empty:
- pheromone[address[-1]] = empty_value
- else:
- raise KeyError()
-
- return pheromone[address[-1]]
-
- def increment_with_pheromone(self, position, apposed_pheromone):
- flavour = self.get_flavour(position)
- try:
- position_pheromone = flavour.get_pheromone(apposed_pheromone.get_category(), apposed_pheromone.get_type())
- except NoPheromone:
- position_pheromone = Pheromone(apposed_pheromone.get_category(),
- apposed_pheromone.get_type(),
- distance=apposed_pheromone.get_distance())
-
- position_pheromone.increment_intensity(apposed_pheromone.get_intensity())
-
- if apposed_pheromone.get_distance() < position_pheromone.get_distance():
- position_pheromone.set_distance(apposed_pheromone.get_distance())
-
- flavour.update_pheromone(position_pheromone)
- self.set_flavour(position, flavour)
-
- if apposed_pheromone.get_distance() > position_pheromone.get_distance():
- raise BestPheromoneHere(position_pheromone.get_distance())
|