# ASLA 도로 적응 실험 구현과 검수 기록

## 구현 상태와 목적

이 모듈은 목적지, 교차 차량, 보행자, 신호, 정차 차량, 젖은 노면을 갖는 **3D로 표시하는 평면 운동학 폐쇄 가상 도로**에서 실제 관측 → 신경망 학습 → 선택 → 분리 주행 검증 → 적용 → 복구를 실행한다. 실제 공공도로, 실차, 카메라, ROS2, SLAM은 연결되어 있지 않다. 운전자 화면은 동일한 시뮬레이션 상태의 원근 렌더링이며 카메라 인식 결과가 아니다. 센서·마찰·위치는 시뮬레이터가 제공하는 특권 관측이다. 실도로 자율주행이나 ASLA 1.0~3.0 정본 완성을 입증하지 않는다.

기존 공장 앱과 데이터는 유지하며 같은 페이지의 `도로 적응 실험`에서 실행한다. Cloudflare Workers는 작은 학습 작업과 제어 API, D1은 소유자별 메타데이터·감사 체인, R2는 실제 파라미터·체크포인트를 저장한다. 브라우저의 `이 기기에서 실험`은 같은 계산 엔진을 사용하는 명시적 별도 모드이며, 서버 서명 없이 기기의 Worker에서 계산하고 IndexedDB에 저장한다. 저장 불가 상태는 명시하며, 다른 기기로 옮길 때는 체크포인트를 내보내야 한다. 이 모드는 서버 인증을 우회하지 않는다. 페이지를 닫으면 주행과 자동 반복은 멈춘다.

## 구조와 알고리즘

| 계층 | 구현 | 한계 |
|---|---|---|
| 도로·차량 | 120m 정방형, 3×3 교차로 노드, 12m 도로 폭, BFS 기준 경로, 연속 운동학 bicycle, 0.1초×3 서브스텝 | 타이어 동역학·충돌 형상·신호 규칙은 근사 |
| 관측 | 7방향 25m 거리, 속도, 목표 방향 sin/cos, 횡오차, 마찰, 적신호, 잔여거리, 최소거리, 교차로, bias: 17개 | 영상·LiDAR 원시 데이터의 지각 모델 아님 |
| 주행 | 17→24 tanh→7 Q 신경망; 좌/직진/우 가속·유지 및 제동 | 기준 경로 추종 제어에 잔차 조향과 가감속을 더함; 순수 학습 자율주행 아님 |
| 학습 | 실제 TD 역전파, replay 최대700, batch8, 할인 .96, lr .003, target network; 초기 규칙 시연 보조와 epsilon 탐색 | 훈련은 시연과 독립 안전 제어를 사용; 무지원 회피 성공으로 해석 불가 |
| 독립 안전 제어 | 전방 거리·제동거리·신호로 감속 | 개입 횟수 별도 기록; 충돌 방지 보장은 없으며 시뮬레이션 충돌도 발생 |
| 로컬/운영 분리 | dry/wet/works 각 로컬 모델; 관측은 후보만 갱신; 검증 후 수동 적용 | UI의 세 로컬 학습기는 세 실기체나 분산 네트워크 연결을 의미하지 않음 |
| 1.0 참조 | Reject/Defer/Memorize/Federate, 목표 맥락 주행 검증, delta cosine·표본·고정 trust 가중 집계 후 재검증 | 기존 ASLA 제조 데이터 코드 재사용 아님; 정본 multi-anchor CVSF-MA 재현 아님 |
| 2.0 연구 | πφ 선택, ρψ 파라미터/메모리 배치, fω 집계 계수: 6특징·2arm LinUCB, 실제 행렬/점수 갱신 | 독립 주행 검증의 보상·반사실 대용치로 학습; 배포 후 인과 효과나 원문 설계의 완전 구현 아님 |
| 3.0 연구 | 관측+one-hot 행동→다음17관측 residual 선형 회귀; Q+할인 미래 Q+진행−위험으로 행동 비교 | 한 스텝 회귀; 범용 세계모델·확률적 맥락 전이·장기 계획 검증 아님 |
| 3.0 적용 조건 | ≥200 관측, 훈련 MSE<.08, 별도 3시드에서 동일 신경망의 DQN 대비 안전 비회귀·도달 비회귀·보상 >.02; 검증 도로와 목적지 일치 | 통과 전에는 DQN 유지; 낮은 훈련 오차만으로 적용하지 않음 |

주행 추론은 미래의 실제 시뮬레이터 상태를 몰래 실행해 고르지 않는다. 회귀 모델이 예측한 관측으로 후보 행동을 비교한다. 기본 모드는 1.0 참조 선택이다. 훈련 데이터 수집에는 규칙 시연이 남으며, 도로가 비어 있을 때 조향 행동 제한과 기준 경로 제어가 작동한다. `스스로 판단`은 이 명시된 제어·관측 범위의 행동 선택이다.

## 실행 순서

1. 도로 지도 또는 운전자 시점을 선택하고 목적지·노면을 지정한다.
2. 자율주행 시작: 현재 운영 모델이 행동을 선택한다. 자동 학습을 켜면 실제 주행 전이가 해당 노면의 로컬 후보와 전이 모델에 학습된다.
3. `자율 학습 30회`: 세 로컬 학습기를 순환하여 실제 시뮬레이션 에피소드를 수집하고 역전파한다. 손실·관측 수·갱신 수를 확인한다.
4. `선택·검증`: 분리 검증에서 도달·안전 회귀가 있으면 거절한다. 개선이 없으면 기억한다. 통과한 후보만 적용 버튼이 열린다.
5. `검증 모델 적용`: 이전 파라미터를 보존하고 적용한다. 다음120스텝 또는 목적지 도달까지 Canary를 관찰하며 충돌·이탈·적신호 위반 시 이전 신경망과 전이 모델을 함께 복구한다.
6. `동결 평가`: 학습하지 않는 별도 시드 시험과 원시 결과를 기록한다. 평가 JSON과 모델 체크포인트를 내려받을 수 있다.
7. 종료 후 학습·선택·새 주행 자동 반복은 사용자가 켤 수 있다. 기본은 꺼져 있다. 개선 없는 후보는 자동 반복에서도 강제 적용하지 않는다.

## 시험 프로토콜과 해석

| 구분 | 규격 |
|---|---|
| 훈련 | 오프라인 seed=10000+에피소드번호×37; 세 노면 순환; 온라인은 실제 주행 seed와 trace 기록 |
| 선택 검증 | 21001,21007,21011; 현재 도로·목적지·안전 제어 조건; 신경망/선택 정책에 시험 데이터 fitting 없음 |
| 보류 시험 | 41001,41011,41021 × dry/wet/works × 4모드; 파라미터와 정책 고정 |
| 대조군 | 0=초기 미학습 신경망, 1=적용 신경망, 2=동일 신경망(선택 이력은 별도), 3=검증 통과한 전이 제어, 미통과 시 동일 신경망 |
| KPI | 도달률, 충돌/이탈/적신호 위반, 보상, 스텝, 이동거리, 안전 제어 개입, 정지, timeout |
| 업데이트 실패 | 호환/활용 범위 위반, 최소 에피소드 부족, 안전/도달 회귀, 보상 개선≤.02, 검증 후 revision 변경 |
| 실도로 진입 | 현재 HOLD. ODD·센서·법적/현장 동의·폐쇄 주행장·실기체 안전 체계·독립 검수 미확정 |

