Skip to content

[Feat] train.py multi-base rolling window 학습 구조 반영#12

Open
ohchanju3 wants to merge 35 commits into
mainfrom
feat/train
Open

[Feat] train.py multi-base rolling window 학습 구조 반영#12
ohchanju3 wants to merge 35 commits into
mainfrom
feat/train

Conversation

@ohchanju3
Copy link
Copy Markdown
Collaborator

@ohchanju3 ohchanju3 commented May 31, 2026

개요

multi-base + rolling window 파이프라인 설계에 맞게 train.py 전반을 수정했습니다. 항공사 전환 시 config.py 한 줄만 바꾸면 되도록 항공사 설정을 분리하고 feat/ip-multibase encoder 변경 반영 및 Phase 2 CG dual feedback을 구현했습니다.

변경 내용

train.py

loader/environment 인터페이스 교체

  • load_flights_multidaybuild_airport_map + bases_to_ids +
    load_flights_rolling
  • step_end_duty() 제거 → step() 하나로 통합

상수 정리

  • PAIRING_COST, BASE_PENALTY 등 → config.py로 이관, 중복 제거
  • OVERNIGHT_PENALTY, LEG_BONUS → 수정된 reward 설계에 없는 값으로 제거

flights_to_tensors() 수정

  • dep/arr_time window_days * 24 기준 정규화
  • fly_times 추가 — encoder input_dim airport_emb×2+3 맞춤 (feat/ip-multibase 반영)

constraint_to_tensor() 정규화 추가

  • raw값 → config.CONSTRAINT_NORMS로 나눠 [0,1] 정규화
  • evaluate_ip.py와 동일한 값 사용해야 checkpoint 호환

state_to_vec() 수정 (38 → 71차원)

  • base_airport_emb(32) 추가 — 모델이 에피소드 목표 base 인식
  • duty_elapsedcurrent_time - duty_start_time — FAA 기준 실제 경과 시간
  • rest_remaining 스칼라 추가

run_episode() 수정

  • deadhead fallback → base 출발 편 기준으로 수정
  • BASE_PENALTY 이중 차감 버그 제거

run_curriculum_stage() 시그니처 변경

  • 고정 flights → flight_sampler 함수로 대체
  • 에피소드마다 (base, window) 쌍 랜덤 선택

train() 재작성

  • flight_sampler(): 에피소드마다 base + offset_days 랜덤, base 출발 편 없는 window 스킵
  • Stage 2/3 max_pairing_daysWINDOW_DAYS(4) 제한 (window 밖 deadhead 방지)
  • Stage 3: 7개 constraint 전부 랜덤화 (config.STAGE3_CONSTRAINT_RANGES 참조)
  • Phase 2 CG dual feedback 구현 (아래 참고)
  • checkpoint에 bases, window_days, max_time 추가 저장

Phase 2 — CG dual feedback 구현

  • _rollout_with_pairings(): pairing 구조체(legs, cost) 수집 (evaluate_ip.py 참고)
  • _collect_pool(): stochastic×30 + greedy×1 rollout → 중복 제거 pool
  • run_episode_with_dual(): flight 배정 시 reward += π[f] (LP dual variable 피드백)
  • run_phase2(): LP interval(10ep)마다 pool 수집 → solve_lp_relaxation() → dual_vars 갱신

config.py

  • AIRLINE, AIRLINE_BASES: 항공사 전환 시 AIRLINE 한 줄만 수정
  • CONSTRAINT_NORMS: FiLM 입력 정규화 기준값
  • STAGE3_CONSTRAINT_RANGES: Stage 3 augmentation 범위 (constraint 확정 후 교체 TODO)
  • PHASE2_POOL_ROLLOUTS=30, PHASE2_LP_INTERVAL=10, PHASE2_N_EPISODES=1000

협의 필요

  • WINDOW_DAYS = 4 확정 여부
  • base 목록 확정 후 config.py 업데이트 필요
  • STAGE3_CONSTRAINT_RANGES 범위값 constraint 확정 후 교체 필요

ohchanju3 and others added 23 commits May 23, 2026 17:32
@ohchanju3 ohchanju3 self-assigned this May 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants