Задать вопрос
damirazo
@damirazo
Software developer

Выбор случайного значения

Здравствуйте! Имеется последовательный список значений, например от 12 до 50. Необходимо выбрать случайное значение из данного списка при том условии, что чем меньше число, тем больше шанс его выпадения. Желательно, чтобы шанс выпадения каждого последующего числа уменьшался на одно и тоже определенное значение относительно предыдущего числа. Какие посоветуте алгоритмы для решения данной задачи?
  • Вопрос задан
  • 5151 просмотр
Подписаться 5 Оценить Комментировать
Ответ пользователя Ents К ответам на вопрос (5)
@Ents
<?php
function destination($x)
{
	return 1/2 * exp(-$x * $x); //интеграл от распределения вероятности x * exp(-x * x), принимает на вход 0..1
}
function my_rand($min, $max)
{
	return $min + destination(random()) * ($max - $min);
}
function random() //random 0..1
{
	return mt_rand() / mt_getrandmax();
}

echo my_rand(10, 100);


Вот накатал пример. destination — это интеграл от распределения нужной вероятности вероятности (нормированная на еденицу)

В данном случае возвращаются числа по распределению Максвелла
Ответ написан