콘텐츠로 이동

평가 suite 와 report

eval_suite/<name>.yaml

schema_version: 1
seeds: [0, 1, 2, 3, 4]
episodes_per_scenario: 5
scenarios:
  - {name: nominal,       physics: {}}
  - {name: long_pole,     physics: {length: 0.8}}
  - {name: weak_actuator, physics: {force_mag: 7.0}}
gate:
  required:
    env/success_rate: {min: 0.6}
    env/ep_return: {min: 300.0}
  p_value: 0.05
  effect_size_threshold: 0.8        # Cohen's d
  min_relative_drop: 0.02           # 이 비율 미만의 평균 하락은 회귀로 보지 않음
higher_is_better:
  env/ep_return: true
  custom/fail_rate: false

report.json

{
  "schema_version": 1,
  "policy_ref": {"git": "...", "config_hash": "...", "asset_hash": "...", "image": "..."},
  "suite": "eval_suite/default.yaml",
  "seeds": [0,1,2,3,4],
  "metrics": {"env/success_rate": {"mean": 1.0, "std": 0.0, "per_scenario": {"nominal": 1.0}}},
  "per_seed": {"env/success_rate": [1,1,1,1,1]},
  "gate": {"required": {...}, "regression_vs": "bare-gym/v2"},
  "scenario_defs_hash": "<suite 파일 SHA-256>",
  "failure_counts": {"pole_fell": 3}
}

게이트

  1. gate.requiredmin/max 를 평균이 만족해야 한다.
  2. 현재 validated 정책이 있으면 지표마다 per_seed 로 Welch t-test. 나쁜 방향이고 p < p_value, |d| ≥ effect_size_threshold, 평균 하락폭 ≥ min_relative_drop 이면 실패.
  3. 결과는 런 태그 gate_passed gate_reasons gate_regression_vs, Pushgateway lab_gate_passed.

failure_counts 의 키는 eval_suite/failure_types.yaml 의 어휘만 쓴다. 실기 텔레메트리의 result 도 같은 어휘를 써야 real2sim 비교가 된다.

export-check

export.py 결과를 ONNX Runtime(CPU) 으로 1000 스텝 추론해 평균 지연이 1000 / io_spec.control_hz ms 미만이어야 한다. 결과는 export/check.json.