From 8a62e68dddd083966948e4f24a3dda7e0020457c Mon Sep 17 00:00:00 2001 From: Helldragon67 Date: Sun, 4 Aug 2024 11:32:53 +0200 Subject: [PATCH] first changes --- .../src/parameters/landmark_parameters.yaml | 2 +- backend/src/tester.py | 23 ++++++---- backend/src/utils/landmarks_manager.py | 43 +++++++++++++------ 3 files changed, 44 insertions(+), 24 deletions(-) diff --git a/backend/src/parameters/landmark_parameters.yaml b/backend/src/parameters/landmark_parameters.yaml index 5de9c48..777c18f 100644 --- a/backend/src/parameters/landmark_parameters.yaml +++ b/backend/src/parameters/landmark_parameters.yaml @@ -1,6 +1,6 @@ city_bbox_side: 5000 #m radius_close_to: 50 church_coeff: 0.8 -park_coeff: 1.2 +park_coeff: 1.0 tag_coeff: 10 N_important: 40 diff --git a/backend/src/tester.py b/backend/src/tester.py index 8a39967..1966f7d 100644 --- a/backend/src/tester.py +++ b/backend/src/tester.py @@ -14,7 +14,7 @@ logger = logging.getLogger(__name__) def test(start_coords: tuple[float, float], finish_coords: tuple[float, float] = None) -> list[Landmark]: - manager = LandmarkManager() + optimizer = Optimizer() refiner = Refiner(optimizer=optimizer) @@ -23,7 +23,7 @@ def test(start_coords: tuple[float, float], finish_coords: tuple[float, float] = sightseeing=Preference( name='sightseeing', type='sightseeing', - score = 5), + score = 3), nature=Preference( name='nature', type='nature', @@ -33,9 +33,11 @@ def test(start_coords: tuple[float, float], finish_coords: tuple[float, float] = type='shopping', score = 5), - max_time_minute=180, + max_time_minute=120, detour_tolerance_minute=30 ) + + manager = LandmarkManager(max_time = preferences.max_time_minute + preferences.detour_tolerance_minute) # Create start and finish if finish_coords is None : @@ -77,9 +79,12 @@ def test(start_coords: tuple[float, float], finish_coords: tuple[float, float] = return linked_tour -#test(tuple((48.8344400, 2.3220540))) # Café Chez César -#test(tuple((48.8375946, 2.2949904))) # Point random -#test(tuple((47.377859, 8.540585))) # Zurich HB -#test(tuple((45.7576485, 4.8330241))) # Lyon Bellecour -test(tuple((48.5848435, 7.7332974))) # Strasbourg Gare -#test(tuple((48.2067858, 16.3692340))) # Vienne +# test(tuple((48.8344400, 2.3220540))) # Café Chez César +# test(tuple((48.8375946, 2.2949904))) # Point random +# test(tuple((47.377859, 8.540585))) # Zurich HB +# test(tuple((45.7576485, 4.8330241))) # Lyon Bellecour +# test(tuple((48.5848435, 7.7332974))) # Strasbourg Gare +# test(tuple((48.2067858, 16.3692340))) # Vienne +# test(tuple((46.996625, 6.935716))) # Neuchatel +# test(tuple((35.897243, 15.511951))) # La Valette +test(tuple((46.51724716185816, 6.629345889640165))) # Lausanne diff --git a/backend/src/utils/landmarks_manager.py b/backend/src/utils/landmarks_manager.py index 2ba9100..17c1506 100644 --- a/backend/src/utils/landmarks_manager.py +++ b/backend/src/utils/landmarks_manager.py @@ -33,20 +33,29 @@ class LandmarkManager: N_important: int # number of important landmarks to consider - def __init__(self) -> None: + def __init__(self, max_time: int) -> None: with constants.AMENITY_SELECTORS_PATH.open('r') as f: self.amenity_selectors = yaml.safe_load(f) with constants.LANDMARK_PARAMETERS_PATH.open('r') as f: parameters = yaml.safe_load(f) - self.city_bbox_side = parameters['city_bbox_side'] + max_bbox_side = parameters['city_bbox_side'] self.radius_close_to = parameters['radius_close_to'] self.church_coeff = parameters['church_coeff'] self.park_coeff = parameters['park_coeff'] self.tag_coeff = parameters['tag_coeff'] self.N_important = parameters['N_important'] + with constants.OPTIMIZER_PARAMETERS_PATH.open('r') as f: + parameters = yaml.safe_load(f) + speed = parameters['average_walking_speed'] + detour = parameters['detour_factor'] + + max_walk_dist = (max_time/2)/60*speed*1000/detour + self.city_bbox_side = min(max_walk_dist, max_bbox_side) + + self.overpass = Overpass() CachingStrategy.use(JSON, cacheDir=constants.OSM_CACHE_DIR) @@ -72,22 +81,22 @@ class LandmarkManager: L = [] bbox = self.create_bbox(center_coordinates) # list for sightseeing - if preferences.sightseeing.score != 0: - score_function = lambda loc, n_tags: int((self.count_elements_close_to(loc) + ((n_tags**1.2)*self.tag_coeff) )*self.church_coeff) + if preferences.sightseeing.score != 0: # self.count_elements_close_to(loc) + + score_function = lambda loc, n_tags: int((((n_tags**1.2)*self.tag_coeff) )*self.church_coeff) L1 = self.fetch_landmarks(bbox, self.amenity_selectors['sightseeing'], SIGHTSEEING, score_function) self.correct_score(L1, preferences.sightseeing) L += L1 # list for nature if preferences.nature.score != 0: - score_function = lambda loc, n_tags: int((self.count_elements_close_to(loc) + ((n_tags**1.2)*self.tag_coeff) )*self.park_coeff) + score_function = lambda loc, n_tags: int((((n_tags**1.2)*self.tag_coeff) )*self.park_coeff) L2 = self.fetch_landmarks(bbox, self.amenity_selectors['nature'], NATURE, score_function) self.correct_score(L2, preferences.nature) L += L2 # list for shopping if preferences.shopping.score != 0: - score_function = lambda loc, n_tags: int(self.count_elements_close_to(loc) + ((n_tags**1.2)*self.tag_coeff)) + score_function = lambda loc, n_tags: int(((n_tags**1.2)*self.tag_coeff)) L3 = self.fetch_landmarks(bbox, self.amenity_selectors['shopping'], SHOPPING, score_function) self.correct_score(L3, preferences.shopping) L += L3 @@ -296,19 +305,25 @@ class LandmarkManager: break if "wikipedia" in tag: - n_tags += 3 # wikipedia entries count more + n_tags += 1 # wikipedia entries count more - if tag == "wikidata": - Q = elem.tag('wikidata') - site = Site("wikidata", "wikidata") - item = ItemPage(site, Q) - item.get() - n_languages = len(item.labels) - n_tags += n_languages/10 + if "viewpoint" in tag: + n_tags += 10 # wikipedia entries count more + + # if tag == "wikidata": + # Q = elem.tag('wikidata') + # site = Site("wikidata", "wikidata") + # item = ItemPage(site, Q) + # item.get() + # n_languages = len(item.labels) + # n_tags += n_languages/10 if elem_type != "nature": if "leisure" in tag and elem.tag('leisure') == "park": elem_type = "nature" + + if elem_type == "nature": + n_tags += 1 if landmarktype != SHOPPING: if "shop" in tag: