N 개의 숫자의 합이 1이고 모든 숫자가 0과 1 내에 있도록 N 개의 난수 배열을 생성하는 알고리즘을 찾고 있습니다. 예를 들어 N = 3, 임의의 점 (x, y, z) 삼각형 안에 있어야합니다 :
x + y + z = 1
0 < x < 1
0 < y < 1
0 < z < 1
이상적으로는 영역 내의 각 점이 동일한 확률을 갖기를 원합니다. 너무 어려우면 요구 사항을 철회 할 수 있습니다. 감사.
N 개의 숫자의 합이 1이고 모든 숫자가 0과 1 내에 있도록 N 개의 난수 배열을 생성하는 알고리즘을 찾고 있습니다. 예를 들어 N = 3, 임의의 점 (x, y, z) 삼각형 안에 있어야합니다 :
x + y + z = 1
0 < x < 1
0 < y < 1
0 < z < 1
이상적으로는 영역 내의 각 점이 동일한 확률을 갖기를 원합니다. 너무 어려우면 요구 사항을 철회 할 수 있습니다. 감사.
답변:
먼저 샘플 내에서 샘플링하고 싶다고 가정합시다.
x + y + z = 1
0 ≤ x ≤ 1
0 ≤ y ≤ 1
0 ≤ z ≤ 1
샘플 포인트는 여전히 요청 된 영역에 높은 확률로 위치하므로 이는 큰 차이가 없습니다.
이제 심플 렉스 에서 점을 샘플링하는 것으로 남았습니다 . 3D 예제에서는 3D로 구현 된 2D 심플 렉스 (삼각형)를 얻습니다.
무작위로 점을 고르는 방법은이 블로그 게시물 에서 설명했습니다 (의견 참조).
문제의 경우 간격 에서 난수를 다음 과 을 더하여 숫자 목록을 얻습니다 . 리스트를 정렬 한 다음 두 연속 요소 간의 차이를 기록합니다. 이것은 당신 에게 까지 합한 숫자 리스트를 제공합니다 . 또한이 샘플링은 균일합니다. 이 아이디어는 The Bayesian bootstrap Ann 의 Donald B. Rubin에서 찾을 수 있습니다 . 통계 학자. 9, 1981, 130-134.( 0 , 1 ) 0 1 n + 1 n 1
예를 들어 ( )에는 3 개의 난수가 있고 정렬 된 순서를 얻습니다. 이는 차이점을 제공하며 , 구성에 의해이 4 개의 숫자는 1까지 합산됩니다.0.4 0.2 0.1
0 0.1 0.2 0.4 1
0.1 0.1 0.2 0.6
또 다른 접근 방식은 다음과 같습니다. 첫 번째 하이퍼 큐브 샘플 (즉 잊어 버린 x+y+z=1
)을 샘플링 한 다음 샘플 포인트를 정규화합니다. 정규화는 하이 큐브에서 simplex 로의 투영입니다 . 심플 렉스 중심 의 점이 외부 보다 더 많은 "사전 이미지 점"을 가지고 있다는 것이 직관적으로 명확해야합니다 . 따라서 하이퍼 큐브에서 균일하게 샘플링하면 단면에서 균일 한 샘플링이 제공되지 않습니다. 그러나 적절한 지수 분포를 사용하여 하이퍼 큐브에서 샘플링하면이 효과가 취소됩니다. 그림은 두 방법이 어떻게 샘플링되는지에 대한 아이디어를 제공합니다. 그러나 간단한 형식으로 인해 "정렬"방법을 선호합니다. 또한 구현하기가 더 쉽습니다.d - 1
기존 답변에 추가됩니다.
Devroye 는 이런 종류의 질문에 대한 훌륭한 참고 자료입니다. 7 장은 OP가 뒤 따르는 균일 한 순서 통계를 생성하는 데 필요한 알고리즘을 제공합니다.
이 문서를 참조하십시오 : 단위 단면에서 균일하게 Smith, N. and Tromble, R., Sampling .