Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/47: Рейтинг темы: голосов - 47, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 01.11.2014
Сообщений: 50

Рандомные числа с вероятностью выпадения

16.06.2018, 20:26. Показов 9150. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всё здравствуйте.
Помогите знающие люди пожалуйста, как реализовать php формулу рандома с вероятность выпадений определённый чисел.

Сам рандом
PHP
1
2
3
4
5
6
7
$nums = '8,15,24,11';
 
$nums_arr = explode(',', $nums);
 
$rand_num = $nums_arr[array_rand($nums_arr)];
 
echo $rand_num;
Допустим
у числа 8 (процент выпадения 0.1%)
у числа 15 (процент выпадения 0.5%)
у числа 24 (процент выпадения 2.5%)
у числа 11 (процент выпадения 5.5%)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.06.2018, 20:26
Ответы с готовыми решениями:

Рандомные цифры с разной вероятностью появления
Есть диапазон рандомных чисел: Random rand = new Random(); label4.Text = Convert.ToString(rand.Next(0, 4)); ...

Из 18 рабочих 5 работает без брака с вероятностью 0.8, 7 - с вероятностью 0.7, 4 с вероятностью 0.6
Из 18 рабочих 5 работает без брака с вероятностью 0.8, 7 - с вероятностью 0.7, 4 с вероятностью 0.6 и 2 - с вероятностью 0.5. Наугад...

Шанс выпадения числа
Доброе время суток,подскажите как правильно сделать шанс выпадения числа. У меня есть массив чисел от 1 до 6, нужно чтобы число 1...

9
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
16.06.2018, 21:13
Цитата Сообщение от Dreembround Посмотреть сообщение
у числа 8 (процент выпадения 0.1%)
у числа 15 (процент выпадения 0.5%)
у числа 24 (процент выпадения 2.5%)
у числа 11 (процент выпадения 5.5%)
Сумма вероятностей должна быть 100%
0
1 / 1 / 0
Регистрация: 01.11.2014
Сообщений: 50
16.06.2018, 21:31  [ТС]
я примерно написал
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
16.06.2018, 22:04
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
function randomFactory(array $data): Closure {
    $values = [];
    $rand = 0;
    foreach ($data as $value => $chance) {
        $values[] = [
            'rand' => $rand += $chance,
            'value' => $value,
        ];
    }
 
    return function () use ($values) {
        $rand = random_int(0, PHP_INT_MAX) / PHP_INT_MAX;
        foreach ($values as $value) {
            if ($rand < $value['rand']) {
                return $value['value'];
            }
        }
 
        throw new LogicException('smth get wrong');
    };
}
 
$data = [
    1 => 0.1,
    2 => 0.25,
    3 => 0.25,
    4 => 0.4,
];
$random = randomFactory($data);
 
$result = array_combine(array_keys($data), array_fill(0, count($data), 0));
$attempts = 10000;
for ($i = 0; $i < $attempts; ++$i) {
    $rand = $random();
    ++$result[$rand];
}
 
echo "value\tcount\texpected\treal\tdiff", PHP_EOL, PHP_EOL;
foreach ($result as $value => $count) {
    $real = $count / $attempts;
    $diff = abs($real - $data[$value]);
    printf("%d\t%5d\t%8.2f\t%.2f\t%.2f" . PHP_EOL, $value, $count, $data[$value], $real, $diff);
}
https://ideone.com/687fQ6
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
17.06.2018, 04:28
там скорее требуется, чтобы ф-я возвращала число
а иногда нужное число...
читор кароч.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// массив должен быть отсортирован по %, по возрастанию, и они должны быть УНИКАЛЬНЫМИ
$arr = array(8=>1, 15=>5, 24=>25, 11=>55); // массив подразумевает, что 0.1% от 1000 это 1, а 5.5% = 55 (ну раз уж с десятичными хотите работать)
$max = 0; // максимально возможный % из $arr (вычисляется автоматом)
$dia = array(1, 100); // диапазон допустимых чисел
 
foreach ($arr as $num=>$p) {
    if ($p > $max) {$max = $p;}
    $cnt[$num] = 0; // инициализация массива для подсчётов
}
foreach (range(1, 10000) as $a) {$num = give_better_num();}
 
var_dump($cnt, $num); // результаты
// А в результатах мы наблюдаем, что перед 5.5% стоят другие шансы и они забирают свою долю.
// Т.е. 2.5% шанс означает, что у 5.5% останется только 3%. Это и получаем: 11 = ~300 из 10000
 
 
function give_better_num()
{
    global $cnt, $dia, $arr, $max;
 
    // этот диапазон ДОЛЖЕН УЧИТЫВАТЬ значения в $arr, если там 25 и 55, значит 1000, а если 2 и 5, то 100
    $tmp = mt_rand(1, 1000); // случайное число, по которому вычисляем, а не пора ли выдать "заказной номер"
 
    // если шанс не выпал, верну обычный рандом (который, кстати, может случайно выдать число из "заказных", но мне просто влом это обрабатывать, шанс мелкий)
    if ($tmp > $max) {return mt_rand($dia[0], $dia[1]);}
 
    foreach ($arr as $num=>$p) {
        if ($tmp <= $p) {
            $cnt[$num]++; // это можно убрать
            return $num." - magic num";
        }
    }
 
} // give_better_num
1
1 / 1 / 0
Регистрация: 01.11.2014
Сообщений: 50
20.06.2018, 12:42  [ТС]
Всем привет.
стоит такой вопрос как сделать рандом по ячейкам с вероятностью выпадения.

есть рандом:
PHP
1
2
3
4
$nums = '8,15,24,11'; //<= 45 чисел через запитую  разной последовательностью 
$nums_arr = explode(',', $nums);
$rand_num = $nums_arr[array_rand($nums_arr)];
echo $rand_num;

1 ячейка = 60% числа от 1, до 20 ($nums)<= тут 20 чисел через запятую.
2 ячейка = 20% числа от 20, до 30 ($nums) <= тут 10 чисел через запятую.
3 ячейка = 10% числа от 30, до 35 ($nums) <= тут 5 чисел через запятую.
4 ячейка = 7% числа от 35, до 42 ($nums) <= тут 7 чисел через запятую.
5 ячейка = 3% числа от 42, до 45 ($nums) <= тут 3 числа через запятую.

как сделать что бы из 1 ячейки вероятность выпадения числа было больше чем у 2 ячейки по 5 ?
0
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
23.06.2018, 21:17
Dreembround, коды выше не работают или есть другая причина?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
25.06.2018, 09:19
Rand() в процентном соотношении
0
1 / 1 / 0
Регистрация: 27.06.2018
Сообщений: 12
30.06.2018, 16:06
Цитата Сообщение от Dreembround Посмотреть сообщение
Всё здравствуйте.
Помогите знающие люди пожалуйста, как реализовать php формулу рандома с вероятность выпадений определённый чисел.

Сам рандом
PHP
1
2
3
4
5
6
7
$nums = '8,15,24,11';
 
$nums_arr = explode(',', $nums);
 
$rand_num = $nums_arr[array_rand($nums_arr)];
 
echo $rand_num;
Допустим
у числа 8 (процент выпадения 0.1%)
у числа 15 (процент выпадения 0.5%)
у числа 24 (процент выпадения 2.5%)
у числа 11 (процент выпадения 5.5%)
Сначала показалось что гипер заумная задача
Главный ньюанс,что процент выпадения высчитывается по математической пропорции,которую я знаю со времен школы,и часто использую

24 = 100%
4 = ? %

Надо (4 * 100) /24

Я сделал перебор 1000 попыток и рандом из 100 чисел,можешь исправить как надо

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?
 
$x8='0';
$x15='0';
$x24='0';
$x11='0';
 
for($g=0;$g<1000;$g++) {
 
$sis=rand(1,100);
    if($sis=='8') {  $x8=$x8+1;  }
    if($sis=='15') {  $x15=$x15+1;  }
    if($sis=='24') {  $x24=$x24+1;  }
    if($sis=='11') {  $x11=$x11+1;  }
}
 
echo '<br>Число 8 выпало '.$x8.' раз';
echo '<br>Число 15 выпало '.$x15.' раз';
echo '<br>Число 24 выпало '.$x24.' раз';
echo '<br>Число 11 выпало '.$x11.' раз';
 
