OR Tools ‐ Google PATH_CHEAPEST_ARC 방식 - 100-hours-a-week/12-marong-Wiki GitHub Wiki
📍 OR Tools - Google PATH_CHEAPEST_ARC 방식
시작 노드를 정해서 해당 노드에 대해 Greedy한 방식으로 경로를 연결하여 마니또-마니띠 매칭에서
원형 매칭 방식
을 구현하고자 함
✔️ 채택 이유
- 헝가리안 알고리즘, Blossom 알고리즘은 짝수인 경우에만 완전 매칭이 가능하며, 홀수 유저의 경우 마니또 혹은 마니띠 역할만 가능하거나 운영진이 개입해야 하는 문제가 발생함.
- 시작 노드와, 중간 노드, 종료 노드가 있을 때 종료 노드가 시작 노드와 일방향 매칭(종료 노드의 마니띠가 시작 노드가 되는 경우)이 되는 조건이 만족되면, 홀수의 경우에도 마니또-마니띠 완전 매칭이 가능함
- 다만 매칭 구조를 설계한다고 할 때
BRUTE FORCE
방식(모든 순열의 경우 도출)으로 매칭을 진행하면 최적해는 보장되나 시간복잡도가 O(n!)이므로 20명 이상인 경우 현실적으로 해당 방식으로 매칭하기는 어려움 - 따라서 Greedy한 방식으로 매칭하되, 근사 최적해를 구할 수 있는 매칭 방식인
PATH_CHEAPEST_ARC
방식을 채택
📍 수학적 정의
PATH_CHEAPEST_ARC
는 **외판원 순회 문제(TSP)**의 초기 해를 구하는 탐욕적 알고리즘으로 정의되며, 다음 수식으로 표현된다
✔️ 알고리즘 정의
- 주어진 집합: $V = {v_1, v_2, \dots, v_n}$ (참가자 집합)
- 비용 행렬: $C = [c_{ij}]$, $c_{ij}$는 $v_i$에서 $v_j$로 가는 비용 (작을수록 궁합이 좋음)
✔️ 알고리즘 흐름
-
시작 노드 $v_s$ 선택
-
현재 노드 $v_{\text{cur}}$에서 아직 방문하지 않은 노드 중 최소 비용 $c_{ij}$를 가지는 $v_j$ 선택: $v_{\text{next}} = \arg\min_{j \in V_{\text{unvisited}}} c_{v_{\text{cur}}, j}$
-
$v_{\text{cur}} \to v_{\text{next}}$로 이동하고, $v_{\text{next}}$를 방문 처리
-
모든 노드를 방문할 때까지 반복
-
마지막 노드에서 시작 노드로 돌아가는 경로 추가하여 순환 경로 구성
✔️ 시간 복잡도
- Greedy 방식이므로 $O(n^2)$
📍 실제 적용 예시: 마니또 원형 매칭
참가자 수: 5명
A | B | C | D | E | |
---|---|---|---|---|---|
A | ∞ | 2 | 9 | 10 | 7 |
B | 1 | ∞ | 6 | 4 | 3 |
C | 15 | 7 | ∞ | 8 | 12 |
D | 6 | 3 | 12 | ∞ | 5 |
E | 8 | 6 | 5 | 7 | ∞ |
순환 경로 결과
A → B → E → C → D → A
총 비용: 2 + 3 + 5 + 8 + 6 = 24
📍 개선 전략
1. 비용 제한 (Cost Threshold) 적용
- 특정 $c_{ij} > \text{Threshold}$ 인 경우 연결 차단
- MBTI 궁합, 취미 등을 기준으로 조합 필터링
2. 제약 완화 반복 (Constraint Relaxation Loop)
- 초기엔 제한된 비용만 허용 → 경로 탐색 실패 시 점차 비용 허용 범위 확장
- 예: 50 → 60 → 70 … 100까지
3. Local Search (국소 최적화) 결합
- 초기 탐욕 해에서 시작해, 인접 경로 스왑 등을 통해 총 비용을 감소시킴
- Google OR-Tools에서는
Guided Local Search
,Simulated Annealing
,Tabu Search
등 지원
4. Soft Constraint 기반 비용 설계
- MBTI, 취미, 선호 음식 등을 가중치 기반 비용 함수로 변환하여
cost[i][j]
로 사용 - 다중 요소를 반영한 유사도 기반 최적화 가능
📍 요약
항목 | 설명 |
---|---|
알고리즘 | PATH_CHEAPEST_ARC (탐욕적 순차 연결) |
특성 | O(n²), 순환 경로, 빠름 |
장점 | 빠르고 원형 구조에 적합, 홀수 매칭 가능 |
단점 | 전역 최적 보장 X (보완 필요) |
개선법 | 비용 제한, 제약 완화, Local Search, 가중치 설계 등 |
- 최소 3인 이상은 필요!