Поэтому я пытаюсь создать скрипт, который будет беспорядочно разбивать значение 4 на 12 разных переменных. Я не могу придумать хороший способ сделать это правильно. Я думал о рандомизации чисел, чтобы они были близки к 0,33 (1/12 из 4), но это часто приводило к тому, что последние несколько чисел были недооценены. Кто-нибудь пробовал что-либо подобное раньше или имел какие-то отличные идеи о том, как сделать это как можно более случайным и равномерно неравномерным?
Сгенерируйте 12 случайных чисел из вашего любимого генератора случайных чисел, назовите их r1..r12
.
Добавьте их все, назовите sum
.
Ваша первая случайная доля 4
равна (r1/sum)*4
. Остальное должно быть очевидно.
Создайте любое случайное число, большее 1, и после масштабирования до требуемой суммы.
Пример:
1 изменено на (1 * 4) / 78
2 изменено на (2 * 4) / 78
…
12 изменено на (12 * 4) / 78
Следующий алгоритм обеспечивает равномерно распределенные разделы, предполагая, что можно генерировать равномерно распределенные случайные числа в непрерывном диапазоне (или, по крайней мере, по дискретному диапазону с достаточным количеством возможных значений, что вероятность дублирования пренебрежимо мала).
Чтобы создать разбиение t
на k
значений:
Сгенерировать k-1
равномерно распределенные значения в диапазоне [0, t]
.
Сортируйте их и добавьте 0
в начале и t
в конце.
В качестве раздела используйте смежные различия.