$x_total=$x8+$x15+$x24+$x11;
 
echo '<br><br>Все числа выпали '.$x_total.' раз';
 
$x8_procent=($x8*100)/$x_total;
$x15_procent=($x15*100)/$x_total;
$x24_procent=($x24*100)/$x_total;
$x11_procent=($x11*100)/$x_total;
 
echo '<br><br>Число 8 выпало '.$x8_procent.'% случаев ';
echo '<br>Число 15 выпало '.$x15_procent.'% случаев ';
echo '<br>Число 24 выпало '.$x24_procent.'% случаев ';
echo '<br>Число 11 выпало '.$x11_procent.'% случаев ';
 
?>
Добавлено через 18 минут
Если надо проверять 4 рандомные числа,а не 8,24,11,15 - то легко исправить ,допишу
1
1 / 1 / 0
Регистрация: 01.11.2014
Сообщений: 50
12.07.2018, 00:57  [ТС]
Цитата Сообщение от Esexinex Посмотреть сообщение
Сначала показалось что гипер заумная задача
Главный ньюанс,что процент выпадения высчитывается по математической пропорции,которую я знаю со времен школы,и часто использую
24 = 100%
4 = ? %
Надо (4 * 100) /24
Я сделал перебор 1000 попыток и рандом из 100 чисел,можешь исправить как надо
PHPВыделить код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?
$x8='0';
$x15='0';
$x24='0';
$x11='0';
for($g=0;$g<1000;$g++) {
$sis=rand(1,100);
* * if($sis=='8') { *$x8=$x8+1; *}
* * if($sis=='15') { *$x15=$x15+1; *}
* * if($sis=='24') { *$x24=$x24+1; *}
* * if($sis=='11') { *$x11=$x11+1; *}
}
echo '<br>Число 8 выпало '.$x8.' раз';
echo '<br>Число 15 выпало '.$x15.' раз';
echo '<br>Число 24 выпало '.$x24.' раз';
echo '<br>Число 11 выпало '.$x11.' раз';
$x_total=$x8+$x15+$x24+$x11;
echo '<br><br>Все числа выпали '.$x_total.' раз';
$x8_procent=($x8*100)/$x_total;
$x15_procent=($x15*100)/$x_total;
$x24_procent=($x24*100)/$x_total;
$x11_procent=($x11*100)/$x_total;
echo '<br><br>Число 8 выпало '.$x8_procent.'% случаев ';
echo '<br>Число 15 выпало '.$x15_procent.'% случаев ';
echo '<br>Число 24 выпало '.$x24_procent.'% случаев ';
echo '<br>Число 11 выпало '.$x11_procent.'% случаев ';
?>
Добавлено через 18 минут
Если надо проверять 4 рандомные числа,а не 8,24,11,15 - то легко исправить ,допишу
смотри: у меня в базе лежат цифры например (8,24,11,15) мне надо каждому числу присвоить процент выпадения
что бы число 8 падала чаще чем 15 например
я пробовал добавить в базу числа (8,8,8,8,24,24,24,24,11,11,15) таким образом но число 15 очень часто дропается
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.07.2018, 00:57
Помогаю со студенческими работами здесь

Теория вероятности выпадения числа
Кто-нибудь знает как создать программу, в которую пишешь все числа которые имеются и 10 (к примеру) чисел которые уже выпали, что бы...

Вероятность выпадения случайного числа
Здравствуйте! У меня идёт мозговой штурм. Я задался вопросом, какова вероятность выпадения случайного числа в заданном диапазоне от 1 до...

Увеличение вероятности выпадения случайного числа
Здравствуйте. Есть массив int из ста элементов, который заполнен числами от 0 до 99. По нажатию на кнопку пользователю выводится...

Подсчет вероятности выпадения случайного числа
Добрый день, начну с того, что с php не особо знаком и надеюсь на поддержку в реализации несложной задачи. Пользователь вводит несколько...

Как определить вероятность выпадения определённого числа?
есть генератор чисел, он генерирует произвольные числа в произвольные моменты времени, т.е. есть таблица в которой указано когда какое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru