Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Исходники игры
DF2 :: ФОРУМЫ > Игровые форумы > Heroes of Might & Magic III
Страницы: 1, 2
Sav
Цитата(AlexSpl)
Обычно в Героях значение, полученное в результате операций с дробными числами и отражающее перечислимые объекты, ограничивают снизу 1 (единицей), предварительно округлив вниз результат дробной операции. Вот и возникло у меня такое соображение: может, кол-во погибающих юнитов равно max(1, [N/5]), где N - количество атакующих горгон?

Там нет никаких дробей, у горгон всё считается в целых числах. Грубо говоря:
Код
int x = 0;
for (int i = 0; i < gorgons_count; i++)
{
  if (1 + rand()%100 <= 10) x++;
}
x = min(x, (x + 9)/5);
x = min(x, enemy_count);

int killed_count = x;


Цитата(AlexSpl)
Какова вероятность того, что абилка сработает для 1, 10, 100, 1000 горгон?

Я описал точный алгоритм, используемый игрой. Вероятности уже надо считать, сама игра этого не делает.
AlexSpl
Интересный фрагмент, сочетающий в себе и вероятность срабатывания абилки и кол-во убиваемых существ, т.е. вероятность того, что абилка не сработает равна P[killed_count == 0].

Выражение rand()%100 может принимать значения от 0 до 99. Надо будет прикинуть теперь вероятности.
AVS
Цитата(AlexSpl @ 11 Sep 2012, 13:19) *
Ещё неясен момент с вероятностью:
Цитата
За каждое существо в атакующем стеке берётся случайное число от 1 до 100 и считается, сколько всего выпало чисел, меньших или равных 10 (т. е. у каждого существа в стеке 10% шанс убить).
Потом получившееся число сравнивается с (1 + [количество атакующих]/5 (с округлением вверх)) и если первое больше, оно приравнивается ко второму.

Какова вероятность того, что абилка сработает для 1, 10, 100, 1000 горгон?



Вроде так:
1) для 1 10%
2) для 10 65%
3) для 100 99,99%
4) для 1000 еще ближе к 100%
AlexSpl
Цитата
Вроде так:
1) для 1 10%
2) для 10 65%
3) для 100 99,99%
4) для 1000 еще ближе к 100%

Так оно и есть, но это частный случай.

Вероятность того, что для N горгон сумма
Цитата
int x = 0;
for (int i = 0; i < gorgons_count; i++)
{
if (1 + rand()%100 <= 10) x++;
}

окажется равной S равна P[N, S] = C(N, S) * p^S * (1 - p)^(N - S),
где C(N, S) = N! / (S! * (N - S)!) - число сочетаний из N по S, p = 0,1 (10%).

Подставляя p = 0,1 в формулу, получим

P[N, S] = C(N, S) * 0,1^S * 0,9^(N - S)

Найдём теперь вероятность того, что N горгон убьют K существ только за счёт их абилки.
Цитата
x = min(x, (x + 9)/5);

Поэтому вероятность того, что N горгон убьют K существ только за счёт своей абилки равна:
Код
-- SUM{i} P[N, i], при K <= X;
-- 0,              при K > X,

где X = min(Nd, [(N + 9) / 5]),
Nd - кол-во существ в атакуемом отряде,
а суммирование осуществляется по всем i таким, что min(i, [(i + 9)/5]) = K.

min(i, [(i + 9) / 5]) =
Код
-- i = K при K < 2;
-- [(i + 9) / 5] = K при K > 2.


!!! Случай K = 2 следует рассмотреть отдельно, т.к. min(1, [(1 + 9)/5]) = 1, а не 2.

Упростим второе условие:
Код
K <= (i + 9) / 5 < K + 1
5K <= i + 9 < 5K + 5
5K - 9 <= i < 5K - 4

Т.к. i - целое число, то последнее неравенство можно заменить на эквивалентное:
5K - 9 <= i <= 5K - 5

Окончательно получим, что искомая вероятность P[N, killed_count == K] равна
Код
-- C(N, K) * 0,1^K * 0,9^(N - K),      при K < 2;
-- SUM{2 <= i <= 5} P[N, i],           при K = 2;
-- SUM{5K - 9 <= i <= 5K - 5} P[N, i], при 2 < K <= min(Nd, [(N + 9)/5]);
-- 0,                                  при K > min(Nd, [(N + 9)/5]).


