W2 · DEBUG_KIT.md

3D 폴딩 / 공간 · 2503 단백질폴딩
W2_folding/DEBUG_KIT.md

W2 — 2503 단백질폴딩 — 개선힌트 출력 설계 (DEBUG_KIT)

"이 한 줄을 찍으면 다음 시도에서 뭘 바꿔야 할지 보인다."


출력해야 할 핵심 지표

1) verify 상태 (치명 — 0점 회피)

fprintf(stderr, "[VERIFY] ok=%d out_of_bounds=%d overlaps=%d bbox=[%d..%d,%d..%d,%d..%d]\n",
        ok, oob_count, overlap_count, xmin,xmax, ymin,ymax, zmin,zmax);
  • ok=0 → 0점 확정. out_of_bounds>0 → 폴딩 범위 초과(중앙 정렬/작은 폴딩 필요).
  • overlaps>0 → 겹침 발생(역방향 fold로 복구).
  • bbox가 [0,100) 벗어나면 즉시 위험.

2) SCORE 분해 (가중치별 기여)

fprintf(stderr, "[SCORE] total=%lld HH=%lld CC=%lld OO=%lld NN=%lld SS=%lld Hvy_mix=%lld\n",
        total, hh, cc, oo, nn, ss, heavy_mix);
  • SS(900)/SN(300)/NN(100) 비중이 낮으면 → 무거운 원소 클러스터링 미흡.
  • HH(1)가 대부분이면 밀집 부족.

3) 무거운 원소 인접도

fprintf(stderr, "[HEAVY] S=%d N=%d O=%d S_adj_S=%d S_adj_N=%d N_adj_N=%d cluster_score=%lld\n",
        s_cnt, n_cnt, o_cnt, s_adj_s, s_adj_n, n_adj_n, cluster);
  • S_adj_S, S_adj_N이 0에 가까우면 → 무거운 원소가 흩어짐 → 클러스터링 필요.

4) 폴딩 통계 (수렴 진단)

fprintf(stderr, "[FOLD] applied=%d accepted=%d reverted=%d best=%lld cur=%lld temp=%.2f\n",
        applied, accepted, reverted, best, current, temp);
  • accepted/applied < 0.05 → 온도 너무 낮음. reverted 많으면 위반 빈발(폴딩 보수적 필요).

5) 아미노산 분포

fprintf(stderr, "[INIT] amino_count=%d total_elements=%d connectors=%d weight_dist=[H%d C%d O%d N%d S%d]\n",
        amino_count, total_elem, connectors, h,c,o,n,s);
  • S/N 비중이 높은 아미노산 위주로 클러스터링 전략 수립.

debug_snippet.cpp 사용법

  • user.cpp에 debug_snippet.cpp 내용 복붙.
  • process() 시작 시 dbg_init(), fold 시도마다 dbg_fold_attempt(), 종료 시 dbg_report().
  • SCORE 분해는 protein() 읽은 후 dbg_score_breakdown(elements).