고정 3시드는 단위 회귀 시험이다. 같은 시드를 반복 조회하며 선택하면 검증 세트에도 과적합할 수 있다. 통계적 성능 입증이나 새로운 도로 일반화의 증거가 아니다. 1과2의 동일 동결 모델 결과를 2.0 우월성으로 해석하면 안 된다. 추가 CLI `experiments/road/compare.mjs`는 동일한 수집 경험·로컬 gradient를 재사용하여 미학습/단독R1/일반FedAvg/고정선택/학습선택/검증된전이의 여섯 학습 대조군을 3회 반복한다. 원시 결과는 `comparison.json`이다. 학습선택은 각 반복에서 새로 초기화된 한 라운드의 정책이므로 수렴이나 우월성을 입증하지 않는다. 기존 공장 모듈의 비교시험과 도로 신경망 결과를 섞지 않는다.

## 재현된 실제 결과

`node experiments/road/run.mjs --episodes 30 --mode 1 --out docs/road/reproduced-30ep-mode1.json`

| 시험 도로 | 초기 도달 | 적용 도달 | 초기 충돌 | 적용 충돌 | 초기 개입/회 | 적용 개입/회 |
|---|---:|---:|---:|---:|---:|---:|
| dry | 1/3 | 3/3 | 2/3 | 0/3 | 13.67 | 21.67 |
| wet | 2/3 | 1/3 | 1/3 | 2/3 | 29.00 | 23.33 |
| works | 0/3 | 0/3 | 2/3 | 0/3 | 91.00 | 251.00 |

이 모델은 dry 대상 검증으로 선택됐다. wet에서는 전이가 악화했고 works에서는 목적지에 도달하지 못했다. 도로 간 일반화와 무지원 회피는 **미달**이다. 3.0 예측 제어도 별도 검증에서 개선을 입증하지 못해 승인되지 않았고, 동결 시험의 3번 행은 DQN fallback이다. 실패한 예측 제어의 검증 원시 결과도 `worldApproval.candidate`에 보존되어 있다. 성공한 dry 세 건을 전체 자율주행 성공률로 표시하지 않는다.

## API·데이터와 감사

`GET /v1/road/state`, `/checkpoint`, `/models/{sha256}`. 변경은 `POST /v1/road/reset`, `/step`, `/restart`, `/train`, `/select`, `/apply`, `/rollback`, `/benchmark`, `/config`. 기존 소유자 인증·시뮬레이션 조직 역할·idempotency·expected_version/CAS를 적용한다. `/train`은 요청당1~6에피소드, `/step`은1~30행동으로 나눈다. 에피소드 최대320행동(96초 근사)이다. 정확한 장시간 Worker CPU 예산 및 동시 사용자 성능은 부하 검증 전이다.

모델 schema `road-range-17-dqn24-v1`, protocol `asla-road-research-v1`. R2의 owner별 불변 state snapshot에 실제 신경망/전이/버퍼를 저장하고 D1은 현재 포인터·감사 이력을 보관한다. 적용 모델은 SHA256+Ed25519 서버 증적과 연결한다. 로컬 모드에는 이 서버 증적이 없다. 원시 도로 관측과 replay는 실제 개인정보가 없는 합성 데이터다. 실제 현장 데이터 수집 권한·초상권·위치·보관/공유/철회 조건은 아직 부여되거나 합의되지 않았다.

루드다이나믹스의 실기체·센서·주행장, 데이톤의 GPU/Edge/운영환경, 블록오디세이의 정본 ASLA·Ontology 연결은 실제 담당자·장비·API 합의가 필요한 다음 단계다. 현재 코드는 계약상 이행·서명·착수 사실을 증명하지 않는다.

## CARLA 이전 실험 준비

`experiments/road/compose.carla.yaml`은 Linux NVIDIA GPU의 CARLA0.9.15 실행 예시다. 현재 세션에서는 CARLA 서버를 실행하지 않았으며 이 어댑터의 CARLA API 호환성과 도로 성능도 검증되지 않았다. GPU·Docker·CARLA PythonAPI와 공식 agents 경로가 필요하다. 기본 `carla_shadow.py`는 자체 생성 차량에 zero throttle·brake를 보내는 shadow 모드다. `--drive-simulation`만 가상 차량의 제어를 허용하며 실차 인터페이스는 없다. JS/Python의 17→24→7 신경망 순전파 값 일치만 확인했다. 센서 의미·마찰·행동 주기 차이의 보정, 시나리오/NPC, 별도 실험 검수는 남아 있다.

```sh
python experiments/road/carla_shadow.py --self-test --checkpoint docs/road/reproduced-30ep-mode1-checkpoint.json
# CARLA 서버와 버전에 맞는 Python API를 별도로 준비한 후:
python experiments/road/carla_shadow.py --checkpoint docs/road/reproduced-30ep-mode1-checkpoint.json --out carla-road-shadow.jsonl
```

검증: Node 자동 시험에서 실제 학습·동결·안전 gate·scope·소유자 경계·R2·서명·복구를 확인한다. 브라우저에서는 명시적 로컬 모드의 실제 주행/학습/거절/적용/평가를 확인했다. 프로덕션 로그인 세션의 끝단 흐름과 CARLA/실기체 검증은 별개이며 완료로 간주하지 않는다.

비교 재현: `node experiments/road/compare.mjs --repeats 3 --episodes 30 --out docs/road/comparison.json`. 동일 반복 내에 훈련 데이터와 초기 로컬 파라미터를 공유하며, 반복 간 훈련·시험 seed offset은100000이다. 초기 미학습 대조군은 수집 결과를 사용하지 않는다. FedAvg는 안전 gate 없이 모든 로컬 파라미터를 동일 가중 평균하는 비교 전용 모델이다.

3회 반복의 dry 도달 합계(9개 시험): 미학습3/9, 단독R1 3/9, FedAvg2/9, 고정선택5/9, 학습선택5/9, 조건부전이5/9. 선택과 학습선택이 같으므로 2.0 이득을 입증하지 않는다. 전이 제어는 세 반복 모두 승인되지 않았다. 이 소표본 차이를 유의미한 우월성으로 주장하지 않는다.

## 2026-10-31: 3D 장면과 실시간 훈련 확장

기존 운영/검증 흐름을 유지하며 Three.js r180의 실제 mesh·perspective camera·조명·그림자 장면을 추가했다. 차량 차체/바퀴, 교차 차량, 보행자, 도시 건물, 횡단보도, 신호, 목적지, 기준 경로와 거리 센서를 동일한 시뮬레이터 상태에 연결한다. 추적/전체 도시 자유 시점/운전자 시점과 확대·축소를 제공한다. WebGL을 만들 수 없는 브라우저에서는 동일 3D mesh를 CPU에서 투영·near-plane clipping·면 정렬해 그리는 대체 렌더러를 사용한다. CPU 경로의 조명·그림자·투명도·깊이 처리는 WebGL보다 단순하고 성능도 낮을 수 있다. 관측은 여전히 평면 운동학 환경의 17개 수치이며, 3D 영상/깊이 센서 학습이나 CARLA 동역학으로 바뀐 것이 아니다.

`road-training.mjs`의 `trainingStep`은 완료된 에피소드 재생을 훈련처럼 표시하지 않는다. 1~30행동씩 후보 신경망으로 epsilon 탐색/선택적 초기 시연을 실행한 뒤 실제 보상·다음 관측으로 TD gradient와 전이 회귀를 갱신한다. 훈련 차량과 운영 차량 상태는 분리되어 있다. 화면은 현재 훈련 차량을 선택해 표시하고 실제 관측·tanh 활성·Q·TD 손실·replay 수·파라미터 L2 변화·수치 fingerprint를 보여준다. fingerprint는 FNV 수치 식별값이며 모델 무결성 서명은 아니다. 초기 시연 보조를 끌 수 있다. 탐색/시연/모델 행동과 독립 안전 제어 개입을 별도로 표시한다. 시연 역전파와 TD 갱신 카운터도 별도다.

