chore(plan): 74-1 노선 추천 반영 뒤 누가토량 2배 조사 기록

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJqWQpoB1RE7hiaQ2wH8qV
This commit is contained in:
2026-10-07 13:22:50 +09:00
co-authored by Claude Opus 5.5
parent 044f2fe4db
commit 93869d3314
@@ -0,0 +1,96 @@
# 74-1 추천 반영 뒤 누가토량 증가 — 조사
검증 프로젝트 `검증_sub7`(6d3b2812) · 포트 8009 · API·DB 수치로 판정(화면 확인 안 함) · 갈래 = 토공 최소.
측정 뒤 원래대로 복구 — 노선·종단 파일(longitudinal.json)·관·구조물 해시 같음 · 유토값 −12,868.95 그대로.
## 결론 한 줄
2배는 잣대 차이가 아니라 **확정 체인의 「옛 설계 누가거리 이월」 흠** — 옛 노선 측점의 계획고·단면적이 새 노선 같은 누가거리에 통째 복사되고, 일부 측점은 그 옛 계획고(새 지반보다 최대 27 m 아래)로 다시 셈해 측점 하나에 절토 300~540 ㎡.
## 1. 네 값 한 표(㎥ · 다짐 기준 · 끝값 = 유토곡선 끝)
| 경우 | 연장 m | 절 자연 | 절 다짐 | 성 | 끝값 | 최대 | 반입 | 사토 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| ① 지금 노선(= 처음 자동 노선) 확정 | 1,078.0 | 6,754 | 7,108 | 19,977 | −12,869 | +288 | 12,869 | 0 |
| ② 추천(종단 반영 켬) [적용]→[확인] 저장값 | 1,153.2 | 27,621 | 30,865 | 23,626 | **+7,239** | **+14,910** | 0 | 7,239 |
| ② 같은 노선 · 이월 없이 바르게 셈 | 1,153.2 | 7,858 | 8,312 | 27,583 | −19,271 | — | 19,271 | 0 |
| ③ 추천(종단 반영 끔) 저장값(② 뒤 적용) | 1,156.7 | 27,907 | 31,184 | 23,377 | +7,807 | +14,749 | 0 | 7,807 |
| ③ 같은 노선 · 바르게 셈 | 1,156.7 | 9,147 | 9,716 | 24,629 | −14,913 | — | 14,913 | 0 |
| ④ 추천 창 가늠 줄(켬 후보 · 4 m 띠 · 비탈면 뺌) | 1,153.2 | 2,052 | — | 1,986 | — | — | — | — |
| ④ 추천 창 균형 종단 줄(켬 후보) | 1,153.2 | 7,581 | 8,718 | 7,969 | — | — | 0 | 749 |
| 참고 · [초기화]로 ① 노선 복귀(③ 설계 이월) | 1,078.0 | 40,676 | 45,791 | 19,018 | **+26,772** | +27,144 | 0 | 26,772 |
- 「바르게 셈」 = 저장 노선의 횡단 파일 + 기본 설계(`compute_default_designs`) · 계획고 = 지반고 · 평균단면법. 같은 방법이 ② 저장값을 재현(절 자연 27,610 대 27,621)하고 ① 을 8 % 안(−13,878 대 −12,869)으로 맞춤.
- 기본 로직 셋: 추천 전 노선 = 처음 자동 노선(수정본 없음 · 같은 값 ①) · 종단 반영 끔 추천 = ③.
- 같은 노선으로 [초기화]만 해도 끝값 −12,869 → +26,772 — 노선과 무관하게 이월이 값을 바꿈.
## 2. 2배를 만든 항목 — 측점별(②)
② 저장값 절+성 54,491 ㎥ = ① 27,085 의 **2.01배**. 그중 절토(다짐) 30,865 의 약 23,400 이 아래 아홉 측점 몫.
| 측점 | 횡단 계획고 − 종단 계획고 m | 저장 단면 절 ㎡ | 구간 절(다짐) 저장 | 바르게 셈 |
| --- | --- | --- | --- | --- |
| 100 · 120 | −14.3 | 421.7 | 1,116 · 4,837 | 78 · 254 |
| 480 · 484 | −15.2 | 317.2 | 3,652 · 767 | 64 · 15 |
| 580 · 582 | −22.4 | 538.9 | 6,188 · 587 | 49 · 5 |
| 700 | −11.3 | 48.9 | 1,994 | 107 |
| 960 | −5.9 | 147.2 | 1,811 | 97 |
| 1080 | — | 큼 | 2,455 | 80 |
기전(코드):
1. 노선 [확인] → `run_redesign_chain` 이 새 종단을 계획고 = 지반고로 다시 세움(1차 `design_ground_following_profile`) — 종단은 맞음(전 측점 차 0).
2. 이어 옛 노선 설계를 **누가거리로** 얹음 — `merge_cross_section_designs(replace=True)` 가 설계 dict 를 통째 갈아 끼움. 사용자 입력(지반유형·경사·측구)만이 아니라 **결과값**(`design_elevation_m` · `cut/fill_area_m2` · `design_line` · `road_edges`)까지 복사 · 새 노선에 없는 누가거리는 행을 새로 만듦(노선 248: 측점 70 · 행 82).
- 검증: 노선 231 측점 560 의 계획고 831.2477 · 절 2.4404 · 성 4.1035 가 노선 248 측점 560 에 그대로(새 지반 855.5).
3. 확정 뒤 서버 재계산(`recompute_server_side`)은 포장·세월교·미교차 샘플 넓힘·사토장만 다시 셈. 옛 계획고가 새 지반보다 10~27 m 아래인 측점은 사면이 지반과 안 만남 → 「미교차 샘플 넓힘」(`extend_unclosed_sections`)이 횡단을 넓혀 다시 셈 → 단면 절토 수백 ㎡.
4. 나머지 측점은 옛 노선 단면적을 그대로 씀 → 유토곡선이 새 노선 지형과 무관.
가려낸 것(흠 아님):
- 단위·다짐/느슨 환산 — 토사 0.9 · 리핑암 1.15 · 성토 그대로 · 중복 없음(평균단면법 재현이 저장값과 0.04 % 차).
- 구간 두 번 셈 — 없음(측점 70 · 유토 점 70).
- 측점 간격 — 20 m + 구조물 측점 · 정상.
## 3. 잣대 차이(흠을 고친 뒤에도 남는 몫)
바르게 셈한 ② 끝값 −19,271 = ① 의 1.50배 · ③ −14,913 = 1.16배 — 토공 최소 후보가 확정 잣대로는 지금 노선보다 나쁨.
| 노선 | 연장 m | 종단 지반 기울기 평균 | 옆경사 평균(±10 m) | 확정 잣대 끝값(오프라인 · 2.1 m 격자) |
| --- | --- | --- | --- | --- |
| 지금(follow) | 1,078 | 15.7 % | 64.3 % | −7,860 |
| 토공 최소 켬 | 1,153 | 8.6 % | 67.2 % | −11,304 |
| 토공 최소 끔 | 1,157 | 8.0 % | 67.7 % | −10,305 |
- 추천 점수 = 종단기울기 상한 14 % 를 지키는 균형 종단의 횡단 ㎥ — 지금 노선은 지반 기울기가 상한을 넘는 곳이 많아 깊게 깎고 메워야 함(균형 종단 절 25,610 · 성 32,906) → 등고선을 따르는 노선이 유리.
- 확정 체인 = 계획고 = 지반고 · 기울기 막지 않음(② 종단 최대 41.7 % · ① 79 %) → 종단 기울기는 토량에 안 들어가고 옆경사·연장만 들어감 → 등고선을 따라 가파른 옆경사를 더 오래 지나는 추천 노선이 성토 더 큼.
- 추천 창 가늠 줄(절 2,052 · 성 1,986)은 4 m 띠 · 비탈면 뺌이라 확정값의 1/10 수준 — 크기 비교에 못 씀.
## 4. 두 종단 로직 충돌(덧붙임 2)
① 서로 덮어쓰는 곳 — **없음**.
- 추천 균형 종단(`RouteInitial_Profile.balanced_profile`)은 파일·DB·initial_snapshot 에 안 씀 · 프로세스 메모리 후보 묶음(`_POOLS`)과 추천 창 안에서만 삶 · 화면 캐시 쓰기(`writeInitialChoice`)가 `balance` 를 뺌 · [확인] 요청은 노드만 보냄.
- 확정 종단(`Grade_Profile` 1차 지반 따라가기) · `profile_alignment.base_pvi` · B05 화면 종단선은 [확인] 체인이 새로 씀 — 추천 값이 끼어들 길 없음.
- 종단 ㎡ 균형 DP(`Grade_Solver` · `design_alignment_profile`)는 4순위 폴백 — 지금 안 탐. 단 B05 요약의 「불균형 %」(① 14.4 % · ② 4.9 %)가 이 종단 ㎡ 잣대라 세 번째 잣대로 화면에 남음.
② 뜻이 어긋나는 곳.
| 항목 | 추천 균형 종단 | 확정 종단 |
| --- | --- | --- |
| 계획고 | 상한 안 DP · 절성 균형 | 지반고 그대로 |
| 기울기 상한 | 14 % 지킴 | 안 막음(경고만) |
| 측점 | 20 m 만 | 20 m + 구조물·관 측점 |
| 지반 | 탐색 비용면 2.1 m 격자 | 확정 지표면 · 종단 1 m 샘플 |
| 단면 | 리핑암 고정 · 기본 표준단면 · 확폭 없음 | 프로젝트 표준단면 · 곡선 확폭 · 포장·세월교 |
| 관 덮개 | 세기만(켬 후보: 노선 위 관 2 · 모자람 2) | 관 자리 덮개 반영 안 함(1차) |
③ 실제 충돌은 **확정 체인 안** — 새 종단(계획고 = 지반고)과 이월된 옛 횡단 계획고가 측점마다 −27 ~ +5 m 어긋남(① 은 0 곳 · ② 는 대부분 측점). 사용자가 고친 종단 편집은 [확인] 때 안 넘어가는데(`old_longitudinal` 에서 표준단면만 가져옴) 횡단 결과값은 넘어가는 비대칭.
곁가지: 노선 [확인]이 관 옵션 편집분(`pipe_points.json` 의 추가 흙막이 등)을 지우고 기본값으로 다시 만듦 — 설계 의도(「횡단배수 지점은 새로 계산」)이나 사용자 편집 손실.
## 5. 고칠 안
| 안 | 내용 | 위험 |
| --- | --- | --- |
| A 이월 바로잡기(먼저 · 필수) | 이월은 사용자 입력 칸만(지반유형·단면모드·경사·측구·포장 등) · 결과 칸(`design_elevation_m` · 면적 · `design_line` · `road_edges` · `cut_slope_segments` · `slope_unclosed` 등)은 버리고 새 종단 계획고로 다시 셈 · 새 노선에 없는 누가거리는 행을 만들지 않음 · 노선이 바뀐 구간은 이월 안 함(누가거리가 같아도 다른 땅) | 바뀐 구간의 측점별 사용자 설정이 사라짐 — 사라진 측점 수를 알림으로 · B06 이월 시험(`test_b05_b06_save_roundtrip` 등) 손봄 |
| B1 종단 로직 한 벌 — 추천 점수를 확정 잣대로 | 「종단 반영」 켬 = 계획고 = 지반고 + B06 `compute_cross_design` 단면 ㎥(DP 없음 · 지금 균형 종단보다 빠름) · 균형 종단은 참고 줄로만 | 63-4(균형 종단 점수)의 뜻을 버림 · 「토공 최소」가 지금 노선(follow)과 가까워질 수 있음 · 기울기 상한 넘는 노선이 점수에서 안 벌 받음 |
| B2 종단 로직 한 벌 — 확정 체인이 추천 종단을 받음 | [적용] 때 균형 종단(측점 · 계획고)을 넘겨 [확인] 체인 1차 종단으로 씀 | 09-02 사용자 확정(계획고 = 지반고) 뒤집음 · 관 자리 덮개 모자람(켬 후보 2/2) · 사용자가 고친 종단선·base_pvi 의미와 섞임 · 구조물 측점 계획고 따로 보간 필요 |
| C 표시만 바로잡기 | 추천 창에 「확정 잣대 예상 끝값」 한 줄 · 균형 종단 줄에 「확정 종단과 다름 — 참고」 · 가늠 줄 이름을 「띠 가늠」으로 | 순서 뒤집힘(추천이 확정 잣대로 더 나쁨)은 그대로 · 흠(A)과 무관 |
권장 차례 = A 먼저(2배의 원인) → B1 또는 C 는 사용자 결정(09-02 확정과 63-4 의 뜻 중 무엇을 지킬지).