hearthstone-club.ru - Форум Hearthstone: Heroes of Warcraft

Автор Тема: Про вероятности распределения урона случайному персонажу  (Прочитано 5173 раз)

masuk0

  • Basic
  • *
  • Сообщений: 8
    • Просмотр профиля
Вчера перед сном смотрел стрим, в котором игрок выиграл разыграв Avenging Wrath.

Я задался вопросом: допустим у противника на столе три существа:
А: 2 здоровья
Б: 1 здоровья
В: 1 здоровья
У вражеского персонажа - 5 здоровья. В сумме у противника 9 очков здоровья, а мы нанесём 8 урона. Так каков шанс выиграть разыграв карту Avenging Wrath?
Данная карта 8 раз подряд наносит 1 единицу урона случайному персонажу, включая героя. Если урон распределится по принципу 4 на стол, 4 в рыло, то победы не будет. При всех остальных раскладах ход будет победным. Логика подсказывает, что возможных исходов 5: 4/4 (4 дамага в рыло герою, 4 на стол), 5/3, 5/2 (после пяти ударов в героя игра закончится, восьмой удар нанесён не будет), 5/1, 5/0. Больше 4 очков урона на стол лечь не может, потому что все существа умрут. Получается, что в 4 из 5 случаев мы побеждаем, вероятность победить велика, так?
Не так. В начале на столе три существа, значит шанс, что удар ляжет на стол 75%. Легко догадаться, что вероятность исхода 5/0 всего 0.0098 (0,25^5), а никак не 20%. Однако существа Б и В умрут после первого попадания и шанс, что удар придётся на героя увеличится до 1/3.  Комбинаторику вспоминать отчаянно не хотелось, поэтому заснул с намерением встать с утра и написать симуляцию.
Уважаемые знатоки, внимание, правильный ответ.

Написанная на скорую руку прога показала - из 10 миллионов симуляций выигрыш произошёл менее чем в 15% случаев. А я б разыграл не задумываясь.

xav1en

  • Moderator
  • Legendary
  • *****
  • Сообщений: 625
    • Просмотр профиля
Сильно :) Спасибо за работу
xav1en#2124

Евгений Тонов

  • Basic
  • *
  • Сообщений: 4
    • Просмотр профиля

А каким образом это симулировалось, если не сложно - расскажите подробно - с помощью чего и как?

У меня вероятность попадания 5 урона по персонажу оказалась равной 4/9.
Объясню почему: У нас есть 2+1+1+5=9 пунктов здоровья (целей) и 8 ударов и 1 удар может попасть в 1 цель только 1 раз, и в то же время все 8 ударов обязательно должны быть распределены между 9 целями - т.е. удар не может улететь неизвестно куда - только в одну из целей. Я представлю варианты распределения ударов в виде матрицы, разделив пробелами 1 2 3 существо и персонажа, (1 - попадание, 0 - промах), получится что-то вроде этого:

0 1 11 11111  (1) - урон персонажу =5
1 0 11 11111  (2) - урон персонажу =5
1 1 01 11111  (3) - урон персонажу =5
1 1 10 11111  (4) - урон персонажу =5
1 1 11 01111  (5) - урон персонажу =4
1 1 11 10111  (6) - урон персонажу =4
1 1 11 11011  (7) - урон персонажу =4
1 1 11 11101  (8) - урон персонажу =4
1 1 11 11110  (9) - урон персонажу =4

 Видно что всего вариантов распределения промаха =9, а тех вариантов где персонажу приходит 5 урона =4. Таким образом, вероятность поражения персонажа =4/9 или около 44%, что все же чуть меньше честного 50/50:)

Mefisto

  • Epic
  • ****
  • Сообщений: 385
    • Просмотр профиля
а такой вариант 0 0 00 11111 ты не учел ... тоже + к вероятности убить героя, минуя урон по существам!
« Последнее редактирование: 17 Март, 2014, 11:15:51 от Mefisto »

masuk0

  • Basic
  • *
  • Сообщений: 8
    • Просмотр профиля
