Создать массив чисел, который соответствует распределению вероятностей в Ruby? - PullRequest
2 голосов
/ 29 декабря 2010

Скажем, у меня есть 100 записей, и я хочу смоделировать дату created_at, чтобы она соответствовала некоторой кривой.Есть ли библиотека для этого или какую формулу я могу использовать?Я думаю, что это то же самое:

Генерация случайных чисел с вероятностным распределением

Я не знаю много о том, как они классифицируются в математике, но я 'смотрю на такие вещи как:

  • кривая колокола
  • логарифмическая кривая (типичная биология / эволюция)?...

Просто ищу некоторые формулы в коде, чтобы я мог сказать это:

  • Учитывая 100 записей, временной интервал 1.week и интервал 12.hours
  • установить created_at для каждой записи таким образом, чтобы она приблизительно соответствовала curve

Большое спасибо!

Обновление

Я нашел это сообщение на форуме о алгоритмах ruby ​​, которое привело меня к rsruby , мосту R / Ruby, но это кажется слишком большим.

Обновление 2

Я написал этот небольшой фрагмент, пробуя библиотеку gsl, добираясь туда ...

Генерация тестовых данных в Railsгде создан_ат падает вдоль статистического распределения

Ответы [ 4 ]

3 голосов
/ 27 сентября 2012

Недавно я столкнулся с крупье , рубиновым камнем, который нацелен на создание чисел согласно различным статистическим распределениям.

Я еще не попробовал, но звучит довольно многообещающе.

2 голосов
/ 29 декабря 2010

Вы можете генерировать метки времени UNIX, которые на самом деле являются целыми числами. Сначала выясните, когда вы хотите начать, например, сейчас:

start = DateTime::now().to_time.to_i

Узнайте, когда должен быть конец вашего интервала (скажем, через 1 неделю):

finish = (DateTime::now()+1.week).to_time.to_i

Ruby использует этот алгоритм для генерации случайных чисел. Это почти равномерно. Затем сгенерируйте случайные числа между ними:

r = Random.new.rand(start..finish)

Затем преобразовать это обратно в дату:

d = Time.at(r)

Это также выглядит многообещающе: http://rb -gsl.rubyforge.org / файлы / RDoc / randist_rdoc.html

И это тоже: http://rb -gsl.rubyforge.org / файлы / RDoc / rng_rdoc.html

0 голосов
/ 29 мая 2015

Другим вариантом является Distribution gem в SciRuby .Вы можете сгенерировать нормальные числа следующим образом:

require 'distribution'

rng = Distribution::Normal.rng
random_numbers = Array.new(100).map { rng.call }

Существуют также ГСЧ для различных других распределений.

0 голосов
/ 29 декабря 2010

С вики :

Есть несколько способов генерировать случайное число на основе функция плотности вероятности. Эти методы включают преобразование униформы случайное число в некотором роде. Потому что эти методы работают одинаково хорошо в создании как псевдослучайного и истинные случайные числа.

Один метод, называемый инверсией метод , включает в себя интеграцию до область больше или равна случайное число (которое должно быть генерируется между 0 и 1 для правильного Распределения).

Второй метод, называемый метод принятия-отклонения , включает в себя выбор значений х и у и проверка, является ли функция х больше, чем значение у. Если это, значение x принято. Иначе, значение х отклоняется и алгоритм пытается снова.

Первый метод используется в принятом ответе в вашем связанном вопросе SO: Создание случайных чисел с вероятностным распределением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...