Неоднородная реализация генератора случайных чисел?

в 3,5 существует встроенный jsonserializer. webrequest является правильным классом Ваш поиск.

Несколько примеров:

5
задан fbrereto 7 October 2009 в 21:45
поделиться

8 ответов

Вы могли бы использовать биномиальное распределение , если вас устраивает форма этого распределения. Установите n = 12 и p = 0,25. Это даст вам значение от 0 до 12 со средним значением 3. Просто добавьте 2 к каждому результату, чтобы получить диапазон и означать, что вы ищете.

Изменить: Что касается реализации, вы, вероятно, можете найти библиотека для выбранного вами языка, которая поддерживает неоднородные распределения (я сам написал один для Java ).

Биномиальное распределение может быть довольно легко аппроксимировано с использованием однородного ГСЧ. Просто выполните n испытаний и запишите количество успехов. Итак, если у вас n = 10 и p = 0,5, это все равно, что подбросить монету 10 раз подряд и подсчитать количество орлов. Для p = 0.

6
ответ дан 18 December 2019 в 14:48
поделиться

Вы не сказали, какой дистрибутив вам нужен. Что касается вашего конкретного примера, функция, которая произвела равномерное распределение от 2 до 8, будет удовлетворять вашим требованиям, строго так, как вы их написали:)

3
ответ дан 18 December 2019 в 14:48
поделиться

Если вы хотите неравномерное распределение случайных чисел, вам, возможно, придется реализовать какое-то сопоставление, например:

// returns a number between 0..5 with a custom distribution
int MyCustomDistribution()
{
  int r = rand(100); // random number between 0..100
  if (r < 10) return 1;
  if (r < 30) return 2;
  if (r < 42) return 3;
  ...
}
2
ответ дан 18 December 2019 в 14:48
поделиться

На основании подстатьи Википедии о неоднородных генераторах, может показаться, что вы хотите применить выходные данные генератора однородных псевдослучайных чисел к распределению площадей, которое соответствует желаемое среднее.

1
ответ дан 18 December 2019 в 14:48
поделиться

Моя первая идея будет выглядеть так:

  • генерировать числа в диапазоне 0..1
  • масштаб до диапазона -9..9 (x-0,5; x * 18)
  • сдвигать диапазон на 5 -> -4 .. 14 (добавить 5)
  • усечь диапазон до 2..14 (отбросить числа <2)

, что должно дать вам числа в нужном диапазоне.

0
ответ дан 18 December 2019 в 14:48
поделиться

Вы можете создать неоднородный ГПСЧ из однородного. Это имеет смысл, поскольку вы можете представить себе, как взять унифицированный ГПСЧ, который возвращает 0,1,2, и создать новый неоднородный ГПСЧ, вернув 0 для значений 0,1 и 1 для значения 2.

Это еще не все. это, если вам нужны конкретные характеристики распределения вашего нового неоднородного ГПСЧ. Это описано на странице Википедии о ГПСЧ , и специально упомянут алгоритм Зикгурата .

С этими подсказками вы сможете найти некоторый код.

1
ответ дан 18 December 2019 в 14:48
поделиться

Вам нужен распределенный / взвешенный генератор случайных чисел. Вот ссылка для начала.

0
ответ дан 18 December 2019 в 14:48
поделиться
Assign all numbers equal probabilities,

пока currentAverage не равно намеченному среднему (в пределах возможной маржи)

 pickedNumber = pick one of the possible numbers (at random, uniform probability, if you pick intendedAverage pick again)

 if (pickedNumber is greater than intendedAverage and currentAverage<intendedAverage) or (pickedNumber is less than intendedAverage and currentAverage>intendedAverage)

   increase pickedNumber's probability by delta at the expense of all others, conserving sum=100%

 else

   decrease pickedNumber's probability by delta to the benefit of all others, conserving sum=100%

 end if

 delta=0.98*delta (the rate of decrease of delta should probably be experimented with)

end while

0
ответ дан 18 December 2019 в 14:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: