Казаки снова война




Пушка switzerland_harquebusier

Анализ боя в игре казаки

Всем привет, прошу прощения за столь долгий перерыв в новых статьях, были проблемы. Надеюсь радовать вас чаще. Сегодня хочу поделиться с вами очень необычной заметкой. Данная статья попала ко мне довольно давно, но до сих пор кажется мне сложноватой. Этот пост будет интересен, в первую очередь, для людей с математичесикм складом ума или просто для математиков, людей, который просчитывают жизнь и игру, но так же и не оставит равнодушным всех остальных игроков. Ведь очень распространенное мнение, что с помощью математики можно предугадать и определять все на свете. Так вот, перед вами Формула боя для игры Казаки!

Автор: Ares

Формула боя.

Меня заинтересовал вопрос, можно ли зная начальные условия (количество и характеристики юнитов) предсказать исход боя, а так же % потерь победившей стороны. Это интересно с точки зрения анализа битв (а что будет если сделать не так, а эдак), а так же полезно знать соотношение сил различных юнитов (типа, что лучше, 30 Реестровых или 25 Сечевиков?). Ну и наконец, полезно знать, от чего зависят потери в бою, и как их уменьшить.

Подобные задачи решаются и в реальных боях, и я попробовал применить те же формулы, что используются для расчета танковых боёв. Задача свелась к решению системы дифуравнений:

dN1/dt= -k2*N2
dN2/dt= -k1*N1

Смысл уравнений ясен — количество наших юнитов убывает пропорционально количеству вражеских юнитов и наоборот. N1, N2 — количество юнитов групп 1 и 2 на протяжении боя и являются функцией времени. При t=0 равняются начальному количеству. Коэффициент k1 показывает сколько юнитов №2 успевает угробить один юнит №1 за единицу времени. Коэффициент k2 — аналогично, сколько вражеских юнитов в единицу времени укладыает один юнит №2. Вобщем, k1 и k2 — скорость взаимного убоя :-).

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

N=C1*Exp(-k1*k2*t) + C2*Exp(k1*k2*t)

Оказалось также, что большое значение имеет коеффициент:

K=Sqr(k1/k2) (Sqr — квадратный корень).

Этот коэффициент показывает, во сколько раз Юнит1 сильнее чем Юнит2.Другими словами, равновесие сил достигается при N2=K*N1.

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

Kб=K*(N1/N2)

При Kб>1 достигается победа, если Kб<1, то победит противник. Кроме того, по графику (см. в конце статьи) можна определить свои потери (при Kб<=1 потери 100%). Интересно, что уже при перевесе в 1,5 раза (Kб=1,5) потери победителя составляют всего около 25%, а при перевесе в 2 раза - всего 13%. При Kб<1,4 потери переваливают за 30% и стремительно растут, поэтому воевать при Kб <1,4 становиться невыгодно. Теперь от теории перейдём к практике, и рассмотрим несколько примеров для стрелков, например возьмём Янычар и Сердюков. Да, я забыл сказать что коэффициенты k1 и k2 определяются по силе удара юнита, колличестве его жизни и его скорострельности. Вообще одной из базовых характеристик стрелка является его скорострельность, или частота выстрела. Поэтому определение частоты выстрела желательно провести максимально точно. Определение частоты выстрела стрелка производилось следующим образом. Выбирался режим ненападения в редакторе. Затем выставлялись мишени в режиме "держать позицию" (я брал кавалерию, у них жизни побольше, поэтому их хватает на дольше :-). На среднем расстоянии выстрела от мишеней ставился интересующий меня стрелок. Засекалось показание таймера (в тактах), затем снимался режим ненападения, и подсчитывались выстрелы. Разумеется, стрелок и мишени должны быть расположены так, чтобы стрелок за время стрельбы не ходил. Когда фиксированное колличество выстрелов (например 10) было произведено, ставилась пауза, и опять записывалось показание таймера. Время стрельбы t определяется как разница между окончательным и стартовым показанием таймера. Частота выстрелов ?, разумеется, равна колличеству выстрелов Nв, делённому на время стрельбы t. ? = Nв/t

