W2 · DEBUG_KIT.md
3D 폴딩 / 공간 · 2503 단백질폴딩
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).