관리 메뉴

sean의 딥다이브

복잡한 경우의수를 풀때 - 몬테카를로(monte carlo) 방법 본문

잡담

복잡한 경우의수를 풀때 - 몬테카를로(monte carlo) 방법

sean-deepdive 2023. 9. 24. 23:16
반응형

 

1.확률과 경우의 수

  • 주사위를 하나 던지면 1-6 사이의 숫자가 하나 나오게 됩니다. 1, 2, 3, 4, 5, 6, 이렇게 한 사건에 대해 일어나는 방법이 여러가지 있을때 이를 경우의 수 라고 합니다.
대표사진 삭제

사진 설명을 입력하세요.

  • 이 중에서 3 이 나오는 경우의 수는? 총 1개 입니다. 3이 나올 확률은 3이 나올 경우의 수를 전체 경우의수로 나눈 1/6 약 16.6% 입니다

 

 

2. 큰 수의 법칙

  • 체감상 그렇지 않은 것 같나요? 주사위를 열번 던져보면 실제로 숫자가 균일하게 나오는 것 같지는 않습니다.
대표사진 삭제

사진 설명을 입력하세요.

  • 하지만 주사위를 던지는 횟수를 10, 100, 1000, .... 으로 늘려보면 어떨까요? 그러면 한 숫자가 나올 확률이 16.6% 으로 수렴하게 됩니다. 이를 큰 수의 법칙 이라 합니다.
대표사진 삭제

사진 설명을 입력하세요.

3. 두개의 주사위

  • 자 그럼 두개의 주사위를 던져봅시다. 두 개의 주사위의 숫자의 합을 고려해보겠습니다. 이때도 숫자들이 나올 확률이 전부 같을까요? 아닙니다.

 

  • 두 주사위의 합이 2가 나오기 위해서는 두 주사위가 모두 1이 나와야 합니다. 하지만 두 주사위의 합이 7이 나오기 위해서는 (1,6) (2,5) (3,4) (4,3) (5,2) (6,1)의 조합이 있습니다.

 

  • 7이 나올 확률을 구해볼까요? 총 36가지의 경우중 6개가 있으니 6/36 으로 16.6% 입니다. 2가 나올 확률은 1/36 으로 2.7% 밖에 되지 않습니다.
대표사진 삭제

사진 설명을 입력하세요.

4. 두개의 주사위 + 더블

  • 자 그럼 만약 같은 숫자가 나오면 주사위를 한번 더 굴리는 더블 이라는 규칙을 추가해 봅시다. 이때부터 경우의 수가 급격하게 증가하기 시작합니다. 더블이 나오면? 두번 나오는 경우? 경우의 수가 너무 많아져 손으로 계산이 너무 어렵습니다.

 

  • 그렇다면 이럴때 확률은 어떻게 구할까요? 답은 큰수의 법칙을 적용해서, 엄청나게 많이 주사위를 굴려보면 됩니다. 이를 그럴듯한 표현으로 몬테카를로 방법 이라고 합니다.

 

5. 문제가 어려운 경우 - 몬테카를로 방법

  • 몬테카를로 방법이란 무작위 난수를 사용해서 함수의 값을 수리적으로 근사하는 방법입니다. 간단하게 주사위를 엄청 많이 굴려서 (큰 수의 법칙) 확률을 근사적으로 구하는 방법 입니다.

 

  • 실제 확률을 계산하기 어렵거나 문제가 지나치게 복잡한 경우 사용되는데, 수학과 물리학 등에서 자주 사용되는 방법 입니다.

 

  • 실제로 더블이 있는 경우의 값을 구해보겠습니다. 저는 파이썬을 사용해서 코딩해보았습니다. 약 백만번의 주사위를 굴려보았습니다.
 
사진 삭제

사진 설명을 입력하세요.

  • 더블이 있는데도 두개 주사위를 같이 굴릴때랑 비슷하게, 7이 가장 높은 것을 알 수 있습니다. 낮은 경우이지만 두 주사위의 합이 30을 넘어가는 경우도 있네요.

 

  • 실제로, 손으로 계산하기 어려운 문제들을 몬테카를로 방법을 이용해서 구할 수 있습니다. 다만 정말 일어나기 힘든 일들 (두 주사위의 합이 30보다 큰 경우)를 구하기 위해서는 더욱 특별한 방법을 써야 합니다.

 

6. 원주율 구하기

  • 몬테카를로 방법을 이용해서, 수학적인 문제도 해결할 수 있는데 대표적 예시로 원주율(파이,π) 구하기가 있습니다.

 

  • 정사각형 안에 딱 맞는 원이 있다고 하면, 이때 사각형과 원의 넓이 비율이 있을 것 입니다. 이 비율만 알면, 구하고자 하는 원의 넓이가 있을 때 사각형을 그려서 쉽게 알 수 있습니다.
 
사진 삭제

사진 설명을 입력하세요.

 

 

  • 포인트를 늘려가면서 파이의 값(π) 을 구해보니 어떤 값에 가까워 지는 것을 알 수 있습니다. 십만번 정도의 테스트를 했을때 대략 3.13 정도의 값이 나오는 것을 알 수 있습니다.
 
사진 삭제

사진 설명을 입력하세요.

  • 수를 늘려서 더욱 정확한 값을 얻을 수 있습니다. 천만번쯤 하니 반올림해서 3.1416 이라는 값이 나오는군요. 이는 인터넷에서 쉽게 찾을 수 있는 3.14159...와 매우 유사합니다. 1분도 안되는 시간동안 빠르게 구한 값이지만 생각보다 매우 정확하다는 것을 알 수 있습니다.
 
사진 삭제

사진 설명을 입력하세요.

7. 결론

  • 실생활에서 풀기 어려운 확률 문제들, 또는 지나치게 복잡한 문제들, 단순하게 랜덤으로 무수히 많이 반복함으로서 답을 구할 수 있습니다.

 

  • 이를 몬테카를로 (Monte carlo) 방법이라고 하며, 실제 물리학, 수학등에서 많이 사용되고 있습니다.

 

  • 조금 억지 결론이긴 해도, 어려운 문제를 마주친다면 직접 많이 부딛혀 봐야 답을 알 수 있습니다.

 

반응형