Я ищу алгоритм для генерации массива из N случайных чисел, так что сумма из N чисел равна 1, а все числа лежат в пределах от 0 до 1. Например, N = 3, случайная точка (x, y, я) должен лежать в треугольнике:
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) 0 1 n+1 n 1
Например, ( ) у вас есть три случайных числа, затем вы получаете отсортированную последовательность, и это дает различия , и по построению эти четыре числа суммируют до 1.n=4
0.4 0.2 0.1
0 0.1 0.2 0.4 1
0.1 0.1 0.2 0.6
Другой подход заключается в следующем: сначала выборка из гиперкуба (о которой вы забылиd d−1 , Следовательно, если вы делаете выборку равномерно из гиперкуба, это не даст вам равномерную выборку в симплексе. Однако, если вы производите выборку из гиперкуба с соответствующим экспоненциальным распределением, этот эффект отменяется. Рисунок дает вам представление о том, как будут использоваться оба метода. Однако я предпочитаю метод «сортировки» из-за его простой формы. Это также легче реализовать.
x+y+z=1
), а затем нормализация точки выборки. Нормализация - это проекция гиперкуба на d - 1 -симплекс. Интуитивно понятно, что точки в центре симплекса имеют больше «точек перед изображением», чем снаружиисточник
Это добавить к существующим ответам.
Devroye является отличным справочником для вопросов такого рода. В главе 7 приведены алгоритмы, необходимые для генерации статистики единообразного порядка, за которой следует OP.
источник
Здесь
uniform(0,1)
возвращает действительное число независимо и равномерно распределенное между 0 и 1.источник
См. Эту статью : Смит, Н. и Тромбл, Р., Выборка равномерно из простого симплекса .
источник