
GPT 5.6 Sol, 삼체 문제(3 Body Problem) 해결
요약
AI 모델 Row-Bot을 활용하여 삼체 문제(Three-Body Problem)를 시뮬레이션하는 'Three-Body Lab' 웹 애플리케이션을 구축했습니다. React, TypeScript, Vite를 기반으로 수치 해석적 정확도를 갖춘 브라우저 기반 물리 워크벤치를 구현했습니다.
핵심 포인트
- React, TypeScript, Vite를 사용한 엔드 투 엔드 웹 개발
- Euler, Velocity Verlet, RK4 등 4가지 수치 적분기 구현
- 천체 역학, 수치 해석, 과학적 시각화 기술의 결합
- 다양한 초기 조건(8자형, 라그랑주 해 등) 프리셋 제공
저는 Row-Bot에게 의도적으로 어렵고 다학제적인 과제를 주었습니다. 바로 삼체 문제(three-body problem)를 시뮬레이션하는 인터랙티브 웹사이트를 구축하되, 단순히 캔버스 위를 움직이는 세 개의 빛나는 점이 아니라 기술적으로 신뢰할 수 있게 만들라는 것이었습니다. 그 결과물은 React, TypeScript, Vite를 사용하여 엔드 투 엔드(end to end)로 구축된 브라우저 기반 수치 중력 워크벤치인 Three-Body Lab입니다. 확인해 보세요 (레포지토리 링크는 댓글에 있습니다). 이 프로젝트는 모든 천체가 질량을 가지고 다른 두 천체의 중력 인력에 지속적으로 반응하는 평면 뉴턴식 삼체 문제(planar Newtonian three-body problem)를 모델링합니다: [ \ddot{\mathbf r}i = G\sum{j\ne i} m_j \frac{\mathbf r_j-\mathbf r_i} {\left\lVert\mathbf r_j-\mathbf r_i\right\rVert^3} ] 이 방정식은 결정론적(deterministic)이지만, 임의의 초기 조건에 대한 일반적인 폐쇄형 해(closed-form solution)는 존재하지 않습니다. 대부분의 구성은 수치적으로 진화(evolved numerically)시켜야 하며, 많은 경우가 혼돈(chaotic) 상태입니다. 즉, 초기 상태의 아주 미세한 차이가 결국 근본적으로 다른 궤적을 만들어낼 수 있음을 의미합니다. 이 작업은 AI 모델이 다음 요소들을 결합할 수 있는지 확인하기 위한 좋은 테스트가 되었습니다:
- 천체 역학 (Celestial mechanics)
- 수치 해석 (Numerical analysis)
- 결정론적 혼돈 (Deterministic chaos)
- 과학적 시각화 (Scientific visualisation)
- 프론트엔드 엔지니어링 (Front-end engineering)
- 테스트 및 기술 문서화 (Testing and technical documentation)
Row-Bot이 구축한 것
시뮬레이션에는 네 가지 독립적인 수치 적분기(numerical integrators)가 포함되어 있습니다:
- Explicit Euler
- Symplectic Euler
- Velocity Verlet
- 4차 룬게-쿠타 (Fourth-order Runge–Kutta RK4)
RK4는 강력한 국소 정확도(local accuracy)를 제공하는 반면, Velocity Verlet은 시간 가역적인 심플렉틱 방법(time-reversible symplectic method)입니다. 심플렉틱 방법(Symplectic methods)은 해밀토니안 시스템(Hamiltonian systems)의 기하학적 구조를 보존하도록 설계되었으며, 다른 방법이 단기 절단 오차(short-term truncation error)가 더 낮더라도 종종 더 나은 정성적 장기 거동(long-term behaviour)과 유계된 에너지 오차(bounded energy error)를 생성합니다. 인터페이스를 통해 시스템이 진화하는 것을 지켜보면서 방법을 전환하고 물리 시간 단계(physics time step)를 조정할 수 있습니다. 또한 네 가지 초기 조건 프리셋이 포함되어 있습니다:
- 8자형 안무 (Figure-eight choreography): 세 개의 동일한 질량이 동일한 8자형 경로를 따라 서로를 추격합니다.
라그랑주 정삼각형 해 (Lagrange equilateral solution): 세 물체가 공통 질량 중심을 회전하면서 정삼각형 형태를 유지합니다.
계층적 삼체 (Hierarchical triple): 가까운 이중성 (binary)이 더 가볍고 멀리 떨어진 제3의 물체와 상호작용합니다.
혼돈 산란 (Chaotic scattering): 유입되는 질량이 이중성 시스템을 교란하여, 포획 (capture), 교환 (exchange) 또는 방출 (ejection)을 일으킬 수 있습니다.
모든 사전 설정은 적분 (integration) 전, 진정한 질량 중심 (barycentric) 및 총 운동량 제로 (zero-total-momentum) 프레임으로 변환됩니다.
시뮬레이션의 수치적 오차 노출: 시각적으로 설득력 있는 궤도가 반드시 정확한 궤도인 것은 아닙니다. 따라서 Three-Body Lab은 시스템의 물리적 불변량 (physical invariants)을 지속적으로 계산합니다:
- 총 역학적 에너지 (Total mechanical energy) [ E = \sum_i \frac{1}{2}m_i|\mathbf v_i|^2 - G\sum_{i < j} \frac{m_i m_j}{|\mathbf r_i - \mathbf r_j|} ]
- 선운동량 (Linear momentum) [ \mathbf P=\sum_i m_i\mathbf v_i ]
- 각운동량 (Angular momentum) [ \mathbf L=\sum_i \mathbf r_i\times m_i\mathbf v_i ]
- 질량 중심 (Centre of mass) [ \mathbf R_{\mathrm{CM}}= \frac{\sum_i m_i\mathbf r_i}{\sum_i m_i} ]
대시보드는 에너지 드리프트 (energy drift), 운동량 드리프트 (momentum drift), 각운동량, 그리고 실험 중 도달한 가장 가까운 분리 거리를 보고합니다. 그런 다음 불변량 드리프트 (invariant drift)에 따라 수치적 상태를 '정상 (nominal)', '주의 (caution)', 또는 '신뢰할 수 없음 (unreliable)'으로 분류합니다. 이 구분은 매우 중요합니다. 시뮬레이터는 수치적 근사 (numerical approximation)가 신뢰할 수 없게 된 후에도 권위 있어 보이는 궤도를 조용히 계속 그려내서는 안 되기 때문입니다.
혼돈 실험 (chaos experiment) 포함: 시뮬레이터는 초기 좌표 중 하나를 단 [ \delta_0=10^{-7} ] 만큼만 교란하여 시스템의 섀도 복사본 (shadow copy)을 생성할 수 있습니다. 두 시스템은 정확히 동일한 결정론적 방정식 (deterministic equations)을 따르며 동일한 적분기 (integrator)를 사용합니다. 처음에는 두 시스템의 궤도가 동일해 보입니다. 시간이 흐름에 따라 인터페이스는 위상 공간 분리 (phase-space separation)를 측정합니다: [ \delta(t)= \left| \mathbf X'(t)-\mathbf X(t) \right| ] 섀도 물체와 궤적은 점차 원래 시스템으로부터 멀어지며, 초기 조건에 대한 민감한 의존성 (sensitive dependence on initial conditions)을 직접적으로 보여줍니다. 인터페이스는 이를 확정적인 리아푸노프 지수 (Lyapunov exponent)가 아닌, 가공되지 않은 유한 시간 분리율 (raw finite-time separation rate)로 보고합니다.
엄격한 Lyapunov 계산을 위해서는 추가적인 접선 공간 (tangent-space) 처리나 주기적 섭동 재정규화 (periodic perturbation renormalisation)가 필요할 것입니다. 이러한 단서 조항은 중요합니다. 목표는 인상적이지만 오해를 불러일으킬 수 있는 수치가 아니라, 과학적 투명성이었습니다. 근접 조우 (Close encounters)는 명시적으로 처리됩니다. 두 물체 사이의 거리가 0에 가까워짐에 따라 점질량 중력 (Point-mass gravity)은 특이점 (singular)이 됩니다. 극단적인 근접 조우 시 0으로 나누는 오류를 방지하기 위해, 엔진은 다음과 같은 작은 Plummer 스타일의 소프트닝 항 (softening term)을 사용합니다: [ \mathbf a_i = G\sum_{j\ne i} m_j \frac{\mathbf r_j-\mathbf r_i} {\left(r_{ij}^2+\epsilon^2\right)^{3/2}} ] 퍼텐셜 에너지 (potential-energy) 진단에는 그에 상응하는 소프트닝된 퍼텐셜을 사용합니다: [ U_{ij}= -\frac{Gm_im_j} {\sqrt{r_{ij}^2+\epsilon^2}} ] 이는 힘의 법칙과 에너지 계산을 수학적으로 일관되게 유지합니다. 또한 이는 극도로 작은 거리에서의 이상적인 점질량 모델 (ideal point-mass model)에 대한 수정 사항으로 명확하게 문서화되어 있습니다. 물리 시계는 렌더링과 독립적입니다. 한 가지 미묘한 엔지니어링 문제는 많은 브라우저 시뮬레이션이 애니메이션 프레임당 하나의 물리 단계 (physics step)를 수행한다는 점입니다. 이는 결과가 디스플레이가 60 Hz, 120 Hz 또는 144 Hz로 작동하는지, 그리고 잠재적으로 컴퓨터가 얼마나 바쁜지에 따라 달라지게 만듭니다. Three-Body Lab은 대신 누적된 시뮬레이션 시계 (accumulated simulation clock)를 사용합니다. 렌더링과 수치 적분 (numerical integration)은 분리되어 있으며, 경과된 소수점 시간 (fractional elapsed time)이 유지되고, 엔진은 디스플레이 재생률 (refresh rate)과 독립적으로 필요한 수의 고정된 물리 단계 (fixed physics steps)를 실행합니다. 따라서 모니터가 물리 법칙을 변경하지 않습니다. 결과는 독립적으로 검토되었습니다. 첫 번째 구현이 테스트를 통과하고 컴파일된 후, 저는 별도의 읽기 전용 검토 에이전트 (read-only review agent)에게 수치 엔진과 인터페이스를 조사하도록 요청했습니다.
그 에이전트는 몇 가지 의미 있는 문제점들을 찾아냈습니다: 기존의 퍼텐셜 에너지 (potential-energy) 공식이 힘의 법칙 (force law)에서 사용된 것과 동일한 소프트닝 (softening)을 포함하지 않았습니다. 두 개의 프리셋 (presets)이 실제로는 변환되지 않았음에도 무게 중심 (barycentric)으로 라벨링되어 있었습니다. 카오스 진단 (chaos diagnostic) 설명이 너무 강하게 기술되었습니다. 시뮬레이션 속도가 부분적으로 디스플레이 재생률 (display refresh rate)에 의존했습니다. 캔버스 (Canvas) 크기 조정 처리에 예외 케이스 (edge case)가 있었습니다. "최근접 거리 (Closest approach)"는 처음에 현재의 최소 분리 거리만을 의미했습니다. 이후 Row-Bot이 이러한 문제들을 수정하고, 테스트 스위트 (test suite)를 확장하며 프로덕션 번들 (production bundle)을 다시 구축했습니다. 최종 검증에는 다음 사항들이 포함되었습니다: 내부 힘의 균형 (Internal-force balance), 무게 중심 (Barycentric) 및 영운동량 정규화 (zero-momentum normalisation), 소프트닝된 힘/퍼텐셜의 일관성 (Softened force/potential consistency), 8자 궤도 (figure-eight orbit)에서의 RK4 에너지 보존 (energy conservation), Velocity Verlet 시간 가역성 (time reversibility), Lagrange 프리셋에 대한 장기 실행 유한 동작 (Long-running finite behaviour), 프로덕션 빌드 검증 (Production build verification). 최종 결과: 수치 테스트 6/6 통과, 종속성 취약점 (dependency vulnerabilities) 0개, 1,775개 모듈 변환, 프로덕션 JavaScript: 약 213.6 kB, Gzipped JavaScript: 약 68.5 kB. 이 실험에서 가장 흥미로운 점은 AI가 세련된 인터페이스를 만들어냈다는 사실이 아니었습니다. 모델이 물리학, 수학, 수치 해석 방법 (numerical methods), 소프트웨어 아키텍처 (software architecture), 시각적 디자인 (visual design), 테스트 (testing) 및 과학적 커뮤니케이션 (scientific communication) 전반에 걸쳐 추론해야 했으며, 독립적인 기술 검토 (technical review)를 수용하고 자신의 잘못된 가정을 스스로 수정해야 했다는 점입니다. 이것이 바로 제가 AI 에이전트에게 테스트하고 싶은 종류의 작업입니다. 단순히 코드를 생성하는 것이 아니라, 어려운 것을 구축하고, 그것이 정확한지 측정하며, 근사치 (approximate)인 부분을 드러내고, 증거를 통해 문제가 발견되었을 때 이를 개선하는 것입니다. 소스, 프로덕션 빌드 및 재현 가능한 실험 내보내기 (reproducible experiment export)는 모두 Row-Bot을 통해 로컬에서 생성되었습니다. /u/Acceptable-Object390이 r/OpenAI에 제출함 [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/OpenAI Codex (search)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기