Рандом с заданной вероятностью

grin

Новичок
Рандом с заданной вероятностью

Вечер добрый.

Есть задача, делать разные рандомные действия с заданной вероятностью. Используется в разных ситуациях, например дроп в игре с вероятностью 75% и т.д.
Сейчас использую вот такую вот функцию

PHP:
    public function GAME_getRand($probability)
    {
        for ($i = 0; $i < 100; $i++) {
            if ($i < $probability) {
                $box[] = 1;
            } else {
                $box[] = 0;
            }
        }
        
        shuffle($box);
        return $box[array_rand($box)];
    }
например,
серия тестов, вероятность 80%, запускаю 10 раз на тест,
результаты слишком разные, от 8 нулей в тесте, до 10 единиц

может есть другое решение, кто что использует?
 

vovanium

Новичок
не делай shuffle, ты по сути им портишь равномерность распределенения.
 

The employer

Новичок
А нельзя попроще?

return (rand(1,100) <= $probability * 100);

Что касается серии из десяти тестов - так ничего удивительного. Случайность результатов как она есть.

А вот если у тебя задача на 10 опытов обязательно получить восемь положительных ответов, но в непредсказуемом порядке - так это делается не так. Генерируешьь массив размером в точное число опытов и с нужной тебе пропорцией нулей и единиц, тасуешь его, а затем последовательно читаешь (а не стираешь и перегенерируешь каждый раз, как ты сейчас это делаешь).
 
Сверху