브라우저 모드의 계산은 `road-worker.mjs` 모듈 Worker로 옮겼다. IndexedDB에 전체 모델·target network·replay·선택 정책·전이 모델·미완료 훈련 세션을 매 변경마다 저장한다. 저장 실패 시 메모리 모드라고 표시하며 파일 내보내기를 사용한다. 복원 후 훈련을 재개하면 미완료 에피소드의 다음 관측부터 진행한다. 페이지를 닫으면 계산은 멈춘다. 사이트 도메인별 브라우저 저장이며 다른 기기·미리보기·프로덕션 사이에 자동 이동되지 않는다. 기존 v1 메모리 전용 실행은 자동 마이그레이션하지 않는다.

v2 체크포인트는 전체 lab을 내보내며 `/v1/road/checkpoint`와 기기 내보내기의 형식은 `asla-road-checkpoint-v2`다. 외부 파일 가져오기는 기기 모드에서 숫자형·배열 길이·범위·schema를 검증해 로컬/운영 신경망과 로컬 target/replay/전이를 복원한다. 외부 파일의 운영 승인은 승계하지 않는다. 외부 파일의 운영 전이 모델·선택 정책·배포 이력도 자동 승계하지 않으며 가져온 운영 가중치는 미검증 로컬 연구 모델이다. 동일 브라우저 IndexedDB 복원은 전체 세션을 이어가는 기능이고 파일 가져오기와 다르다. 실차 배포 인터페이스는 없다.

새 서버 API `POST /v1/road/training-step`과 `/paired-test`도 기존 인증·역할·expected_version·idempotency·D1/R2 경로를 사용한다. paired test는 미학습 모델과 현재 도로의 로컬 후보를 seed51001·동일 목적지·동일 안전 설정으로 동결 평가하며 실제 trace를 3D에 겹쳐 그린다. 이 노출된 개발 진단 시드는 맹검 독립 시험이 아니며 단독 배포 승인 근거로 쓰지 않는다. 훈련 카운터가 늘었다는 사실만으로 실제 회피 성능 개선을 주장하지 않는다.

재현 실행:

```sh
node experiments/road/incremental.mjs --episodes 12 --out docs/road/incremental-results.json
node experiments/road/incremental.mjs --episodes 90 --out docs/road/incremental-90-results.json
node --test tests/*.test.mjs
```

12회: 867관측/2,256 TD 갱신, 훈련 중 도달5·충돌7, 후보 fingerprint d11be793→f51d5a90. 90회: 6,666관측/17,720 TD 갱신, 훈련 중 도달50·충돌40, 후보 fingerprint d11be793→b0de382b. 두 실행 모두 운영 모델은 미갱신 상태로 유지했다. 두 후보 모두 고정 paired 진단 시드에서는 충돌했다. 훈련 성과와 실제 일반화는 동일하지 않으며 자율주행 완성 기준은 미달이다. JSON과 복원용 체크포인트를 보존했다.

검증: 자동 시험36개 통과(실시간 TD·시연 OFF·직렬화 재개·완료 후 반복·고정 평가 무학습·외부 파일 검증·서버 R2 저장/권한 포함). 브라우저에서 실제 Worker 훈련, 누적 gradient/파라미터 변화, 에피소드 완료와 재시작, IndexedDB 새로고침 복원, paired 충돌 결과 공개와 CPU 3D 장면을 확인했다. 검증 브라우저 GPU가 비활성이라 WebGL 하드웨어 렌더링과 GPU 성능, 실기기 모바일 성능은 확인하지 못했다. GPU 연결·CARLA·실차·공공도로 검증은 완료 범위에 넣지 않는다.

ASLA1.0 통합 결과 리포트(발행2026-08-13)도 대조했다. 원문의 0.837 대 FedAvg0.740 및 multi-anchor 성능은 합성 제조·선형 모델 실험 결과다. 이번 도로 MLP 학습 결과와 동일한 수치 또는 검증 범위로 취급하지 않는다. 원문의 CVSF-MA 정본 코드와 Ontology 연결은 여전히 별도 확보·검증이 필요하다.