0 1 11 11111  (1) - урон персонажу =5
1 0 11 11111  (2) - урон персонажу =5
1 1 01 11111  (3) - урон персонажу =5
1 1 10 11111  (4) - урон персонажу =5
1 1 11 01111  (5) - урон персонажу =4
1 1 11 10111  (6) - урон персонажу =4
1 1 11 11011  (7) - урон персонажу =4
1 1 11 11101  (8) - урон персонажу =4
1 1 11 11110  (9) - урон персонажу =4
Я не совсем понял вашу логику. Что из себя в данной матрице представляет промах? Какой смысл этого ноля? Влияет на вашу картину то, что игра может заканчиваться на пятом ударе? В чём практическая разница между вариантами когда на героя приходится 01111, 10111, 11011 и т.д?
Не могу ответить аргументированно, так как не совсем понял ваш метод, но скорей всего как и я вы ошиблись в том, что варианты, которые вы предлагаете не равновероятны. Вероятность того, что удар пойдёт в рыло 25% пока на столе три существа и растёт пока они умирают. Я когда смотрел в отладчике как симуляция работает в большинстве случаев последнее существо умирало когда у героя было ещё 2-3 жизни и последние удары долетали в героя, оставляя ему в конце хитпойнт.
А симуляция написана на C#. Есть список из четырёх переменных - 5, 2, 1, 1. (Список в C# это как массив, но можно удалять и добавлять элементы как хочешь).

1) 8 раз подряд делаем следующее:
      a) Вычитаем из случайного элемента списка единицу
      б) Если переменная стала равна нулю удаляем её из списка
      в) Если удалённым элементом списка был герой рапортуем наверх о победе, заканчиваем симуляцию.
2)  Рапортуем наверх о поражении. (Второй пункт не будет исполнен если по ходу цикла произошёл случай 1в)

Вызываем эту функцию 10 миллионов раз и считаем, сколько побед, сколько поражений.
Результаты меня так удивили, что я даже включил проверку насколько генератор случайных чисел равномерный по распределению. Мне инстинктивно казалось, что в героя летит слишком редко. Действительно равномерный, good job Microsoft. Потом сидел смотрел в отладчике как меняются циферки. Вроде бы всё работает как надо.
« Последнее редактирование: 17 Март, 2014, 12:48:06 от masuk0 »

Mefisto

  • Epic
  • ****
  • Сообщений: 385
    • Просмотр профиля

Я не совсем понял вашу логику. Что из себя в данной матрице представляет промах? Какой смысл этого ноля? Влияет на ваше катрину то, что игра может заканчиваться на пятом ударе? В чём практическая разница между вариантами когда на героя приходится 01111, 10111, 11011 и т.д?
Не могу ответить аргументированно, так как не совсем понял ваш метод, но скорей всего как и я вы ошиблись в том, что варианты, которые вы предлагаете не равновероятны. Вероятность того, что удар пойдёт в рыло 25% пока на столе три существа и растёт пока они умирают. Я когда смотрел в отладчике как симуляция работает в большинстве случаев последнее существо умирало когда у героя было ещё 2-3 жизни и последние удары долетали в героя, оставляя ему в конце хитпойнт.
А симуляция написана на C#. Есть список из четырёх переменных - 5, 2, 1, 1. (Список в C# это как массив, но можно удалять и добавлять элементы как хочешь).

1) 8 раз подряд делаем следующие:
      a) Вычитаем из случайного элемента списка единицу
      б) Если переменная стала равна нулю удаляем её из списка
      в) Если удалённым элементом списка был герой рапортуем наверх о победе, заканчиваем симуляцию.
2)  Рапортуем наверх о поражении. (Второй пункт не будет исполнен если по ходу цикла произошёл случай 1в)