Например, вероятность того, что для 10 горгон абилка не сработает равна
P[10, killed_count == 0] = C(10, 0) * 0,1^0 * 0.9^10 = 34,9%.
AVS
Интереснее матожидание количества убитых юнитов.

В VCMI именно от него и считают (1/10 от количества коров). В оригинале также получается?
AlexSpl
Цитата
В VCMI именно от него и считают (1/10 от количества коров). В оригинале также получается?

Если это так, то это далеко не очевидно. Нужно проверять.

Поправил условия. Выделил частный случай K = 2.
AlexSpl
Цитата
Интереснее матожидание количества убитых юнитов.

M[10] = 1 * P[10, killed_count = 1] + 2 * P[10, killed_count = 2] + 3 * P[10, killed_count = 3], т.к. остальные слагаемые равны 0 (10 горгон убивают 3 юнита максимум).

P(10, killed_count = 0) =
= 0,9^10 = 0,3486784401;
P[10, killed_count = 1] =
= 10 * 0,1 * 0,9^9 = 0,387420489;
P[10, killed_count = 2] =
= P[10, 2] + P[10, 3] + P[10, 4] + P[10, 5] = 0,1937102445 + 0,057395628 + 0,011160261 + 0,0014880348 = 0,2637541683;
P[10, killed_count = 3] =
= P[10, 6] + P[10, 7] + P[10, 8] + P[10, 9] + P[10, 10] = 1 - (P[0] + P[1] + P[2]) = 0,0001469026.

Тогда M[10] = 0,387420489 + 2 * 0,2637541683 + 3 * 0,0001469026 = 0,9153695334.

Программа даёт:
Код
M[1] = 0.100000
M[2] = 0.200000
M[3] = 0.299000
M[5] = 0.490970
M[10] = 0.915370
M[15] = 1.247316
M[20] = 1.497930
M[50] = 2.354309
M[100] = 3.399622

AlexSpl
Начал проверять теорию на практике и обнаружил, что 100 Могучих Горгон убивают далеко не 3 существа в среднем, как обещает теория. На самом деле абилка Могучих Горгон работает не так, как описал Sav. Действительно, у каждого существа в отряде есть 10% шанс убить одно существо в атакуемом отряде, однако они не могут убить больше чем ceil(N/10) существ своей абилкой, где N - количество Могучих Горгон, ceil() - округление вверх (функция не вызывается явно). Т.е. 1 горгона убивает максимум ceil(1/10) = 1 существо, 10 горгон - ceil(10/10) = тоже 1 существо, 11 горгон - ceil(11/10) = уже 2 существа и т.д. Иными словами, всё намного проще...

Тогда вероятность P[N, K] того, что N горгон убьют K существ только за счёт своей абилки равна
Код
-- C[N, K] * 0,1^K * 0,9^(N - K),        при K < ceil(N/10);
-- 1 - SUM{0 <= i < ceil(N/10)} P[N, i], при K = ceil(N/10);
-- 0,                                    при K > ceil(N/10).


Математическое ожидание (M[N]) количества погибающих существ при атаке N горгонами (Mathcad):
Код
N   |  M[N]
---------------
1   |  0.100000
2   |  0.190000
3   |  0.271000
5   |  0.409510
10  |  0.651322
15  |  1.245066
20  |  1.486676
25  |  2.119910
30  |  2.362563
40  |  3.258807
50  |  4.167839
75  |  6.695542
100 |  8.813212
200 | 18.314546
500 | 47.328320

Как видно, отношение M[N] / N тем ближе к 0.1, чем больше количество горгон в отряде*
* Начиная с некоторого N, когда основной вклад в мат. ожидание вносит P[N, ceil(N/10)]

Теперь это больше похоже на правду.
Sav
Хм, я дейстительно ошибся на одно деление на 2, там и вправду ограничение (N + 9)/10.

Только непонятно - почему с гораздо более мягким ограничением сверху (N + 9)/5 для 100 горгон получилось всего 3 убийства в среднем?
AlexSpl
Цитата
Только непонятно - почему с гораздо более мягким ограничением сверху (N + 9)/5 для 100 горгон получилось всего 3 убийства в среднем?

Из-за описки:
Код
int x = 0;
for (int i = 0; i < gorgons_count; i++)
{
  if (1 + rand()%100 <= 10) x++;
}
x = min(x, (x + 9)/5);

