в 3,5 существует встроенный jsonserializer. webrequest является правильным классом Ваш поиск.
Несколько примеров:
Вы могли бы использовать биномиальное распределение , если вас устраивает форма этого распределения. Установите n = 12 и p = 0,25. Это даст вам значение от 0 до 12 со средним значением 3. Просто добавьте 2 к каждому результату, чтобы получить диапазон и означать, что вы ищете.
Изменить: Что касается реализации, вы, вероятно, можете найти библиотека для выбранного вами языка, которая поддерживает неоднородные распределения (я сам написал один для Java ).
Биномиальное распределение может быть довольно легко аппроксимировано с использованием однородного ГСЧ. Просто выполните n испытаний и запишите количество успехов. Итак, если у вас n = 10 и p = 0,5, это все равно, что подбросить монету 10 раз подряд и подсчитать количество орлов. Для p = 0.
Вы не сказали, какой дистрибутив вам нужен. Что касается вашего конкретного примера, функция, которая произвела равномерное распределение от 2 до 8, будет удовлетворять вашим требованиям, строго так, как вы их написали:)
Если вы хотите неравномерное распределение случайных чисел, вам, возможно, придется реализовать какое-то сопоставление, например:
// 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;
...
}
На основании подстатьи Википедии о неоднородных генераторах, может показаться, что вы хотите применить выходные данные генератора однородных псевдослучайных чисел к распределению площадей, которое соответствует желаемое среднее.
Моя первая идея будет выглядеть так:
, что должно дать вам числа в нужном диапазоне.
Вы можете создать неоднородный ГПСЧ из однородного. Это имеет смысл, поскольку вы можете представить себе, как взять унифицированный ГПСЧ, который возвращает 0,1,2, и создать новый неоднородный ГПСЧ, вернув 0 для значений 0,1 и 1 для значения 2.
Это еще не все. это, если вам нужны конкретные характеристики распределения вашего нового неоднородного ГПСЧ. Это описано на странице Википедии о ГПСЧ , и специально упомянут алгоритм Зикгурата .
С этими подсказками вы сможете найти некоторый код.
Вам нужен распределенный / взвешенный генератор случайных чисел. Вот ссылка для начала.
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