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

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

16.06.2018, 20:26. Показов 9096. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru