brunch

You can make anything
by writing

C.S.Lewis

by 첨물 Mar 24. 2024

삼체 (Three body problem)

ChatGPT를 이용하여 코딩해 보기

넷플릭스에서 기대하던 작품을 주말을 통해 단숨에 보았다. 

몇 년 전에 소설로 읽었던 기억이 가물거리던 차에 기억을 영화 장면으로 보니 작가의 상상력과 감독의 연출력이 매우 뛰어난 작품이었다. 


드라마가 워낙 방대한 과학적 내용과 흥미로운 이야기로 구성되어 있어  여러 시각으로 감흥을 이야기할 수 있지만 내게 특별한 몇 장면을 꼽으라고 하면 아래와 같다. 


400년 후 지구인보다 훨씬 뛰어난 능력을 가지고 지구로 다가오는 외계인을 상대로 한정된 자원과 인력을 동원해 말도 안 되는 프로젝트를 이끌어가는 프로젝트 매니저, 웨이드. 

그는 과학자가 아니고 오로지 행정가이며 군사 전략가이다. 그가 과학자 그룹을 이끌며 지구로 오는 외계인을 향해 암으로 죽어가는 과학자의 두뇌를 싣고 핵폭탄 여러 개의 추진력을 받아 우주로 쏘아 올리는 로켓 프로젝트를 이끈 장면은 얼마 전에 본 "오펜하이머"를 떠 올리게 했다. 비록 프로젝트는 실패로 끝났지만 강인한 리더십으로 "오직 전진"이라는 구호로 과학자 그룹을 이끈 모습이 인상적이었다. 

자신이 사랑했던 남자 친구의 뇌를 우주로 날려 보내는 진쳉이 몇 개의 씨앗이라도 로켓에 담게 해 달라고 했을 때 1g이라도 무게를 줄여야 한다고 단호히 반대한 웨이드는 결국 씨앗들을 담아 우주로 쏘아 보낸다. 




인간을 벌레라고 규정한 외계인을 상대로 프로젝트 리더 역할을 한 진쳉 여자 주인공이 결국 프로젝트 실패로 자책할 때 전투에서 졌다고 전쟁을 포기할 수 없다며 "벌레는 안 죽는다"는 마지막 대사는 인간의 무모한 도전은 계속될 것이고 결국 이런 희망이 인간을 살아남게 할 것이라는 특수요원 다시의 말이 여운을 남겼다. 




그리고 몇 년 전에 흥미를 가졌던 삼체 운동을 다시 찾아보았다.  뉴턴 방정식을 통한 2 BODY 시스템에서는 각각의 움직임을 예측할 수 있지만 3개 이상으로 개수가 증가하면 변수가 너무 많아 예측할 수 없다는 것이다. 드라마에서도 이 내용이 자주 언급되었다. 미세한 변수 차이로 삼체 운동은 매우 변화무쌍한 형태로 변화한다는 것이다. 


https://youtu.be/D89ngRr4uZg?si=Yse0-irW6FFQYABC&t=164



그래서 직접 해 보았다. 우리의 코딩 친구 ChatGPT를 이용하여... 무엇이 그리 어려운지


3 body movement를 그래프로 보여줄 수 있는 r code를 만들어줘. 질량은 1, 2, 3이고 질량에 비례하여 point의 사이즈를 표시하고, 2d 좌표평면에서 회전하는 그래프를 만들어줘.


ChatGPT가 말로 코딩을 할 수 있게 한다지만 해 보면 처음 만나게 되는 것은 바로 "에러"이다.  완전히 그 코딩 언어에 초보이면 "에러를 넣고 고쳐줘"의 무한궤도에 빠져 버린다. 


다행히 r 코드를 조금 알고 있던 터라 한 줄씩 실행해 보고 문제점을 찾아 다시 수정해 달라고 하니 비로소 코드가 돌아가게 되었다. 


일단 변수가 뭐가 들어가나 보니, 3개 점의 무게와 좌표가 3 x 3 matrix로 들어간다. 


# Define the masses

masses <- data.frame(

  mass = c(5, 2, 10),

  x = c(5, 2, 0),

  y = c(0, 0, 0)

)


3 body simulation




단조롭다. 복잡하다고 하던데 무슨 변수를 넣어야 할까? 공전하는 주기가 동일하다. 각속도를 변수에 넣어달라고 했다. 


3개의 point가 회전하는 속도를 다르게 하라. 


3 body system with differnt angular velocitys


비로소 복잡한 운동이 생겼다. 

여기서 세 점의 위치와, 질량, 각속도를 다르게 하면 다양한 움직임을 구현해 볼 수 있다. 

비록 중력 등의 복잡한 물리식을 직접 넣어 시뮬레이션한 것은 아니지만 나름 구현해 볼 수 있다는 게 신기했다. 코딩 전체를 보면 처음부터 내가 짤 수 없는 코딩이다. 과연 AI의 위력을 느낄 수 있었다. 


# Define the masses

masses <- data.frame(

  mass = c(10, 2, 3),

  x = c(0, -2, 4),

  y = c(0, -2, 0),

  angular_velocity = c(1, 1.5, 0.25)  # Angular velocities for each mass

)







ChatGPT를 옆에 끼고 친구처럼 같이 사는 시대다. 과연 앞으로의 교육은 어떻게 바뀌어야 하고, 일하는 방식은 어떤 모습이 되어야 할까를 진지하게 고민해야 하는 시대다. 


총선이 다가온다. 대한민국의 미래를 위해 정말 중요한 시점이다. 과거로 회귀하느냐, 미래로 나아가느냐를 결정하는 시대다. 개인적으로 구글러가 국회를 바꾸는 모습을 기대해본다. 


삼체운동.R


매거진의 이전글 줄리아, 파이썬, R 코드 비교
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari