좀더 복잡한 확률로 랜덤값을 생성하는 함수를 만드려고 했는데, 잘 안되서 다시 질문해봄...
실수 q와 w사이의 랜덤값을 도출해내려고 하는데
값에 따라 뽑힐 확률을 변동하도록 하려고 함.
a와 b사이의 값은 a에서 b로 갈수록 뽑힐 확률이 최고점으로 상승하고
b와 c사이의 값은 뽑힐 확률이 최고점으로 동일하고
c와 d사이의 값은 반대로 c에서 d로 갈수록 뽑힐 확률이 최고점에서 0으로 하락하는
이런 함수를 만드려고 함.
그래서 최종적으로 뽑힐 확률은 저 그래프의 보라색 부분이 되게 하도록 하려고 했는데
이전 질문에서 답변받은걸 응용해서 단순하게 구간별로 나뉘어서 random.range 하면 되겠지 했는데
그랬더니 a~b구간에서 숫자가 나올 확률이 b~c구간과 동일해져 버리는 문제가 발생했음
결국 어떻게 코드를 짜야할지 갈피를 잃어버려서 질문해봄.
도대체 어떤 코드를 짜야 확률이 저 그래프처럼 나올수 있을까...
https://discussions.unity.com/t/normal-distribution-random/66530
이런건가?
근데 저 정규분포 방식 쓰려고 하니까 b-c 구간의 확률이 평평한 지점을 어떻게 구현할지 감이 안옴...
해당 댓글은 삭제되었습니다.
스플라인을 어떻게 확률로 바꿀수 있을지 잘 모르겠음;;
gpt한테 물어봐
gpt한테 물어봤었는데 헛소리만 내뱉는중...
원하는 확률 그래프 함수의 적분함수의 역함수를 구하면 된다. 문제를 단순화 해볼게 y = x인 그래프로 만들거라고 해보자. 위 함수의 적분은 y = 1/2 * x^2임. 이 함수의 역함수는 y = sqrt(2*x)임. 랜덤의 구간은 0~1일때 0~1/2임. (sqrt(2 * 1/2) == 1)이므로 즉 0 ~ 1/2 로 랜덤을 돌린담에 그 값을 sqrt(2*x) 한 결과가가 원하는 확률임.
그게 저번 질문에서 얻었던 답변이긴 한데, 위의 그래프를 어떻게 함수로 만들지 모르겠음...
그냥 구간 나눠서 적분하고 그걸 역함수 돌리면 되나?
만약 게시글처럼 그래프가 구간으로 나눠진 경우. 각 구간의 위의 방법을 적용해서 이어붙이면 된다. 추가 예시로 y = x 가 0~1, 그리고 y = 1이 1~2까지 구성된 확률 분포에서 0~2 사이로 구하려 한다고 쳐보자. 일단 y = x은 0~ 1/2인걸로 위에서 설명했고. 다음으로 y = 1 의 적분의 역함수는 y = x - 0.5임 (적분상수 c 계산 설명 귀찮다). 이 구간은 1~2니까 길이가 1이므로 최종 랜덤은 0~1.5 로 구한 다음 (0.5 + 1) 0.5 보다 작으면 앞의 함수로, 0.5 ~ 1.5이면 뒤의 함수로 돌리면 된다
두번째거 함수 잘못 계산한듯.. 근데 뭐 원리는 전달된거 같으니 더 이상의 설명은 생략한다
아 랜덤값이랑 구간도 만져야 하는걸 깜빡했구나 ㄳㄳㄳㄳ
저 확률분포의 cumulative density function을 구한다음에 그 함수의 역함수를 구하고 uniform distribution에서 sampling한 함수를 그 역함수에 넣으면 됨.
내가 설명한게 이거긴함.. 그나저나 이렇게 말하니까 디게 그럴싸한걸?