경로 추천을 위해 본 프로젝트에서는 Detour와 Loop 두 가지 경로 생성 알고리즘을 사용합니다.
Detour 알고리즘은 사용자가 설정한 목표 거리와 시작–종료 지점 간의 직선 거리가 크게 차이나지 않아, 추가로 늘려야 하는 거리가 비교적 짧은 경우에 사용됩니다. 반면 Loop 알고리즘은 시작 지점과 종료 지점이 동일한 경우나, 목표 거리 대비 직선 거리가 짧아 추가적으로 생성해야 하는 구간이 많은 경우에 활용됩니다.
이와 같은 전략은 모바일 애플리케이션 환경에서 사용자가 길게 대기하는 것을 부담스러워한다는 점과, 동시에 사용자가 보기에 납득할 수 있는 경로를 제시해야 한다는 점을 함께 고려한 결과입니다. 따라서 본 프로젝트에서는 복잡한 최적화보다는 경로 생성 속도와 결과의 합리성 사이에서 균형을 맞추는 방향으로 알고리즘을 설계하였습니다.
(app/course_generator/detour.py)
본 문서는 app/course_generator/detour.py에 구현된 우회(detour) 코스 생성 알고리즘의 목적, 설계 원리, 알고리즘 흐름, 제약 사항 및 개선 권고를 제출용 형식으로 정리한 것이다.
본 알고리즘의 목적은 출발점(start)과 도착점(end) 사이에 단일 중간 웨이포인트를 추가하여, 목표 거리(target_distance)에 근접하는 삼각형 형태의 경로 후보를 생성·평가하고, 허용 오차(tolerance) 내의 경로를 반환하는 것이다.
my: 사용자 현재 위치start, end: 출발·도착 좌표 (lat, lng)target_distance: 목표 거리 (미터)tolerance: 허용 오차 비율'success': True'course': 조건을 만족하는 후보 코스 목록'success': False경로 길이 계산에는 calculate_path_details, 응답 구성에는 build_course_response를 사용한다.
본 알고리즘은 다음과 같은 단순하고 직관적인 설계 원리를 따른다.