Генерация случайных чисел из Коши - PullRequest
1 голос
/ 05 января 2012

Я новичок в Java. Я знаю, что в Java есть функция генератора случайных чисел из Gaussian Distribution. Как я уже знал из другого вопроса, встроенный в Java генератор случайных чисел не так хорош, потому что он не принимает входное среднее значение и стандартное отклонение гауссовского распределения, которое мне больше всего нужно. Я работаю над генетическим алгоритмом. Для мутации мне нужно сгенерировать случайное число из распределений Гаусса, распределения Коши и распределения Леви. Функция генератора должна принимать параметр шкалы и параметр местоположения этого распределения. Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 21 сентября 2013

Распределение Коши из пакета org.apache.commons.math3.distribution кажется тем, что вы хотите.

Java не имеет этого встроенного компонента.

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

0 голосов
/ 15 марта 2014

Несмотря на то, что вопрос довольно старый, я постараюсь ответить, потому что искал то же самое, и это может помочь следующему человеку:

Чтобы реализовать rng для произвольного распределения, вам необходимо знать следующее:

  1. Генерация равномерно распределенных чисел в диапазоне [0,1) не проблема
  2. Вывод функции распределения - это плотность распределения (например, гауссова кривая Белла)
  3. Функция распределения равна (более или менее) 0 в бесконечности и 1 в бесконечности. Между этими крайностями оно увеличивается монотонно.

Теперь вы должны использовать эти вещи (как минимум 1. и 3.) следующим образом:

  1. Рассчитать функцию распределения (с учетом плотности)
  2. Решите это уравнение для х
  3. В полученной функции передайте равномерно распределенное число в качестве параметра, чтобы получить правильно распределенные результаты.
* * 1 022 Пример: * 1 023 *

Распределение Коши:

f (x) = 1 / (x² + 1) / Pi

  1. Функция распределения:

y = F (x) = arctan (x) / Pi + 0.5 (необходимо добавить 0.5, чтобы получить функцию R -> [0,1]

  1. Решить для х

x = G (y) = tan (y-0.5) * Pi (G является обратным к F - обычно F ^ (- 1)

  1. Теперь просто поместите сгенерированный double как y в функцию:

    return Math.tan (rand.nextDouble () - 0.5) * Math.Pi;

Для параметра «Масштаб и местоположение» необходимо сделать только следующее:

X - ваша распределенная стохастическая переменная по Гауссу (то есть: N (0,1)).

Среднее (a * X + b) = a * среднее (X) + b Var (a * X + b) = a² * Var (X)

a - ваш параметр масштаба, b - ваш параметр местоположения. Поэтому сгенерируйте стандартную гауссовскую распределенную переменную, умножьте ее на sqrt (scale) и добавьте параметр location.

0 голосов
/ 05 января 2012

Java не имеет этих встроенных. Вы должны будете сделать свои собственные функции или найти стороннюю библиотеку, которая это делает.

...