Например, для непрокачанного Сердюка, если сначала таймер показывал 180, в конце 197, а колличество выстрелов было 10, то ?=10/(197-180) = 0.588 выстрела за такт. Лучше однако брать больше выстрелов, тогда точность измерения ? будет выше. Кроме того, если уж хотеть померять совсем точно, то следует произвести несколько измерений, определить для каждого из них ?, а затем взять среднее значение (а можна и погрешность посчитать :-).

Для Сердюка, непрокачанного по скорострельности, время 100 выстрелов колеблется где то между 182 и 183 тактов. Или, если совсем точно:

? =0,54825±0,00147, ?=0,27%

После первого абгрейда на скорострельность (Разрабатывать колесцовый замок к ружьям):

? =0,80974±0,00437, ?=0,54%

Второй абгрейд скорострельности (Разработать бумажный патрон и железный шомпол) даст:

? =1,19481±0,00912, ?=0,76%

Интересно, почему написано что апгрейды на скорострельность увелмчивают её каждый на 35%? Это не совсем точно, можете сами посчитать. Реально выходит немного больше :-).

Такую же скорострельность имеет Турецкий Янычар. Однако у Янычара жизнь 55 против 85 у Сердюка. Начальный удар Янычара 12, Сердюка 10. Защита от стрелкового оружия отсутствует у обоих.

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

55/10 = 5.5 ? 6 выстрелов

За такт Сердюк сделает 0,54825 выстрела, значит он «убивает»:

Kc=0,54825 / 6* 100 = 9,1375 (Янычар за 100 тактов :-).

Янычар убивает Сердюка за:

85/12 = 7,083 ? 8 выстрелов

(округлять здесь обязательно в большую сторону)

Значит Янычар убивает:

Kя=0,54825 / 8 * 100 = 6,85312 (Сердюков за 100 тактов)

Отсюда видно, что при начальных условиях Янычар послабее будет, чем Сердюк, за счёт меньшей жизни, хотя он и имеет больший стартовый удар, а скорострельность такая же.

Интересен вопрос, сколько нужно Янычар, чтобы составить равную силу, например, 100 Сердюкам?

Считаем индивидуальный коэффициент соотношения сил, или «индивидуальный коэффициент боя» (Sqr — корень квадратный):

K=Sqr(Kс/Кя)

K=Sqr(9,1375/6.85312) = 1.1547

Это означает, что при стартовых условиях Сердюк сильнее Янычара примерно на 15,5%, и силой равной 100 Сердюкам, является 115,47 Янычар. Для Янычара соответственно коэфициент будет равен 1/K = 0.866, то есть 100 Янычар равняются в данном случае 86,6 Сердюков (это всё касается индтвидуального боя между Сердюками и Янычарами).

Этот вывод легко проверить:

Берём 100 Сердюков, 115 Янычар, ставим на позицию. Проводим три боя. Результат:

1. Осталось 4 Сердюка, потери: (100-4)/100=0.96 = 96%
2. Осталось 8 Сердюков, потери 92%
3. Осталось 7 Сердюков, потери 93%

В среднем потери 93,7% вышли, вобщем 100 Сердюков немножко сильнее чем 115 янычар. А почему нет равенства и побеждают Сердюки? Потому что для равновесия полного нужно бы 115,47 Янычара, а не 115. Пол-Янычара не хватило, вот они и проиграли :-).

Для проверки берём 100 Сердюков и 116 Янычар. Результат боёв:

1. Осталось 11 Янычар, потери (116-11)/116=0.91=91%
2 Осталось 8 Янычар, потери: 93%
3. Осталось 15 Янычар, потери 87%

В среднем потери выигравшей стороны составили 90.3%. То есть формула работает, и коэффициент 1.1547 полученный нами по формуле, даёт вполне реальную картину соотношения сил непрокачанных Сердюка и Янычара.

