Powered by Invision Power Board


  Ответ в темуСоздание новой темыСоздание опроса

> Описание алгоритма боя., взято с http://ds.civ3000.com/ru/algorit
Mentat
Дата Nov 24 2004, 04:27 AM
Цитировать сообщение








Группа: Members
Сообщений: -2
Пользователь №: 1
Регистрация: 14-November 06





1. Терминология.
Рейтинг армии - ее суммарная стоимость в продиуме (по формуле 0.2*Кад + 0.4*Нано + 0.1*Энергия + 0.1*Еда + Прод).
Группа юнитов - юниты одного вида (например, "500 Солдат" или "250 Бридеров").

2. Алгоритм.
2.1. Начало боя.
Если рейтинг атакующей армии в 5 раз больше, чем всех войск в обороне, то происходит грабеж без боя. Иначе начинается первый раунд.

2.2. Рассчитываются потери каждой стороны.
Армии наносят урон одновременно, т.е. в расчете потерь противника участвует то количество юнитов, которое было на момент их обоюдного выстрела. Атакующая армия может быть только одна (для каждой атакующей армии завязывается отдельный бой). Армии в защите выступают как одно целое для подсчета их огневой мощи и рейтинга, однако каждая из защищающихся армий получает полный урон от атакующей армии.


Бой без бонусов.
Это гипотетический алгоритм боя, так как расовые бонусы есть всегда.
Для каждого вида юнитов вычисляется его эффективный урон (ЭУ) и эффективное здоровье (ЭЗ):
ЭУ = базовый_урон_юнита * базовое_нападение_юнита
ЭЗ = базовая_броня_юнита / (1 - базовая_защита_юнита)
ЭУ суммируется по всем юнитам всех стреляющих армий одной из сторон и получается общий урон (ОУ). Для каждой армии противника ОУ делится на количество групп юнитов в этой армии, т.е. каждая группа получает одинаковый урон УнГ (на самом деле, группы могут получать разный урон в силу наличия уровневых бонусов). Этот урон делится на ЭЗ юнитов группы чтобы получить потери в юнитах:
урон группы: УГ = ЭУ_группы * кол-во юнитов
общий урон: ОУ = двойная сумма УГ по всем армиям и по всем группам
урон на группу потивника: УнГ = ОУ / кол-во групп в армии (для каждой армии)
потери группы: ПГ = УнГ / ЭЗ_группы.

Пояснение с точки зрения теории вероятностей:
Представим себе такую схему - каждый юнит стреляет по случайно выбранному юниту противника, при этом с вероятностью "нападение" юниту удается прицелиться, с вероятностью (1 - "защита_потивника") противник не уклоняется от выстрела и получает "урон". Если поделить этот урон на "броню" противника, получим количество юнитов, которое теряет противник.
Тогда математическое ожидание потерь (средние потери, если говорить проще, хоть и не вполне корректно) будет:
нападение * (1 - защита_противника) * урон / броня_противника
Если просуммировать по всем юнитам, то средние потери будут выражаться вышеприведенными формулами.
Однако, в Сфере Судьбы случайностей нет, бой просчитывается полностью детерминированно, поэтому потери в точности равны математическому ожиданию потерь рассмотренной вероятностной модели.

На самом деле, всё работает немного не так из-за уровневых бонусов. Но такой алгоритм дает неплохое приближение потерь, а главное, общее представление об алгоритме боя.


Боевые бонусы.
Бонусы могут быть четырех видов: расовые, артефактовые, религиозные и уровневые.


Расовые бонусы.
Применяются к атакующим и защищающимся войскам игрока в зависимости от его расы. Важна раса именно игрока, а не раса юнита. Солдат у игрока-Воранера имеет воранерские расовые бонусы, а у игрока-Лиенсу - лиенсовые.
Воранер: атака +10%
Лиенсу: атака +5%, защита +5%
Псолао: защита +10%

Расовые бонусы учитываются отдельно от всех остальных, т.е. воранерский расовый бонус в 10% на атаку учитывается как домножение на 1.1 эффективного урона всех его юнитов, независимо от остальных бонусов.
ЭУ_с_рас_бонусом = ЭУ * (1 + рас_бонус_на_атаку)
ЭЗ_с_рас_бонусом = ЭЗ / (1 - рас_бонус_на_защиту)


Артефактовые бонусы.
Бонусы от артефактов, вставленных в ячейки военной базы. Артефакты на складе не работают, но во время боя можно менять набор артефактов на базе. Действуют на все защищающиеся войска (в том числе на войска других игроков). На атакующую армию артефактовые бонусы не действуют.
ЭУ_с_артами = ЭУ * (1 + сумма_арт_бонусов_на_урон) * (1 + сумма_арт_бонусов_на_нападение)
ЭЗ_с_артами = ЭЗ * (1 + сумма_арт_бонусов_на_броню) / (1 - сумма_арт_бонусов_на_защиту)


Религиозные бонусы.
Зависят от религии игрока, распространяются на все его войска.
Боевые бонусы приверженцев Штурмовиков:
броня -15%
защита -10%
нападение +15%
урон +15%

Боевые бонусы приверженцев Созерцателей Облаков:
броня +15%
защита +10%
нападение -15%
урон -15%

У атеистов, соответственно, ни плюсов, ни минусов.

Религиозные бонусы учитываются так же как артефактовые и вместе с ними, т.е.
ЭУ_с_артами_и_религией = ЭУ * (1 + сумма_арт_бонусов_на_урон + религ_бонус_на_урон) * (1 + сумма_арт_бонусов_на_нападение + религ_бонус_на_нападение)
ЭЗ_с_артами_и_религией = ЭЗ * (1 + сумма_арт_бонусов_на_броню + религ_бонус_на броню) / (1 - сумма_арт_бонусов_на_защиту - религ_бонус_на_защиту)


Уровневые бонусы.
Действуют на характеристики стреляющего и уворачивающегося юнитов в зависимости от их уровней.
1лвл против 3лвл: атака +17%
1лвл против 4лвл: атака +27.2%
2лвл против 1лвл: атака +10%, защита +10%
2лвл против 4лвл: атака +3.4%
3лвл против 2лвл: атака +20%, защита +20%
4лвл против 3лвл: атака +20%, защита +20%
Эти бонусы используются в текущей версии симулятора и определены с точностью до десятых, в некоторых случаях до сотых долей процента. Однако они могут различаться в разных сферах.
Уровневые бонусы трансформируют алгоритм следующим образом:
Количество юнитов в каждой стреляющей группе делится на количество защищающихся групп. Мы получаем набор стреляющих подгрупп с одинаковым числом юнитов в каждой, и каждая из которых стреляет по своей защищающейся группе. Затем вычисляются бонусы для каждой стреляющей подгруппы в зависимости от ее уровня и уровня защищающейся группы. Добавляются все остальные бонусы. Расчитываются потери. Аналогичная операция проводится для каждой из стреляющих групп. Потери суммируются.
Из-за уровневых бонусов защищающиеся группы могут получать разный урон.
Уровневые бонусы учитываются отдельно от всех остальных (аналогично расовым):
ЭУ_с_ур_бонусом = ЭУ * (1 + ур_бонус_на_атаку)
ЭЗ_с_ур_бонусом = ЭЗ / (1 - ур_бонус_на_защиту)


Подсчет бонусов.
Тут следует отметить, что расовые и уровневые бонусы - по сути не бонусы на боевые характеристики юнитов, они считаются отдельно. Поэтому бессмысленно рассуждать о том, на "нападение" воранерский бонус или на "урон" - ни на то, ни на другое. Это просто общий бонус на атаку. Формулы с учетом всех бонусов:
ЭУ_со_всеми_бонусами = ЭУ * (1 + рас_бонус_на_атаку) * (1 + ур_бонус_на_атаку) * (1 + сумма_арт_бонусов_на_урон + религ_бонус_на_урон) * (1 + сумма_арт_бонусов_на_нападение + религ_бонус_на_нападение)
ЭЗ_со_всеми_бонусами = ЭЗ * (1 + сумма_арт_бонусов_на_броню + религ_бонус_на броню) / [(1 - рас_бонус_на_защиту) * (1 - ур_бонус_на_защиту) * (1 - сумма_арт_бонусов_на_защиту - религ_бонус_на_защиту)]

Защита со всеми возможными бонусами не может превышать 0.95. Или, что то же самое, знаменатель ЭЗ не может быть меньше 0.05:
0.05 < (1 - базовая_защита_юнита) * (1 - рас_бонус_на_защиту) * (1 - ур_бонус_на_защиту) * (1 - сумма_арт_бонусов_на_защиту - религ_бонус_на_защиту)

Все бонусы, естественно, в формулах берутся в долях единицы, а не в процентах (75% = 0.75).

Дробные потери переходят на следующий раунд. После боя они отбрасываются. В расчетах огневой мощи и рейтинга участвует дробное число юнитов.

Потери, превышающие кол-во юнитов в защищающейся группе, просто отбрасываются. Т.е. урон, который группа не в состоянии "поглотить" пропадает зря.


2.3. Останов боя.
Если после учета потерь рейтинг одной из сил (атакующей армии или суммарный всех защищающихся армий) в 2 раза больше, чем у другой - бой останавливается. Если одна из сил состоит только из транспортов, т.е. не может больше нанести урона - бой тоже останавливается. Иначе - возвращаемся на пункт 2.2.

3. Разное.
Состав армий на начало раунда (даже в случае грабежа без боя) показывается на картинке в военной базе. Реальный просчет потерь происходит в конце раунда (18 минут - на Орионе и других неускоренных мирах).

Следствие 1. Прослойка.
Лишний урон на группу просто теряется. Поэтому выгодно иметь в армии прослойку из 1 юнита всех видов.

Следствие 2. Прикрышка.
Урон почти поровну делится между всеми группами. Так как у транспортов очень дешевое здоровье, выгодно иметь в армии транспорта всех видов. Можно рассматривать их как дешевое дополнительное здоровье к ударной группе.

Следствие 3. Арты на защиту рулят.
(1 - сумма_арт_бонусов_на_защиту - религ_бонус_на_защиту) стоит в знаменателе ЭЗ, поэтому ЭЗ можно увеличить в десятки раз артами на защиту.


Обновления:
28 Окт 2004: Исправлено описание алгоритма. Теперь описание соответствует алгоритму симулятора от 23 Окт 2004. Старая версия.
9 Авг 2004: Первая версия.
PMПисьмо на e-mail пользователю
Top
Mentat
Дата Nov 24 2004, 04:27 AM
Цитировать сообщение








Группа: Members
Сообщений: -2
Пользователь №: 1
Регистрация: 14-November 06





PMПисьмо на e-mail пользователю
Top
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса