§ 1문제 정의
초기에 아미노산들은 일직선으로 펴진 사슬 상태로 100³ 공간 안에 놓인다. fold_amino, fold_element로 90° 단위 회전을 반복해 사슬을 접는다.
점수는 셀이 6면체이므로 6방향 인접만 본다. S(30)와 N(10)이 가까이 붙으면 한 쌍이 300점. 단순한 폴딩 한 번이 수십~수백 점의 점수 차이를 만든다.
전형적 접근: 빔 서치(beam search). 매 단계 N개의 폴딩 후보 중 점수가 가장 높은 K개를 살리고 나머지는 버린다. 깊이 우선보다 너비 우선이 잘 작동.
S와 N을 마주 보게 하라 — 한 번의 90° 회전이 300점을 만든다.
§ 2예제 시각화 — 11원소 사슬, 3번 폴딩
FIG. 11 — fold sequence, 2D projection
STEP 01 / 5
SPACE play/pause · ← → step · R reset
§ 3알고리즘 골격
process():
chain = protein(elements) # 초기 펴진 상태
beam = [(elements, 0)]
for depth in 0..MAX_FOLDS:
next_beam = []
for (state, score) in beam:
for amino i, element e, axis a, ccw c:
state' = apply_fold(state, i, e, a, c)
if valid(state'):
next_beam.append((state', evaluate(state')))
beam = top_K(next_beam, K)
apply best beam