Вызываем эту функцию 10 миллионов раз и считаем, сколько побед, сколько поражений.
Результаты меня так удивили, что я даже включил проверку насколько генератор случайных чисел равномерный по распределению. Мне инстинктивно казалось, что в героя летит слишком редко. Действительно равномерный, good job Microsoft. Потом сидел смотрел в отладчике как меняются циферки. Вроде бы всё работает как надо.
Согласен матрицу 01111, 10111, 11011, 11101 и 11110 можно принять как один вариант, так как эта вариация по сути одно и тоже просто меняеться из пяти ударов по персонажу ,один из ударов идет по другому существу. Из этого получаеться 4/5 случаев герой противника умирает. Из этого следует, что удача примерно равна 80 %, но это не так. Так как вариация 1 1 11 11110 может пройти 5 раз подряд. Проги нет чтоб проверить например задав , 10 миллион срабатываний.
Насчет того что когда существа умирают и увеличиваеться вероятность попаданий в героя отвечу, тем что матрица
1 1 10 11111  (4) - урон персонажу =5
показывает что например что в существо номер 1 и номер 2 умерло, осталось одно с 2 хп жизней из этого следует что может быть 10 1111 или 11 1110 , и процент 50/50, но опять же надо проверять задав 10 миллионов раз срабатываний.
« Последнее редактирование: 17 Март, 2014, 12:56:50 от Mefisto »

Евгений Тонов

  • Basic
  • *
  • Сообщений: 4
    • Просмотр профиля
а такой вариант 0 0 00 11111 ты не учел ... тоже + к вероятности убить героя, минуя урон по существам!
такой вариант невозможен в этой матрице, поймите - 0 1 1 11111 это не последовательность ударов вроде первый по счету удар - промах, остальные - попадание, это исход попадания восьми ударов по 9 целям. Ударов =8 целей =9 каждый удар 100% попадает в цель (отнимает 1 пункт здоровья), неважно у какого существа, нельзя два раза отнять один и тот же пункт здоровья. А т.к ударов 8 а целей 9, одна цель остается всегда целой, вне зависимости от последовательности ударов и именно эту цель (1 пункт здоровья) и символизирует 0. Нас не волнует в какой последовательности были нанесены удары (а этих последовательностей дофига -  для каждого из 9 вариантов матрицы 0 1 1 11111 таких последовательностей будет =8!=40320), но для нас все эти последовательности  равнозначны , нас волнует только положение единственного оставшегося пункта здоровья, если этот пункт окажется в условной области персонажа, значит персонаж выживет и таких вариантов 5 из 9, следовательно вероятность поражения персонажа 4/9.  Такая она... комбинаторика

Mefisto

  • Epic
  • ****
  • Сообщений: 385
    • Просмотр профиля
а такой вариант 0 0 00 11111 ты не учел ... тоже + к вероятности убить героя, минуя урон по существам!
такой вариант невозможен в этой матрице, поймите - 0 1 1 11111 это не последовательность ударов вроде первый по счету удар - промах, остальные - попадание, это исход попадания восьми ударов по 9 целям. Ударов =8 целей =9 каждый удар 100% попадает в цель (отнимает 1 пункт здоровья), неважно у какого существа, нельзя два раза отнять один и тот же пункт здоровья. А т.к ударов 8 а целей 9, одна цель остается всегда целой, вне зависимости от последовательности ударов и именно эту цель (1 пункт здоровья) и символизирует 0. Нас не волнует в какой последовательности были нанесены удары (а этих последовательностей дофига -  для каждого из 9 вариантов матрицы 0 1 1 11111 таких последовательностей будет =8!=40320), но для нас все эти последовательности  равнозначны , нас волнует только положение единственного оставшегося пункта здоровья, если этот пункт окажется в условной области персонажа, значит персонаж выживет и таких вариантов 5 из 9, следовательно вероятность поражения персонажа 4/9.  Такая она... комбинаторика
понятно что первая 0 не промах а существо с 1 хп не получившее урон и следовательно не умерло, и по твоей логике расчета ты показываешь что распределения урона идет мгновенно как будто скил сразу бьет на 8 распределив по всем, то есть ни последовательно удар по одной цели ,а потом удар по другой цели. Это все к тому что ты говоришь что невозможен вариант 0 0 00 11111.

Евгений Тонов

  • Basic
  • *
  • Сообщений: 4
    • Просмотр профиля
Я не совсем понял вашу логику. Что из себя в данной матрице представляет промах? Какой смысл этого ноля? Влияет на ваше катрину то, что игра может заканчиваться на пятом ударе? В чём практическая разница между вариантами когда на героя приходится 01111, 10111, 11011 и т.д?

Классный вопрос. Блин, а действительно, я как-то не подумал о разнице между  01111, 10111, 11011 и т.д 0 символизирует единственный оставшийся пункт здоровья, но можно ли 5 пунктов персонажа представлять как 01111, 10111, 11011? - теперь мне это не кажется такой хорошей идеей как пять минут назад)))


Не могу ответить аргументированно, так как не совсем понял ваш метод, но скорей всего как и я вы ошиблись в том, что варианты, которые вы предлагаете не равновероятны.
Видимо так оно и есть я лажанулся :), сорри

1) 8 раз подряд делаем следующие:
      a) Вычитаем из случайного элемента списка единицу
      б) Если переменная стала равна нулю удаляем её из списка
      в) Если удалённым элементом списка был герой рапортуем наверх о победе, заканчиваем симуляцию.
2)  Рапортуем наверх о поражении. (Второй пункт не будет исполнен если по ходу цикла произошёл случай 1в)

Вызываем эту функцию 10 миллионов раз и считаем, сколько побед, сколько поражений.

Да алгоритм разумный, неужели и правда такая низкая вероятность?
Я пытался напрямую считать вероятность каждого из возможных исходов их ведь всего 4: уничтожение 1, 2, 3 существа или персонажа, но из-за того что у существ разное здоровье правильно обсчитать не смог:)

Евгений Тонов

  • Basic
  • *
  • Сообщений: 4
    • Просмотр профиля

понятно что первая 0 не промах а существо с 1 хп не получившее урон и следовательно не умерло, и по твоей логике расчета ты показываешь что распределения урона идет мгновенно как будто скил сразу бьет на 8 распределив по всем, то есть ни последовательно удар по одной цели ,а потом удар по другой цели. Это все к тому что ты говоришь что невозможен вариант 0 0 00 11111.
В этой матрице все же 0 0 00 11111 невозможен, другое дело что матрица косячная)) блин интересно как же это считать?)

Mefisto

  • Epic
  • ****
  • Сообщений: 385
    • Просмотр профиля

понятно что первая 0 не промах а существо с 1 хп не получившее урон и следовательно не умерло, и по твоей логике расчета ты показываешь что распределения урона идет мгновенно как будто скил сразу бьет на 8 распределив по всем, то есть ни последовательно удар по одной цели ,а потом удар по другой цели. Это все к тому что ты говоришь что невозможен вариант 0 0 00 11111.
В этой матрице все же 0 0 00 11111 невозможен, другое дело что матрица косячная)) блин интересно как же это считать?)
тут много вариантов которые не привяжешь к твоей матрице , например 0 0 01 11111, 0 0 11 11111, герой может умереть и на 5 и на 6 и на 7 ударе скила!

masuk0

  • Basic
  • *
  • Сообщений: 8
    • Просмотр профиля
Пока я лежу дома со сломанной ногой и делать мне особо нечего, я усовершенствовал прогу и записал видео.
Hearthstone вероятность случайного распределения урона

Mefisto

  • Epic
  • ****
  • Сообщений: 385
    • Просмотр профиля
А можешь в эту программу написать чтоб можно было прописывать количество существ и заданное хп, просчитав вероятность тех или иных существ или заклинаний по распределению урона!

masuk0

  • Basic
  • *
  • Сообщений: 8
    • Просмотр профиля
А можешь в эту программу написать чтоб можно было прописывать количество существ и заданное хп, просчитав вероятность тех или иных существ или заклинаний по распределению урона!
В коде не долго цифры подкорректировать и какой другой вариант посмотреть. А написать так, чтоб пользователь вводил, это подольше. Но вообще время, как я писал, есть у меня.

Mefisto

  • Epic
  • ****
  • Сообщений: 385
    • Просмотр профиля
Именно чтоб пользователь мог прописать ручками, вероятность распределения например того же чекнутого подрывника , удара рагны, метателей кинжала или же вероятность захвата случайного существа сильваной и тд , . Если в напряг то просто сам приведи пример этих существ по распределения урона и тому подобного!