Нужно:
Код
int x = 0;
for (int i = 0; i < gorgons_count; i++)
{
  if (1 + rand()%100 <= 10) x++;
}
x = min(x, (gorgons_count + 9)/5);
sergroj
Цитата(Sav @ 27 Aug 2012, 14:55) *
Предполагаю, что первый пункт воспроизводится распределением Пуассона (хотя я недостаточно знаком с этими вещами, чтобы, бегло просмотрев статью, сказать наверняка). А вот второй пункт - никак.

Первый тоже не воспроизводится. Нужно распределение Бернулли (и AlexSpl его описал).

Завёл баг: http://bugs.vcmi.eu/view.php?id=1081
AlexSpl
Цитата(sergroj @ 21 Sep 2012, 04:12) *
Цитата(Sav @ 27 Aug 2012, 14:55) *
Предполагаю, что первый пункт воспроизводится распределением Пуассона (хотя я недостаточно знаком с этими вещами, чтобы, бегло просмотрев статью, сказать наверняка). А вот второй пункт - никак.

Первый тоже не воспроизводится. Нужно распределение Бернулли (и AlexSpl его описал).

Завёл баг: http://bugs.vcmi.eu/view.php?id=1081


В ФизМиГе написано:
Цитата
При нападении каждая из атакующих горгон дополнительно к прямому урону имеет 10% шанс мгновенно убить один юнит в стеке противника. (Исключение: войска Некрополиса, гаргулия, голем и мумия, которые иммунны к этой способности горгон). Количество уничтоженных зависит от числа Mighty Gorgons и колеблется в интервале от 1 до N/10+1 (где N – число Mighty Gorgons. Например, 31 “бык” может дополнительно уничтожить от одного до четырех существ атакуемого отряда).

Не тестил, но если правда, у выделенных существ есть иммунитет к Death Stare.
IvanSav
Тут уже говорили, что абилка работает только на живых.

Войска Некрополиса и мумия - это нежить.
А гаргулия, голем (а заодно - элементали) - это "не живые"
AlexSpl
А Кристальные Драконы к живым относятся? Да.
hommer
Исходники тройки - черт с ними. Что действительно было бы ценно, так это исходники NWCшной пятёрки. Но, честно говоря, наврядли что одни, что другие ещё существуют в природе. Юби нет резона их хранить, потерли всё давно, как пить дать.
feanor
Думаю, их не было в принципе.
hommer
Цитата(feanor @ 01 Oct 2012, 23:21) *
Думаю, их не было в принципе.

Как это не было? А это тогда что? Недавно же обсуждали. Уж, как минимум, модели, с которых сделаны эти рендеры, точно существовали (да, я кэп). И, даже если ими всё и ограничевалось (в чём я сильно сомневаюсь), это уже был бы отличный материал для геройского модостроения.
Etoprostoya
Цитата(hommer @ 01 Oct 2012, 23:32) *
А это тогда что?

Всё это очень похоже на четвёрку. Предположу, что это могло быть не прошедшим отбор руководства проекта материалом (забракованные или отменённые представления юнитов, зданий и т.п.) или недоделанным аддоном.
IvanSav
Студии и без банкротства часто исходники теряют - вон беседка исходники даггерфолла давным-давно потеряла, биовары без моделей от Baldur's Gate остались. А тут банкротство, полная замена команды. Печаль в общем.

Максимум что может выйти это найти авторов - может кто-то для портфолио модельки у себя оставил
hommer
Цитата(etoprostoya @ 01 Oct 2012, 23:44) *
Цитата(hommer @ 01 Oct 2012, 23:32) *
А это тогда что?

Всё это очень похоже на четвёрку. Предположу, что это могло быть не прошедшим отбор руководства проекта материалом (забракованные или отменённые представления юнитов, зданий и т.п.) или недоделанным аддоном.

Какой бред... Настолько бред, что даже подробно контраргументировать лень.
Etoprostoya
Цитата(hommer @ 01 Oct 2012, 23:56) *
Какой bread...

Приятного аппетита, зелёненький.
feanor
Цитата
А это тогда что? Недавно же обсуждали. Уж, как минимум, модели, с которых сделаны эти рендеры, точно существовали (да, я кэп). И, даже если ими всё и ограничевалось (в чём я сильно сомневаюсь), это уже был бы отличный материал для геройского модостроения.


