Давайте сначала предположим, что вы хотите попробовать в течение
x + y + z = 1
0 ≤ x ≤ 1
0 ≤ y ≤ 1
0 ≤ z ≤ 1
Это не имеет большого значения, так как точка выборки все еще будет лежать в запрашиваемой области с высокой вероятностью.
Теперь у вас есть выборка точки из симплекса . В 3-м примере вы получите 2-й симплекс (треугольник), реализованный в 3-м.
Как подобрать точку случайным образом равномерно обсуждалось в этом сообщении в блоге (см. Комментарии).
Для вашей проблемы это будет означать, что вы берете случайных чисел из интервала ( 0 , 1 ) , затем вы добавляете 0 и 1, чтобы получить список из n + 1 чисел. Вы сортируете список, а затем записываете различия между двумя последовательными элементами. Это дает вам список из n чисел, которые будут суммироваться до 1 . Кроме того, эта выборка является равномерной. Эту идею можно найти в Donald B. Rubin, The Bayesian bootstrap Ann. Statist. 9, 1981, 130-134.n−1(0,1)01n+1n1
Например, ( ) у вас есть три случайных числа, затем вы получаете отсортированную последовательность, и это дает различия , и по построению эти четыре числа суммируют до 1.n=40.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
), а затем нормализация точки выборки. Нормализация - это проекция гиперкуба на d - 1 -симплекс. Интуитивно понятно, что точки в центре симплекса имеют больше «точек перед изображением», чем снаружиdd−1, Следовательно, если вы делаете выборку равномерно из гиперкуба, это не даст вам равномерную выборку в симплексе. Однако, если вы производите выборку из гиперкуба с соответствующим экспоненциальным распределением, этот эффект отменяется. Рисунок дает вам представление о том, как будут использоваться оба метода. Однако я предпочитаю метод «сортировки» из-за его простой формы. Это также легче реализовать.