주제

1번 게임을 시뮬레이션 한다고 가정함


배경
나무게임은 총 5번, 어느 특정한 지점에서 50/50의 확률로 좌우로 움직임 (설령 아니어도 그렇다고 합시다)

맨 상단에서 시작한 공은 맨 하단의 공간중 하나로 도달할 것으로 기대됨


이론

경우의 수를 계산해보면 보상배율은 매우 적절하단 것을 알 수 있음

파스칼의 삼각형을 이용하면 쉽게 추측할 수 있음.
시작한 공이 도착할 수 있는 경우의 수는 [1, 5, 10, 10, 5, 1] 순서. 

확률은 "해당 사건이 일어날 경우의 수" / "전체 경우의 수" 임으로,

각각의 확률은 [1/32, 5/32, 10/32, 10/32, 5/32, 1/32] 임.

그래서 배율이 [32/1, 32/5, 32/10, 32/10, 32/5, 32/1] 이 되는 것임.


그런데 저 배율에 수익성이 없는걸까? 그것이 의문의 시작이다.


알고리즘

from random import choice
def startGame():

    result = 5

    for i in range(5):

        result += choice((-1, 1))

    return result // 2


파이썬으로 만든 게임 시뮬레이션.

시작 지점 5 에서 매번 1을 더하거나 뺌. 그걸 5번 시행함.

그러면 나오는 경우는 "0, 2, 4, 6, 8" 뿐임. (직접 그려서 찾아봐도 됨)

그걸 2로 나눈 값을 내보내줌.
즉, startGame을 한번 호출 할때마다 한번의 게임 결과가 나오는 것임.


게임 돌리기

def main():

    print("메루카")


    numbers = [0 for _ in range(6)]

    winrate = [0 for _ in range(6)]

    result = [0.0 for _ in range(6)]


    multiplier = 10000

    insert = 100

    for i in range(32 * multiplier):

        temp = startGame()


        for j in range(6):

            if j in (0, 5):

                m = 32

            elif j in (1, 4):

                m = 6.4

            else:

                m = 3.2


            if temp == j:

                result[j] += insert * m * 0.95

                winrate[j] += 1

            else:

                result[j] -= insert


        numbers[temp] += 1


    print(f"시행 횟수 : {32 * multiplier}")


    print("\n기대 비율")

    print("1 | 5 | 10 | 10 | 5 | 1")

    print("시행 비율")

    for n, i in enumerate(numbers):

        print("{0} : {1:6.2f} / 32".format(n+1, i / multiplier))


    print("\n기대 확률")

    print("0.03125 | 0.15625 | 0.3125 | 0.3125 | 0.15625 | 0.03125")

    print("시행 확률")

    for n, i in enumerate(winrate):

        print("{0} : {1:0.6f}".format(n + 1, i / (32 * multiplier)))


    print(f"\n매회 {insert}개 투자 결과")

    for n, i in enumerate(result):

        print(f"{n+1} : {i}")


읽다보면 이해는 될것임.

(for j in range(6): 부분에 대해서는 노가다를 피하기 위한 것으로 생각하셈)


multiplier 변수로 32*n 회 게임을 진행하게 정할 수 있음

insert 변수로 한번에 가치 n을 집어넣는다고 정할 수 있음


결과창은 4가지로 보여줌

시행횟수는 말 그대로 시행한 횟수.

확률은 시행 횟수가 커질수록 정확해짐. 


처음으로 비율을 보여줌

기대 비율은 가장 이상적인 이론적 비율.

시행 비율은 시뮬레이션 한 결과를 보여준 것으로, 기대 비율에 가까울수록 결과를 신뢰가능함.


다음으로는 확률을 보여줌 위와 같음.

혹여나 출현 확률이 특이한지(너무 높다거나) 알아볼 수 있음.


마지막은 가장 중요한 "수익"

매회 n개를 투자한 결과를 보여줌.

양수라면 흑자, 음수라면 적자.


마무리

처음에 숫자 내보고 양수가 나와서 두 눈을 의심함. 그런데 통계는 이게 수익이 난다고 알려주고 있음

실험 해보면 1, 6에 베팅한 결과는 음수, 양수를 이동한다는 것을 볼 수 있음.

또, 3, 4에 베팅하는게 가장 수익이 좋다는 것을 알 수 있음


물론 위의 결과에 나온 835만이라는 결과는 32만번 했을때의 결과임

100개 투자로 32번 했을때는 436, 32, 1244, -776 같은 숫자가 나옴. 게시글 1개가 가치 100이라는 것을 생각해보면 시간투자 대비 들어오는 액수가 적음

그런데 액수가 커지면 버는 돈도 빨라짐.


여담

참고로 위는 "n번동안 하나만 베팅"한 결과임. 2가지, 3가지를 섞어서 한다면 어찌될진 모르겠음
아무래도 매번 "독립시행" 이기 때문에 이전 결과를 고려하는건 잘못된 가정임. 그러나, 금액을 바꾸는 식으로도 가능할지도 모름.

한번 위 파이썬 코드가지고 찾아보셈. 어쩌면 더 단기간에 고수익을 올리는 필승법을 찾을지도?