Browse Source

PheromoneFlavour: contain Pheromone instead simple tuple

Bastien Sevajol 9 years ago
parent
commit
d3580dd814

+ 28 - 13
intelligine/simulation/pheromone/PheromoneFlavour.py View File

4
 
4
 
5
 class PheromoneFlavour():
5
 class PheromoneFlavour():
6
 
6
 
7
-    def __init__(self, point_data):
8
-        self._point_data = point_data
7
+    @classmethod
8
+    def new_from_raw_data(cls, raw_data):
9
+        flavour = {}
10
+        for category in raw_data:
11
+            pheromones_by_category = raw_data[category]
12
+            for type in pheromones_by_category:
13
+                distance, intensity = pheromones_by_category[type]
14
+                flavour.update({category: {type: Pheromone(category, type, distance, intensity)}})
15
+        return cls(flavour)
16
+
17
+    def get_raw_data(self):
18
+        raw_data = {}
19
+        for category in self._flavour:
20
+            pheromones_by_category = self._flavour[category]
21
+            for type in pheromones_by_category:
22
+                pheromone = pheromones_by_category[type]
23
+                raw_data.update({category: {type: (pheromone.get_distance(), pheromone.get_intensity())}})
24
+        return raw_data
25
+
26
+    def __init__(self, flavour):
27
+        self._flavour = flavour
9
 
28
 
10
     def get_pheromone(self, category, type):
29
     def get_pheromone(self, category, type):
11
         types = self.get_types(category)
30
         types = self.get_types(category)
12
         if type not in types:
31
         if type not in types:
13
             raise NoTypeInPheromone()
32
             raise NoTypeInPheromone()
14
-        distance, intensity = types[type]
15
-        return Pheromone(category, type, distance, intensity)
33
+        return types[type]
16
 
34
 
17
     def get_types(self, category):
35
     def get_types(self, category):
18
-        if category not in self._point_data:
36
+        if category not in self._flavour:
19
             raise NoCategoryInPheromone()
37
             raise NoCategoryInPheromone()
20
-        return self._point_data[category]
38
+        return self._flavour[category]
21
 
39
 
22
-    def update_pheromone(self, pheromone):
40
+    def set_pheromone(self, pheromone):
23
         category = pheromone.get_category()
41
         category = pheromone.get_category()
24
         type = pheromone.get_type()
42
         type = pheromone.get_type()
25
 
43
 
26
-        if category not in self._point_data:
27
-            self._point_data[category] = {}
44
+        if category not in self._flavour:
45
+            self._flavour[category] = {}
28
 
46
 
29
-        self._point_data[category][type] = (pheromone.get_distance(), pheromone.get_intensity())
30
-
31
-    def get_raw_data(self):
32
-        return self._point_data
47
+        self._flavour[category][type] = pheromone

+ 2 - 2
intelligine/synergy/stigmergy/PheromonesManager.py View File

14
                                                          position,
14
                                                          position,
15
                                                          allow_empty=True,
15
                                                          allow_empty=True,
16
                                                          empty_value={})
16
                                                          empty_value={})
17
-        return PheromoneFlavour(point_pheromones)
17
+        return PheromoneFlavour.new_from_raw_data(point_pheromones)
18
 
18
 
19
         current_check = point_pheromones
19
         current_check = point_pheromones
20
         for prepare_key in prepare:
20
         for prepare_key in prepare:
64
         if apposed_pheromone.get_distance() < position_pheromone.get_distance():
64
         if apposed_pheromone.get_distance() < position_pheromone.get_distance():
65
             position_pheromone.set_distance(apposed_pheromone.get_distance())
65
             position_pheromone.set_distance(apposed_pheromone.get_distance())
66
 
66
 
67
-        flavour.update_pheromone(position_pheromone)
67
+        flavour.set_pheromone(position_pheromone)
68
         self.set_flavour(position, flavour)
68
         self.set_flavour(position, flavour)
69
 
69
 
70
         if apposed_pheromone.get_distance() > position_pheromone.get_distance():
70
         if apposed_pheromone.get_distance() > position_pheromone.get_distance():

+ 1 - 1
intelligine/tests/simulation/pheromone/TestDirection.py View File

28
         if re_init:
28
         if re_init:
29
             self._context = Context()
29
             self._context = Context()
30
         for position in pheromones:
30
         for position in pheromones:
31
-            self._context.pheromones().set_flavour(position, PheromoneFlavour(pheromones[position]))
31
+            self._context.pheromones().set_flavour(position, PheromoneFlavour.new_from_raw_data(pheromones[position]))
32
 
32
 
33
     def _test_direction_for_point(self, pheromones, direction, pheromone_type=PHEROMON_DIR_EXPLO,
33
     def _test_direction_for_point(self, pheromones, direction, pheromone_type=PHEROMON_DIR_EXPLO,
34
                                   reference_point=_p(CENTER), re_init=True):
34
                                   reference_point=_p(CENTER), re_init=True):