티스토리 뷰
이번 포스팅에서는 Monte Carlo Method를 간단한 예제를 통해 알아보도록 하겠습니다.
1. Monte Carlo Method
Google에서 Monte Carlo Method를 검색해보면 "몬테카를로 방법(Monte Carlo method)은 난수를 이용하여 함수의 값을 확률적으로 계산하는 알고리즘을 부르는 용어이다." 라고 나와있습니다.
난수를 이용하여 함수의 값을 확률적으로 계산하는 알고리즘을 부르는 용어라는 말을 이해해 보자면,
예를 들어 100원짜리 동전을 던졌을 때 앞면이 나올 확률은?? - 함수의 값
100원짜리 동전을 던지자(앞면이 나올지 뒷면이 나올지 모름) - 난수
100번을 던져서 앞면이 나오는 횟수를 세어보자! - 확률적으로 계산
로 비유해볼 수 있을 것 같습니다. 그러면 우리는 100번 던져서 51번 앞면이 나왔다면 앞면이 나올 확률은 51% 정도 되겠구나!라고 생각할 수 있습니다.(물론 무한대로 던지면 50%로 수렴할 것입니다!)
1.1 문제 제기
Monte Carlo Method를 확인하는 유명한 방법은 정사각형에 꽉찬 원을 그리고 랜덤으로 점을 찍어 PI를 구하는 방법입니다.
원의 반지름이 r이라고 했을 때, 원의 면적은 PI * r^2이 됩니다. 그리고 정사각형의 면적은 (2r)^2 이 되어 4r^2이 되겠죠! 그 다음 정사각형 안에 랜덤으로 찍힌 점의 수를 a, 원 안에 찍힌 점의 수를 b라고 했을 때
원의 면적 : 정사각형의 면적 = 원안에 찍힌 점의 수 : 정사각형 안에 찍힌 점의 수 라는 식을 세울 수 있습니다.
PI * r^2 : 4r^2 = b : a 가 되고 정리하면 PI * r^2 * a = 4r^2 * b가 되고 PI에 대해서 정리하면
PI = 4b / a 가 됩니다.
이런식으로 3차원 공간에서도 똑같이 구와 정육면체를 가지고 구해볼 수 있습니다.
구의 반지름이 r일 때,
구의 부피 : 정육면체의 부피 = 원안에 찍힌 점의 수(b) : 정사각형 안에 찍힌 점의 수(a) 식을 세워보면
PI * 4/3 * r^3 : 8 * r^3 = b : a 가 되고 정리하면 PI * 4/3 * r^3 * a = 8 * r^3*a가 되고 PI에 대해서 정리하면
PI = 6b / a 가 됩니다.
이제 이 과정을 Code로 짜면 끝입니다!
1.2 Code로 구현
저는 VTK를 활용해서 구와 정육면체를 생성하고 정육면체 내부에 랜덤으로 Point를 생성하였습니다. 중요한 코드만 살펴보면 CallBack.cpp 안의 아래 코드입니다. 랜덤으로 Point를 생성하고 PI를 계산하는 부분입니다. 크게 어려운 부분은 없습니다.

제 GitLab에서 Code를 다운 받으셔서 실행하셔서 n을 누르게 되면 아래 영상과 같은 결과를 보실 수 있습니다. 또한 Callback.cpp 의 아래 100000 숫자를 변경하시면 한번에 찍는 점의 수를 조절할 수 있습니다.

첫번째 영상은 한 번에 1000개의 점을 찍을 때 나오는 PI값을 표현한 것이고 두번째 영상은 한 번에 10만개의 점을 찍는 결과입니다. 첫번째 보다 두번째가 오차가 더 작은 것을 확인하실 수 있습니다.
다음 포스팅에서는 Monte Carlo Tree Search(MCTS)와 MCTS를 활용한 간단한 게임을 만들어 보도록 하겠습니다.
'강화학습' 카테고리의 다른 글
| 수박 겉핥기 강화학습 - 내 머리를 강화하자 #2 (0) | 2020.09.18 |
|---|---|
| 수박 겉핥기 강화학습 - 내 머리를 강화하자 #1 (0) | 2020.09.02 |
| 수박 겉핥기 강화학습 - 내 머리를 강화하자 #0 (0) | 2020.09.02 |
- Total
- Today
- Yesterday
- C#
- 조합
- 중복 순열
- 최적화
- Scriptable Render Pipeline
- perspective projection
- RubiksCube
- Mesh
- Mesh Processing
- collision detection
- 경우의 수
- VTK
- normalized device coordinate
- 루빅스큐브
- Unreal
- Unity
- 참조 형식
- 유니티
- 순열
- value type
- 통계학
- opengl
- DirectX12
- CollisionDetection
- 값 형식
- 수학
- RL
- AABB
- 중복 조합
- MeshProcessing
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |