확률 뽑기 로직 정리

C# 2022. 3. 3. 13:00
728x90

물건 5개 잇다 가정

차례대로 1,2,3,4,5번으로 지정하고

각각의 확률은 5%, 10%, 10%, 30%, 45%

누적확률을 이용하면

누적 확률은 5%, 15%, 25%, 55%, 100%

만약에 랜덤으로 뽑은 확률값이 70%가 나왔다. 그럼 누적확률 값을 사용해서 5%, 15%, 25%, 55%인 1번,2번,3번,4번 제외 100%인 5번이 선택되는것

여기서 주의할 점은 누적으로 더하는 확률값을 사용하기때문에 확률 순서거 적은것부터 정렬해서 계산되도록 해야한다.

    float[] probs = new float[5]{5.0f, 10.0f, 10.0f, 30.0f, 45.0f}; //1, 2, 3, 4, 5
    float totalProbs = 100.0f;
    float randomValue = Random.value * totalProbs;
   
    double cumulative = 0.0f;

    for(int i=0; i<5; i++)
    {
        culValue += probs[i];
        if(randomValue <= culValue)
        {
            return i;
        }
    }

반대로 누적으로 빼는 방법으로 하는 방법도 있음 

뺀다면 확률이 큰거부터 정렬해서 계산되도록 해야되는거 말곤 같은듯

아래 유니티 사이트에서 예제 코드를 확인할수있음

https://docs.unity3d.com/kr/2017.4/Manual/RandomNumbers.html

728x90
Posted by 정망스
,


맨 위로
홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침