Skip to content

Latest commit

 

History

History
72 lines (58 loc) · 5.54 KB

File metadata and controls

72 lines (58 loc) · 5.54 KB

program.md — 에이전트 baseline 지시문

AutoResearch 루프의 에이전트가 train.py를 변형할 때 따르는 baseline 지시·맥락·제약.

목표

surrogate val 지표 val_mae(ns) 최소화. train.py는 per-endpoint timing slack 회귀 모델을 학습하고 stdout에 {"val_mae": <float>} 한 줄을 출력한다 (낮을수록 좋음).

단, 승격 게이트의 최종 기준은 val_mae 단독이 아니라 LODO 교차설계 일반화다. in-loop val_mae는 GroupShuffleSplit으로 설계-분리 검증을 하지만, 매 seed마다 샘플된 held-out 설계 부분집합에 대한 대리 지표다 — 그 샘플 split에 잘 맞춰도, 모든 설계를 차례로 빼며 baseline과 비교하는 LODO에서는 후퇴할 수 있다. LODO 게이트가 그 대리-지표/baseline 후퇴를 잡아 승격을 판정한다. val_mae는 유용한 대리 지표이되 완전하지 않다(아래 관찰 힌트 참고).

입력 데이터 (frozen 계약 — 변경 금지)

--data <dataset.jsonl>: prepare.py 출력. 각 행은 8 feature (num_stages, synth_slack_ns, synth_arrival_ns, max_stage_delay_ns, mean_stage_delay_ns, startpoint_is_ff, endpoint_is_ff, path_group) + 라벨 post_route_slack_ns + group_key.

dataset은 다설계 혼합일 수 있다(group_key로 설계 구분). 그 경우 train.py의 val split은 설계-분리(GroupShuffleSplit)라 val_mae학습에서 안 본 설계에 대한 예측 성능 — 즉 selection 지표 자체가 교차설계 일반화를 측정한다. 승격 전 별도 LODO 게이트가 일반화 후퇴를 한 번 더 차단한다.

v2 (보류 — 2026-07-10 encoder 채택 게이트 기각): encoder가 사전 고정 게이트를 통과하면 각 행에 frozen encoder 임베딩 emb_00emb_31(32차원 float)이 병기된다. 현재 encoder-v1은 선형 probe 미달로 기각 — 임베딩 컬럼 없는 v1 dataset이 유효 계약이다(experiments/v2-encoder-gate/README.md). 임베딩은 합성 netlist의 endpoint 중심 그래프를 self-supervised graph autoencoder로 인코딩한 것 — 설계-불변 구조 신호를 담으려는 시도다. 활용(그대로/선택/결합/무시)은 전적으로 너의 선택.

변형 허용 범위 (이 안에서 자유롭게)

  • 모델 종류: sklearn 내 교체 (HistGradientBoostingRegressor / RandomForest / ExtraTrees / GradientBoosting / MLPRegressor 등).
  • 하이퍼파라미터, feature 엔지니어링/선택/인코딩, train/val split 전략.
  • (v2 활성 시) 임베딩 활용 전략: emb_* 컬럼 선택·결합·차원 축소, torch 기반 head(MLP 등) 자유.

절대 제약 (위반 시 후보 무효)

  • train.py 단일 파일만. 신규 의존성 설치 금지 — sklearn, numpy, joblib, click, torch(사전 설치), stdlib만 import.
  • stdout 출력 계약: {"val_mae": <float>} 한 줄. --out <dir>/model.joblib 저장.
  • CLI --data/--out/--seed 시그니처 불변. 8 FEATURE_NAMES 불변.
  • 고정 CPU 학습 예산 (분 단위). GPU 금지. torch는 CPU 한정 허용.
  • frozen encoder 접근 금지: models/encoder-v1.pt·pretrain/ 참조 시 후보 즉시 무효(가드가 실행 전 차단). (v2 활성 시) 임베딩은 이미 dataset에 있다 — encoder를 다시 부를 이유가 없다.

전략 힌트

  • conservative: baseline에 가까운 소폭 튜닝.
  • moderate: 모델 교체 또는 feature 엔지니어링.
  • aggressive: 둘 다 + 비표준 조합 시도.

출력 형식

마크다운/설명/펜스 없이 변형된 train.py 전체 소스만 출력.

관찰 힌트 (probe 실측 — 지시 아님, 참고용)

아래는 Operator의 교차설계 probe(experiments/multidesign/probe/probe.md, probe-3design.md)에서 관찰된 사실이다. 전략 선택은 너에게 맡긴다 — 따라야 할 지시가 아니다.

  • 델타 label(post_route_slack_ns − synth_slack_ns 잔차 학습)은 드리프트가 안정적인 설계(aes)에서 naive를 37% 이겼으나, 드리프트가 자릿수로 다른 설계(ibex)에선 약했다.
  • 혼합 분포 훈련은 절대 스케일 모델의 미관측 설계 전이를 회복시켰다(ibex held-out서 naive 4.3× 격파).
  • held-out 설계별 최선 전략이 갈렸다 — 단일 정답 축은 없었다.
  • gen-004·gen-005 자율 세대에서 val_mae 최저 winner가 held-out 설계 LODO에서 baseline에 연속으로 졌다(우세 1/3 → 0/3). val_mae를 더 낮추는 변형이 미관측 설계 전체로는 오히려 후퇴할 수 있다는 직접 신호다. 어떤 방향이 일반화를 살릴지는 열린 질문이며 전적으로 너의 선택이다 — 가능성의 한 예일 뿐(요구되는 레시피 아님)로 "in-loop val split 과적합을 피하는 표현"이나 "절대 스케일 의존을 줄이는 feature·설계-불변 신호"를 떠올려볼 수 있고, 정반대 접근도 자유다.
  • gen-002~008 (7세대, v1 표형식): in-loop val_mae는 3.7→0.53까지 내려갔지만 교차설계 T1은 7세대 연속 indistinguishable — in-loop 지표 개선을 맹신하지 말 것. v2 임베딩은 이 벽(설계-불변 표현 부재 가설)에 대한 질적 전환 시도다. B0(현행 표형식 winner) 대비 distinguishable이 판정 질문.

Operator 감독

winner 승격은 자동 게이트(median + LODO 교차설계 + T1 통계 검증 + Codex 승격 심사관) 가 판정한다. Operator는 program.md방향을 잡고 세대 리포트(gen-NNN/report.md)로 큰 흐름을 이해한다 — per-winner 승인은 없음(2026-06-08 재피벗). 본 지시는 후보 생성에만 적용.