За последние 24 часа нас посетили 60858 программистов и 1772 робота. Сейчас ищут 927 программистов ...

Помогите сделать рандом по заданному шансу

Тема в разделе "Сделайте за меня", создана пользователем Олег Литвинов, 29 июн 2017.

  1. Олег Литвинов

    Олег Литвинов Новичок

    С нами с:
    12 мар 2017
    Сообщения:
    17
    Симпатии:
    0
    У меня есть четыре уровня шанса(1,2,3,4). Как сделать, чтобы у каждого уровня, был свой шанс на выпадение, 1 - 25%, 2 - 50%, 3 - 75%, 4 - 100%?
    Мне нужно чтобы чем больше уровень, тем больше вероятность выпадения. Если уровень = 3, то выпадало бы чаще чем у других уровней.
    Помогите пожалуйста
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Это всего 250% в сумме, разве так бывает? Максимум 100% должно быть
     
  3. Олег Литвинов

    Олег Литвинов Новичок

    С нами с:
    12 мар 2017
    Сообщения:
    17
    Симпатии:
    0
    Понял. А дальше как? :(
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    10%, 30%, 60%

    PHP:
    1. <?php
    2. $random = rand(1, 100);
    3.  
    4. if($random <= 10) {
    5.    // 10%
    6. } elseif($random <= 40) {
    7.    // 30%
    8. } elseif($random <= 100) {
    9.    // 60%
    10. }
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    по данному коду именно будет 10% 40% и 100%
    вру... но и не 10, 30, 100
    у первого сравнения 10%
    у второго 0.9*0.4 = 0.36 = 36%
    у третьего 1 - 0.1 - 0.36 = 0.56*0.6 = 0.336 = 33.6%
    вероятности
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    что это это формула?
     
  7. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    Думаю ТС нужна функция, где в качестве входных параметров задавался бы уровень определяющий выигрыш 1-4, а на выходе с заданной вероятностью получали бы - выигрыш или, нет выигрыша

    PHP:
    1. function win($level) {
    2.    return = (random(3) <= $level) ? "win" : "fail";
    3. }
    level - строго от 1 до 4
    --- Добавлено ---
    теорию вероятностей почитайте
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    это ты написал что у меня что-то не так, по аргументируй, откуда ты вывел формулу к моему коду
     
  9. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    первое сравнение согласен - сработает в 10% случаев
    а вот второе то сработает в оставшихся 90% (0.9) + сравнение что <=40 (0.4) .... то есть с вероятностью 0.9*0.4
    ну итд
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    PHP:
    1. <?php
    2. $r = [10 => 0, 30 => 0, 60 => 0];
    3.  
    4. for ($i=0; $i < 10000 ; $i++) {
    5.  
    6.     $random = rand(1, 100);
    7.    
    8.     if($random <= 10) {
    9.        $r[10] += 1;
    10.     } elseif($random <= 40) {
    11.        $r[30] += 1;
    12.     } elseif($random <= 100) {
    13.        $r[60] += 1;
    14.     }
    15. }
    16.  
    PHP:
    1. array(3) {
    2.   [10]=>
    3.   int(1051)
    4.   [30]=>
    5.   int(2988)
    6.   [60]=>
    7.   int(5961)
    8. }
    Почему не вышло ~1000 и ~9000?
     
  11. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    да потому что я невнимательно смотрел ))) elseif ... а мне че-то втемяшилось else
     
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А кто сказал, что речь идет о вероятностях в пределах одного испытания?
    Мб просто есть объект. С вероятностью 75% он должен вернуть true. При нормальном распределении это значит, что достаточно взять рандом от 1 до 100 и, если число >=25, вернуть true. Все.
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @Fell-x27 ждём пока автор уточнит задачу
     
  14. Олег Литвинов

    Олег Литвинов Новичок

    С нами с:
    12 мар 2017
    Сообщения:
    17
    Симпатии:
    0
    Да, сойдет. Спасибо огромное :)
     
  15. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    Мне кажется или тут предыдущий рандом попадает в диапазон следующего?
     
  16. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @ArsNet просто короткая запись
    $r >= 1 && $r <= 10
    $r >= 11 && $r <= 40
    $r >= 41 && $r <= 100