Я не уверен, что юниты - модели. Они вполне могут быть (полностью или частично) концепт-артами.

Да и чем три с половиной модельки (не в том, причем, стиле) могут помочь геройскому модостроению?
Вот на дизайн-документы я бы посмотрел..
Docent Picolan
Цитата(hommer @ 01 Oct 2012, 23:56) *
Цитата(etoprostoya @ 01 Oct 2012, 23:44) *

Всё это очень похоже на четвёрку. Предположу, что это могло быть не прошедшим отбор руководства проекта материалом (забракованные или отменённые представления юнитов, зданий и т.п.) или недоделанным аддоном.

Какой бред... Настолько бред, что даже подробно контраргументировать лень.

и правда ведь бред, какая к черту четверка, когда у Трейси Иваты на сайте даже процесс создания был описан.

а толк от нескольких моделей (при том - в совершенно другом стиле чем троечные) действительно сомнительный. при этом 80% из них ещё и дубликаты уже имеющихся
Agar
Цитата
Я не уверен, что юниты - модели. Они вполне могут быть (полностью или частично) концепт-артами.

Ну, может и не окончательные, но модели явно.
Цитата
а толк от нескольких моделей (при том - в совершенно другом стиле чем троечные) действительно сомнительный. при этом 80% из них ещё и дубликаты уже имеющихся

За то можно былоб красиво четверку проапать, еслиб это было возможно)
Эта ж часть тоже должна была быть изометрической или мне кажется?
Docent Picolan
Цитата(Agar @ 02 Oct 2012, 17:13) *
Эта ж часть тоже должна была быть изометрической или мне кажется?

на карте. насчет боёв ничего неизвестно. вполне вероятно, могли вернуться к виду а ля 1-3
hommer
Цитата(Agar @ 02 Oct 2012, 17:13) *
За то можно былоб красиво четверку проапать, еслиб это было возможно)
Эта ж часть тоже должна была быть изометрической или мне кажется?

Кстати, в четвёрке хоть новых юнитов добавлять и невозможно, но заменять существующих - вполне (на форуме Эквилибриса даже показывали результат - какого-то паука, рипнутого из Варкрафта). А уж одну только модель заменить - тем более не проблема. В первую очередь имею в виду фениксов, но, думаю, и ещё немало моделек нашло бы применение. Тем более, как я уже говорил, врядли то, что мы видели - это все наработки, которые существовали. А планировавшийся ракурс боя не так уж принципиален - на изометрию модели полюбому расчитаны (для глобальной карты).
Axolotl
Товарищи, говоря модели в стиле/не стиле тройки/четверки вы точно модели имеете в виду?
Просто как такового ярко выраженного стиля именно моделей (т.е. непосредственно геометрии) в тройке нет. Ну, если не считать, местами слегка гипертрофированные детали - но это уже дело десятое - правится легко и скорее должно подбираться под каждую модель индивидуально.
А в остальном - геометрия как геометрия. Т.е. руки имеют форму рук, ноги - форму ног, крылья - форму крыльев и.т.д.
packa
Цитата
Кстати, в четвёрке хоть новых юнитов добавлять и невозможно

В тройку тоже когда то было невозможно...
feanor
Дак кого четверка волнует-то..
packa
Не невозможно, а просто трудно)
hommer
Цитата(feanor @ 02 Oct 2012, 23:40) *
Дак кого четверка волнует-то..


Вот за всех не надо говорить.
feanor
Из-за практически полного отсутствия движухи по моддингу четверки (вспоминается только мод на некрополь, который не впечатляет ащще) я вполне могу говорить, что четверка никого не волнует.
Foster
Цитата(feanor @ 03 Oct 2012, 01:07) *
Из-за практически полного отсутствия движухи по моддингу четверки (вспоминается только мод на некрополь, который не впечатляет ащще) я вполне могу говорить, что четверка никого не волнует.

Это говорит о том, что конкретно эдаких мастеров на все руки она не волнует. А вот казуалов очень даже.
Vade Parvis
Цитата(feanor @ 02 Oct 2012, 22:40) *
Дак кого четверка волнует-то..
На этом форуме хватает извращенцев, которых она в той или иной степени волнует Включая меня, кстати.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.