- pseudo-random numbers
- MonteCarlo simulations
- top-down and spiral design techniques
- unit testing-implementation and debugging of complex programs
- Our simulation program will have to deal with uncertain events.
- Many simulations share this property of requiring events to occur with a certain likelihood.
- These sorts of simulations are sometimes called Monte Carlo algorithms because the results depend on "chance" probabilities.
- ํ์ด์ฌ์ ๊ฒฝ์ฐ random ๋ชจ๋์ ์ฌ์ฉํด์ ๋๋คํ ์๋ฅผ ๋ฝ์๋ผ ์ ์์.
- ์๊ณ ๋ฆฌ์ฆ ์์ง์ Mersenne Twister ์์ฑ๊ธฐ๊ฐ ์ฌ์ฉ๋จ.
- ๊ธฐ๋ณธ ์ ์ฌ๋์ ๋ฐ์๊ณผ ๋ฉ๋ฅด์ผ ํธ์์คํฐ ๊ตฌํ ์ฐธ๊ณ ์๋ฃ ๊ธฐ๋ณธ ์ ์ฌ ๋์ ๋ฐ์๊ณผ ๋ฉ๋ฅด์ผ ํธ์์คํฐ ๊ตฌํ
import random
random.random()
- random ๋ชจ๋ ๋ด๋ถ์๋ Random์ด๋ผ๋ ํด๋์ค๊ฐ ์ ์๋์ด ์์.
- ์ฌ์ฉ์๊ฐ random ๋ชจ๋์ import ํ๋ ์๊ฐ Randomํด๋์ค๋ ์๋์ ์ผ๋ก ์ธ์คํด์คํ ๋๋ค. (Random ํด๋์ค์ ๊ฐ์ฒด๊ฐ ํ๋ ์์ฑ๋๋ ๊ฒ)
- _inst ๊ฐ Random ํด๋์ค์ ๊ฐ์ฒด์ด๋ค. Random๊ฐ์ฒด์๋ random์ด๋ผ๋ ๋ฉ์๋๊ฐ ์๋ค. random=_inst.random ๋ฉ์๋๋ฅผ bindingํด์ random์ด๋ผ๊ณ ์ฌ์ฉํ๋ ๊ฒ
- ์์ธํ random์ ๋ํ ๋ด์ฉ์ tistory ๋ธ๋ก๊ทธ ์ฐธ์กฐ ํ์ด์ฌ random ๋ชจ๋๋ก ๋์ ์์ฑํ๊ธฐ
- ๋ชฌํ ์นด๋ฅผ๋ก ์๋ฎฌ๋ ์ด์ ์ ๋จ๋ค์ ์ซ์์ ํ๋ฅ ์ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ธฐ๋ฒ
- ๊ฐ์ฅ ๊ฐ๋จํ ์์ ๋ ์์ฃผ์จ์ ํฌ๊ธฐ๋ฅผ ์์ธกํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด๋ณด๋๊ฒ
- ๋ฐ์ง๋ฆ์ด 1์ธ์๊ณผ ๊ทธ์์ ๋๋ฌ์ผ ์ฌ๊ฐํ์ด ์๋ค.
- ์ด ์ฌ๊ฐํ์์ ๋ฌด์์๋ก 10000000 ๋ฒ์ ์ ๋ค์ ์ง๋๋ค.
- ์ด์ ๋ค์ด ์ ์์ ๋จ์ด์ง ํ๋ฅ ์ ์ ๋์ด/์ฌ๊ฐํ ๋์ด, ์ฆ Pi/4์
- ์ ๋ค์ด ์์์ ๋จ์ด์ง๋ ํ์๋ 10000000*(์์๋์ด(PI)/์ฌ๊ฐํ ๋์ด)
- PI= numberOfHits/1000000
import random
NUMBER_OF_TRIALS = 10000000
numberOfHits=0
for i in range(NUMBER_OF_TRIALS): #์ ์ด ๋จ์ด์ง๋ ์์น
x=random.random()*2-1
y=random.random()*2-1
ifx*x+y*y<=1: #์ ์ด ๋จ์ด์ง๋ ์์น๊ฐ ์ ์์ธ ๊ฒฝ์ฐ numberOfHits์ +1
numberOfHits+=1
pi=4*numberOfHits/MUMBER_OF_TRIALS
print("PL is",pi)
์ฐธ๊ณ ์๋ฃ ๋ชฌํ ์นด๋ฅผ๋ก ๋ฉ์๋ ๋ฐ ์์ฃผ์จ ์ ๋ฐ๋ ,ํ์ด์ฌ๊ณผ ์ฃผ๊ฐ ๋ชฌํ ์นด๋ฅผ๋ก ์๋ฎฌ๋ ์ด์
- ํํญ์ ์ค๊ณ๊ณผ์
- ๊ฐ ๋ถ๋ถ ๋ฌธ์ ์ฌ์ด์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ค.
- ๊ฐ ๋ถ๋ถ ๋ฌธ์ ์ ์ธํฐํ์ด์ค๋ฅผ ์ค์ํ๋ ์ธ๋ถ์ฌํญ์ ์ฑ์๋ฃ๋๋ค.
- ๋ชจ๋ ๋ถ๋ถ ๋ฌธ์ ์ ๋ํด ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
- ์ฐธ๊ณ ์๋ฃ Python์ ์ฌ์ฉํ์ฌ ์๊ณ ๋ฆฌ์ฆ ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ๋ฌธ์ ํด๊ฒฐ,์๊ณ ๋ฆฌ์ฆ ๊นํ๋ธ ๊ณต๋ถ์๋ฃ
- prototype ๋ช ์ธ ์ค๊ณ ๊ตฌํ ํ ์คํธ ๋ฅผ ๊ฑฐ์ณ ์ ์ฒด๋ฌธ์ ๋ฅผ ํ๋ฒ์ ํด๊ฒฐํ๋ ๋์ ์ ๋จผ์ ํ๋กํ ํ์ ์ ๋ํ ์ค๊ณ์ ๊ตฌํ ๊ทธ๋ฆฌ๊ณ ํ ์คํธ๋ฅผ ๊ฑฐ์น๋ค์ ํ๋กํ ํ์ ์ด ์ํ๋ ํ๋ก๊ทธ๋จ์ ์ด๋ฅผ๋๊น์ง ์ ์ง์ ์ผ๋ก ์์ ๊ฐ๋ฐ์ฃผ๊ธฐ๋ฅผ ๋๋ฉฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํด ๋์๊ฐ๋ ๋ฐฉ์
from random import random
def simOneGame():
scoreA = 0
scoreB = 0
serving = "A"
for i in range(30):
if serving == "A" :
if random() < .5:
scoreA = scoreA + 1
else:
serving = "B"
else:
if random() < .5:
scoreB = scoreB + 1
else:
serving = "A"
print(scoreA, scoreB)
if __ name __ == '__ main __' : simOneGame()
- ๋ฐ๋ณต๋ฌธ ๋ชธ์ฒด ๋ ๋ถ๋ถ์ print๋ช ๋ น๋ฌธ์ ์ฌ์ฉํ๊ฒ ์ค๊ฐ ๊ณผ์ ์ ์ ใ ์๋ฅผ ์ถ๋ ฅํ๋ฉด ํ๋กํ ํ์ ํ๋ก๊ทธ๋จ์ ๊ฒฝ๊ธฐ ์์ ํ์ธ ๊ฐ๋ฅ
- ๊ต์ฌ์ ์ ์ ๋ฌธ์ ์ธ ๊ฒฝ์ฐ์์ ์ผ๋ฐ์ ์ผ๋ก ์น๋ฅ ์ ์ ํด์ ์ด์ ๋ํด n์ ํ์ธํ์ฌ ๊ตฌ์ํ๊ฒ๊ณผ๋ ์กฐ๊ธ ๋ค๋ฅด๊ฒ 50ํผ์ผํธ์ ํ๋ฅ ์ ์ด๋ฏธ ๊ฐ์ ํ ํ์ ์ด๋ฅผ ํ๋กํ ํ์ ์ผ๋ก ๋๋ค.
- ์ธ์์ถ๊ฐ ํ์์ ํตํด์ ์ ์์ ๋ ๋ฆฌ ์น๋ฅ ์ด ๋ค๋ฅด๊ฒ ๋ง๋๋ ๊ฒ , ์ดํ์ ํ๋ก๊ทธ๋จ์ ํ์ฅํ๋ ๊ฒ
- ์ต์ํ์ง ์์ ๊ฐ๋ฐ์ด๋ ์ด๋ณด ํ๋ก๊ทธ๋๋จธ์๊ฒ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ๋ณด์. ๋ณด์์ ์ ์ฑ๊ฒฉ