Возможно, вы сможете использовать биномиальное распределение , если вас устраивает форма этого распределения. Установите n = 12 и p = 0,25. Это даст вам значение от 0 до 12 со средним значением 3. Просто добавьте 2 к каждому результату, чтобы получить диапазон и среднее значение, которое вы ищете.
Редактировать: Что касается реализации, вы, вероятно, можете найти библиотеку для выбранного вами языка, которая поддерживает неоднородные дистрибутивы (я сам написал для Java ).
Биномиальное распределение можно довольно легко аппроксимировать с помощью равномерного ГСЧ. Просто выполните n испытаний и запишите количество успехов. Так что, если у вас n = 10 и p = 0.5, это все равно, что подбрасывать монету 10 раз подряд и считать количество голов. Для p = 0,25 просто сгенерируйте равномерно распределенные значения между 0 и 3 и считайте только нули как успехи.
Если вам нужна более эффективная реализация, есть умный алгоритм, скрытый в упражнениях тома 2 «Искусство компьютерного программирования» Кнута.