{% else-1 %}
Обновить | Подписаться | Поднять тему
Чтобы выполнить действие авторизируйтесь или пройдите регистрацию на сайте.
1. [автор] (13 сен 2014, 00:03) [0/0] [0] [отв] [спам] [под] +1 | -1

генерация случайного числа с заданной вероятностью. Как это реализовать в PHP? Например есть массив $random(1=>25%,2=>50%,3=>10%,4=>15%);

2.
Hatsune Miku * [мошенник] 22.23
(13 сен 2014, 00:32) [0/0] [0] [отв] [спам] [под] +1 | -1

Для решения Вашей задачи, существуют следующие методы:

Аналитический;
Табличный;
Метод композиций (не буду рассматривать, так как его применяют при получении распределений по закону Эрланга или гиреэкспоненциальному).
Аналитический метод - суть заключается в подстановки значения генератора случайных чисел в некоторую функцию. Для нахождения функции необходимо решить уравнение F(x) = s, где F(x) – Ваше распределение, s – значение генератора случайных чисел.

Для примера, возьмём экспоненциальное распределение:

alt text

В пункте 2 логарифмируем выражение. Выражения 3 и 4 эквиваленты с точки зрения теории вероятностей, поскольку случайные величины s и (1-s) распределены по одному и тому же равномерному закону в интервале (0;1).

Преимущества

Высокая точность;
Не требуется память под хранение таблицы (в отличие от табличного метода).
Недостатки

Требует много вычислительных ресурсов (логарифм раскладывается в ряд);
Применим только для функций, у которых можно вычислить интеграл аналитически.
Табличный метод – заключается в формировании таблицы содержащий пары чисел: значение функции распределения генератора случайных чисел и соответствующее ему значение. Значения между узлами обычно рассчитывается линейной интерполяцией.

Преимущества

Можно построить таблицу для формирования любого закона распределения;
Можно обеспечить любую точность;
Мало процессорного времени тратится на обработку.
Недостатки

Затраты памяти на хранение таблицы;
Наличие погрешности, в результате применения линейной интерполяции;
В некоторых отрезках, функция может резко изменяться, вследствие чего необходимо подбирать оптимальный шаг.

3. (13 сен 2014, 00:40) [1/0] [1] [отв] [спам] [под] +1 | -1

Гг код,но всё же.. ///если конечно правильно смысл понял
$r=random(1,100);
if($r<=15){1} //вероятность 15 из 100
else
if($r<=25 and $r>15){2} //вероятность 25 из 100
else
if($r<=85 and $r>25){3} //вероятность 85 из 100
else {4}

4. [автор] (13 сен 2014, 09:31) [0/0] [0] [отв] [спам] [под] +1 | -1

Лорд, Хороший вариант но этот код подойдеть только эсли в массиве 1 или 2 вероятностей. Этот код не будеть работать эсли значения процентов равен или близко к друг-другу. Например как реализоват это $r = array(1=>25,2=>25,3=>10,4=>10,5=>30);

5. (13 сен 2014, 17:41) [0/0] [0] [отв] [спам] [под] +1 | -1

Tamerlan, ну почему же?внутри просто ещё раз random(значения вероятности)

  • 1 из 1
Чтобы писать сообщения авторизируйтесь или пройдите регистрацию на сайте.
Подписаны: 0
Скачать тему | Файлы темы | Фильтр сообщений