better errorhandling, slimmed down optimizer
All checks were successful
Build and push docker image / Build (pull_request) Successful in 1m40s
Build and release APK / Build APK (pull_request) Successful in 5m26s

This commit is contained in:
2024-08-05 15:27:25 +02:00
parent 71d9554d97
commit 89511f39cb
9 changed files with 138 additions and 70 deletions

View File

@@ -29,9 +29,11 @@ def new_trip(preferences: Preferences, start: tuple[float, float], end: tuple[fl
:return: the uuid of the first landmark in the optimized route
'''
if preferences is None:
raise ValueError("Please provide preferences in the form of a 'Preference' BaseModel class.")
raise HTTPException(status_code=406, detail="Preferences not provided")
if preferences.shopping.score == 0 and preferences.sightseeing.score == 0 and preferences.nature.score == 0:
raise HTTPException(status_code=406, detail="All preferences are 0.")
if start is None:
raise ValueError("Please provide the starting coordinates as a tuple of floats.")
raise HTTPException(status_code=406, detail="Start coordinates not provided")
if end is None:
end = start
logger.info("No end coordinates provided. Using start=end.")
@@ -50,7 +52,12 @@ def new_trip(preferences: Preferences, start: tuple[float, float], end: tuple[fl
landmarks_short.append(end_landmark)
# First stage optimization
base_tour = optimizer.solve_optimization(preferences.max_time_minute, landmarks_short)
try:
base_tour = optimizer.solve_optimization(preferences.max_time_minute, landmarks_short)
except ArithmeticError:
raise HTTPException(status_code=500, detail="No solution found")
except TimeoutError:
raise HTTPException(status_code=500, detail="Optimzation took too long")
# Second stage optimization
refined_tour = refiner.refine_optimization(landmarks, base_tour, preferences.max_time_minute, preferences.detour_tolerance_minute)