import pandas as pd from typing import List from landmarks_manager import LandmarkManager from fastapi.encoders import jsonable_encoder from optimizer import solve_optimization # from refiner import refine_optimization from structs.landmarks import Landmark from structs.landmarktype import LandmarkType from structs.preferences import Preferences, Preference # Helper function to create a .txt file with results def write_data(L: List[Landmark], file_name: str): data = pd.DataFrame() i = 0 for landmark in L : data[i] = jsonable_encoder(landmark) i += 1 data.to_json(file_name, indent = 2, force_ascii=False) def main(coordinates: tuple[float, float]) -> List[Landmark]: manager = LandmarkManager() preferences = Preferences( sightseeing=Preference( name='sightseeing', type=LandmarkType(landmark_type='sightseeing'), score = 5 ), nature=Preference( name='nature', type=LandmarkType(landmark_type='nature'), score = 5 ), shopping=Preference( name='shopping', type=LandmarkType(landmark_type='shopping'), score = 5 ) ) # Create start and finish start = Landmark(name='start', type=LandmarkType(landmark_type='start'), location=coordinates, osm_type='start', osm_id=0, attractiveness=0, must_do=True, n_tags = 0) finish = Landmark(name='finish', type=LandmarkType(landmark_type='finish'), location=coordinates, osm_type='finish', osm_id=0, attractiveness=0, must_do=True, n_tags = 0) # Generate the landmarks from the start location landmarks, landmarks_short = manager.get_landmark_lists(preferences=preferences, center_coordinates=start.location) print([l.name for l in landmarks_short]) #write_data(landmarks, "landmarks.txt") # Insert start and finish to the landmarks list landmarks_short.insert(0, start) landmarks_short.append(finish) # TODO use these parameters in another way max_walking_time = 3 # hours detour = 30 # minutes # First stage optimization base_tour = solve_optimization(landmarks_short, max_walking_time*60, True) # Second stage optimization # refined_tour = refine_optimization(landmarks, base_tour, max_walking_time*60+detour, True) return base_tour if __name__ == '__main__': start = (48.847132, 2.312359) # Café Chez César # start = (47.377859, 8.540585) # Zurich HB main(start)