распределение гаусса было мной выбрано наоборот как более близкое к человеческому, чем равномерное. Более того в стандартном виде вы не можете задать распределение от min до max. Там будет равномерное снижение вероятности при удалении от "центра", но она никогда не станет нулевой. Сигма фактически определяет насколько быстро/медленно снижается эта вероятность. В моем модуле значение искуственно генерируется заново, если оно вышло за рамки лимитов. Был где-то удобный на первый взгляд не казистый эмулятор вебовский. Там можно было бегунки крутить и смотреть изменение графика. Ну хотя бы тут посмотрите
https://planetcalc.ru/4986/Смысл в том, что вы можете при желании изменить степень "концентрированности".
В time.lua есть следующая строка:
Код
local time_to_sleep = sys.random_g(param[i], param[i+1])
у меня она 462, нумерация может чуть отличаться.
Если вы хотите изменить распределение - измените ее. Можно указать сигму _либо_ процент.
Код
local time_to_sleep = sys.random_g(param[i], param[i+1], sigma, perc)
Сейчас там стоит процент по умолчанию 99%. Если будете уменьшать - распределение будет более плавно "расползаться" в стоорны. Ну т.е. можете изменить на что-нибудь вроде:
Код
local time_to_sleep = sys.random_g(param[i], param[i+1], nil, 0.90)
При этом нужно понимать, что на краях графика будет происходить резкий обрыв. Что не очень хорошо может выглядеть при статистическом анализе, хотя визуально вряд ли это кто-то заметит. Именно поэтому текущее значение было выбрано, как некоторый компромисс, который по _моему_ мнению выглядит разумно.
Так же вы можете выключить "отброс" крайних значений, которые не входят в дипазон:
Код
local time_to_sleep = sys.random_g(param[i], param[i+1], nil, 0.90, false)
Вообще это вызов функции из system.lua который лежит рядом. Вы можете его модифицировать, как вам угодно. Полное описание находится в system.lua:
Код
-- random_g(min, max, sigma, prob, trim, round)
-- Генерирует псевдослучайно число с нормальным
-- с нормальным распределением по гауссу.
--
-- min - минимальное значение.
-- Если не задан, то вернет значение
-- в диапазоне от 0 до 1.
-- Если max == nil, то диапазон считается
-- от 1 до min, т.е. min рассматривается,
-- как max. Логика поведения аналогичная
-- math.random().
--
-- max - максимальное значение.
-- Если max == nil, то диапазон считается
-- от 1 до min, т.е. min рассматривается,
-- как max. Логика поведения аналогичная
-- math.random().
--
-- sigma - стандартное отклонение.
--
-- prob - вероятность того, что сгенерированное
-- число будет лежать в пределах
-- между min и max.
-- По умолчанию: 0.986.
-- Из-за проблем с недостаточной точностью
-- в double функция имеет некторую погрешность
-- и минимальный шаг. В реальности генерируется
-- с вероятностью 0.993, значение 0.986
-- было подобрано экспериментальным путем.
-- long double, float80_t, float128_t
-- не поддерживаются luajit.
--
-- trim - отбрасывать значения, которые не
-- входят в диапазон min - max.
-- Значение будет сгенерировано повторно.
-- Возможные значения true/false.
-- По умолчанию: true.
--
-- round - округлять до целого.
-- Возможные значения true/false.
-- По умолчанию: true.
Сообщение отредактировал DarkMaster - 17.3.2025, 10:37