Внимание: бои проводились таким образом, что две армии получили команду «Держать позицию» (чтобы не бегали :-). Кроме того, поскольку Янычары имеют немного меньшую дальность обстрела, чем Сердюки, армии ставились так, чтобы последняя линия Янычар смогла дострелить до последней линии Сердюков. Равновесие очень тонкое — один человек имеет значение, так что если последняя линия Янычар не сразу может вступить в бой, равновесие может быть нарушено в пользу Сердюков. Кроме того, имеет место ещё один эффект — первый залп всегда раньше успевают сделать Сердюки, они более организованы и раньше берут ружьё «на изготовку». И если Сердюки хоть немного прокачаны, то с первого залпа могут успеть уложить 5-7 Янычар, и тем самым изменить балланс сил в свою пользу (в области равновесия — каждое ружьё на счету :-). Поэтому возможно нужно немного корректировать колличество, необходимое для равновесия, на эффект «первого залпа».

Попробуем теперь посмотреть, как влияет на «индивидкальный коэффициент боя» различная скорострельность. Для исключения «эффекта первого залпа», с обоих сторон поставим Сердюков. Но одних полностью прокачаем по скорострельности, а вторых — только раз.

K=Sqr([V1/F2]*?1/([V2/F1]*?2))

Где:
Группа №1 Группа №2
V1=85 V1=85
F1=10 F2=10
?1=1,19481 ?2=0,80974

Квадратные скобки указывают на округление в большую сторону.

[V1/F2]=[V1/F2]=[85/10]=[8,5]=9

K=Sqr(9*1,19481/(9*0,80974))=1.215

То есть Сердюк из группы №1 сильнее Сердюка группы №2 в 1,215 раза.

Теперь попробуем оценить по графику процент потерь, когда нет равновесия, а есть перевес одной из сторон.

70 Янычар раз прокачаных по скорострельности и с ударом 16 против 100 Сердюков, с ударом 12.

Сердюки Янычары
V1=85 V1=55
F1=12 F2=16
?1=0,54825 ?2=0,80974

[V1/F2]=[85/16]=[5.313]=6
[V1/F2]=[55/12]=[4.58]=5

K=Sqr(6*0,54825/(5*0,80974))=0.9014

Тоесть, индивидуально Яничар з такими параметрами в 1/0,9014 =1,109 раз сильнее Сердюка. Но Сердюков 100, а Янычар 70. Кто победит, и какие потери будут у победителя?

Кб=K*N1/N2=0.9014*80/70=1.287

Выходит, отряд Сердюков сильнее в 1,287 раз. Смотрим на график, значению ?1,3 по горизонтали соответствуют потери порядка 37%. То есть должно остаться порядка 63 Сердюков. Реальный бой показал 61 оставшихся Сердюков. Или это означает 39% потерь, что весьма близко к расчётному.

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

График боя. По горизонтали — Kб, по вертикали — процент потерь.

Интересно отметить, что при перевесе сил в 2 раза процент потерь составляет меньше 15%. Разумеется, если в бою учавствуют одновременно все юниты. В случае фланговой атаки, например, юниты противника просто не успевают подтягиваться, вследствие чего соотношение сражающихся юнитов складывается в пользу нападающей стороны, и может существенно уменьшить её потнри. Вот почему фланговые атаки так опасны. Вообще — искусство полководца состоит в том, чтобы сражаться всегда при Kб > 1, то есть вводить в бой одновременно как можна больше своих солдат, и мешать противнику одновременно задействовать в бою все свои силы.


6 комментариев для Анализ боя в игре казаки

  1. U309_STRIJ:

    Большое спасибо!

  2. nutcracker:

    попробывал 100 Сердюков против 116 Янычар то те то те побеждали)
    Все таки критический выстрел еще, а сердюков скорострельность побольше.
    как будет выглядить формула расчета оставшихся в живых если стрелки одинаковые? (N1-N2)*K ?

Добавить комментарий