Current time: 23.11.2024, 07:41 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Методика расчёта значений Fight/AI Value существ
» Цифры и размышления
Author Message
gamecreator Offline

Posts: 7107
Post: #46

Хм, я почему-то думал что ai value - это ценность вообще (типа кристальные драконы приносят кристаллы).


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
21.06.2011 02:13
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #47

AI Value служит при решении ИИ, кого брать, кого покупать. Например, почти в 1.5 раза больше чем Fight Value у титанов, ибо стрелки рулят.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
21.06.2011 02:49
Find all posts by this user Quote this message in a reply
Marmot Offline

Posts: 552
Post: #48

Кстати, и я хочу знать: есть где-нибудь внятное описание AI Value и Fight Value? Или хоть не очень внятное... Sm


Firefox особенно хорош с Яндекс.Баром, а так же с Яндекс.Блэкджеком и Яндекс.Шлюхами.
(Amko, http://forum.heroesworld.ru)
21.06.2011 18:00
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #49

А что тут описывать? Fight Value служит для оценки силы армии, а AI Value - для выбора приоритета, кого покупать ИИ.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
21.06.2011 19:49
Find all posts by this user Quote this message in a reply
etoprostoya Offline

Posts: 1809
Post: #50

Никаких формул по их вычислению неизвестно, насколько я знаю. Если Мармот хотел знать об этом.
21.06.2011 19:54
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #51

Не знаю как в Fight Value, но даже моя бажная monster power генерирует очень близкое к стоимости в золоте значение.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
21.06.2011 21:14
Find all posts by this user Quote this message in a reply
Marmot Offline

Posts: 552
Post: #52

Вот, вот, я как раз и хотел узнать: в каких таких "попугаях" выражены эти AV и FV? Стоимость существ в золоте мы и так знаем...


Firefox особенно хорош с Яндекс.Баром, а так же с Яндекс.Блэкджеком и Яндекс.Шлюхами.
(Amko, http://forum.heroesworld.ru)
22.06.2011 00:38
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #53

В у.е. они выражены. Абстрактная величина.


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
22.06.2011 00:44
Find all posts by this user Quote this message in a reply
Macron1 Offline

Posts: 521
Post: #54

У меня возник вопрос по программе Mon Power.
Я отправил в личку сообщение GrayFace, но он пока не ответил.
Что мне нужно - формулы расчета Fight Value/AI Value, которые в ней использовались.
Как я понял, в них учитывается Hit points/Attack/Defence/Damage.

Или же может у кого есть другие формулы расчета Fight/AI Value?
Мне это нужно для монстров под VCMI (вписать какие-то хоть сколько-то адекватные значения).


VCMI - будущее Heroes 3!
20.09.2013 01:33
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #55

Да, интересно узнать, какие формулы использовал Серж.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
20.09.2013 16:19
Find all posts by this user Quote this message in a reply
hippocamus Offline

Posts: 517
Post: #56

AI value однозначно не выводится только из этих параметров. Безответка, например, серьёзно повышает AI value, не влияя на параметры монстра.


-= подпись Гиппокамуса =-
21.09.2013 01:01
Visit this user's website Find all posts by this user Quote this message in a reply
Macron1 Offline

Posts: 521
Post: #57

(21.09.2013 01:01)hippocamus Wrote:  AI value однозначно не выводится только из этих параметров. Безответка, например, серьёзно повышает AI value, не влияя на параметры монстра.

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

PS Формулами GrayFace со мной поделился. Как дойдут руки, запрограммирую, и если он будет не против, напишу их в форуме.


VCMI - будущее Heroes 3!
(This post was last modified: 23.09.2013 04:23 by Macron1.)
21.09.2013 01:14
Find all posts by this user Quote this message in a reply
Macron1 Offline

Posts: 521
Post: #58

(20.09.2013 16:19)Berserker Wrote:  Да, интересно узнать, какие формулы использовал Серж.

Накропал на коленке прогу на С++, которая считает AI/Fight values по формулам GrayFace:

http://forum.vcmi.eu/viewtopic.php?p=10495#10495

Надеюсь, все правильно с Pascal перевел.
Еще не проверял сравнением, по результирующим значениям новых монстров для VCMI вроде как похоже получается с соотв. существами из стандартных городов. Лучше, чем ничего.


VCMI - будущее Heroes 3!
29.09.2013 03:45
Find all posts by this user Quote this message in a reply
Arseniy Offline

Posts: 123
Post: #59

Думаю, что многие сталкивались с задачей получения fight/ai value для новых существ героев. Здесь я опишу свой вариант решения, а также приведу полученные цифры для ванильных героев и своего мода.
Чтобы оценить значения fight/ai, можно следовать двумя путями - эвристическим и экспериментальным. В первом случае строится некая функция, получающая на вход параметры и свойства существа и выдающее искомое значение или, скорее, набор эвристик вроде: "каждое очко атаки или защиты дает 1.5 в значение ai", "если существо летающее, увеличим итоговое значение на 10%". На подобном подходе основана программа H3MonPower, оценки эвристиками можно найти на форуме VCMI Project. У данного подхода есть набор плюсов и минусов:
  • + для каждого нового существа ai value считается мгновенно
  • + есть вся логика получения значий, которую можно использовать для других оценок
  • - требование доказательности. Именно такое, а не другое влияние каждого фактора должно быть обосновано каким-либо образом, что вызывает серьезные трудности. Задачу облегчает то, что есть готовые значения в CRTRAITS.TXT, на основе которых можно оценивать полученный результат
  • - при добавлении в игру нового существа значения остальных не меняются. Представьте, добавляем в игру 100 новых стрелков. Однозначно, после этого ai медленных не стреляющих существ должно сильно просесть, а эвристический подход этого не дает.
  • - при сильном изменении статов существ с выходом за существующие диапазоны значений эвристики могут начать вести себя некорректно
И вообще, эвристики можно подбирать бесконечно. Sm
Второй подход основан на получении fight/ai на основе экспериментальных данных. Для этого требуется сравнивать существа в деле, а значит, проводить много битв. Sm
Можно сделать это через редактор карт вручную (что требует очень много работы), а можно написать генератор битв. На основе полученных результатов вычисляются искомые значения.
  • + Система наиболее приближена к "реальным условиям"
  • + Не требуется подбирать эвристики и коэффициенты
  • + При изменении статов существ или добавлении новых происходит автоматический пересчет всех значений
  • - требуется много ручной работы или генератор битв
  • - требуется анализ того, какие битвы и как проводить и как начислять итоговые очки
Забегая вперед скажу, что я написал генератор битв, потому что это было проще и интересней (в моей памяти еще живы воспоминания о том, как мы с другом классе в восьмом с помощью редактора карт организовывали битвы 10 на 10 существ седьмого уровня парами все со всеми, для того, чтобы точно узнать, кто из существ и насколько круче Sm).
Допустим, генератор битв есть. Как посчитать ai value? Здесь есть несколько вариантов:
1) Проводить набор характерных битв, за которые начислять очки.
Например, для каждой пары существ проводятся битвы 10 на 10, 1 на 10, 10 на 1, 1 на 100, 100 на 1, 1 на 1000, 1000 на 1, что позволяет покрыть весь диапазон возможных сил монстров друг относительно друга. Полученные каждым существом суммарные очки за все битвы и есть ai value данного существа. Минусы - непонятно, какие именно битвы проводить, как нормировать их результаты друг относительно друга, как начислять очки (по числу убитых, по числу выживших, по числу хп?).
2) Ввести систему рейтинга со стартовым значением, например 1000. После этого проводить итерациями битвы существ всех со всеми, по результатам которых менять рейтинг. В идеале через большое количество битв рейтинг существ сойдется к каким-то устойчивым значениям, которые и будут искомым ai value. Минусы - построение устойчивой сходящейся системы рейтинга та еще задачка. Хотя наверняка на эту тему есть огромное количество литературы.
3) Оценивать существ в лоб - сколько одних существ содержится в других, то есть подбирать значения двух стеков разных существ так, чтобы проведя битву n на m получить выигрыш первых, а битву n на (m + 1) - вторых, при достаточно больших значениях m и n. Значение m/n и будет значением того, сколько существ второго типа "содержится" в существах первого. Минус данного подхода - получение точного сравнения только относительно какого-то существа. Например, мы можем взять архангела и дать ему ai value 10000, узнать, сколько в архангеле существ всех других типов и вычислить их ai в соответствие с полученной пропорцией (например, если в архангеле 50 копейщиков, то ai value копейщика 200). Но после этого мы можем также взять титана, дать ему ai value 7500 (похоже, именно так сделали разработчики игры Sm), вычислить ai других существ относительно него и получить совсем другое соотношение, потому что титан будет иметь очевидное преимущество по сравнению с архангелом перед медленными не стреляющими существами, как стрелок.
Получается, что у нас есть столько наборов различных ai value, сколько есть существ. Для того, чтобы объединить их вместе, требуется решить задачу поиска минимума функции многих переменных - то есть минимума суммы отклонений значений различных наборов друг от друга. А это очень непростая задача.

Я попробовал применить все три подхода, остановился на третьем, придумав, как можно обойти проблему сравнениям рейтингов.
Идея очень проста. В героях присутствует некая аналогия системы "камень-ножницы-бумага". То есть стрелки должны вырезать медленных, но сильных, медленные должны убивать летунов, а летуны вырезать стрелков. Если найти три существа, одно из которых стрелок, одно медленное, а одно летун с такими характеристиками, что друг относительно друга эти существа равны (вырезают друг друга по кругу), то они вместе являются отличным базисом для подсчета ai value всех остальных существ, и значения их "личных" рейтингов можно просто просуммировать. И для своего мода я нашел таких существ, специально подкорректировав их характеристики, чтобы они максимально соответствовали друг другу. В моем моде ими оказались дендроид-солдат, циклоп и жар-птица (подробнее о моем моде и почему эти существа одного уровня (причем, 9-го Sm) как-нибудь в другой раз Sm). Оказалось, что дендроид-солдат это 0.7586 циклопа, циклоп это 0.7676 жар-птицы, а жар-птица это 0.7624 дендроида-солдата. Более точного соответствия получить не удалось, потому что изменение хоть одной характеристики у любого существа на 1 увеличивает разрыв. Но и такого соответствия (точность 1.5%) уж явно достаточно с учетом, какую погрешность вносит выбранная система битв и прочие факторы.
Резюмируя, в текущем виде вычислении ai/fight value существ в моем моде выглядит следующим образом:
  1. Для каждого из трех типов существ - дендроидов-солдатов, циклопов, жар-птиц определяется, какому количеству всех остальных существ в игре они эквивалентны в битве стек на стек. Для этого последовательно проводятся битвы в генераторе битв.
  2. Каждому из этих трех существ задается условное значение ai value 1000 (на самом деле, это значение у этих трех существ немного отличается и подбирается таким, чтобы у титана получалось 7500)
  3. Для всех остальных существ значение ai вычисляется как 1000 * (дендроидов-солдатов в существе + циклопов в существе + жар-птиц в существе) / 3
  4. PROFIT


Теперь о генераторе. Мой генератор битв лишен случайности (использует осредненное повреждение и не использует удачи/морали). Можно проводить битвы стек на стек, стартовое расстояние между существами составляет 15 клеток, двухклеточность существ не учитывается. Существо с большей скоростью ходит первым, если скорость одинакова, то проводится две битвы (ходит первым первое из существ, ходит первым второе из существ) и результат осредняется. Существа используют ожидание, если им это выгодно, иначе подходят и/или нападают/стреляют. Стрелки стреляют, учитывается штраф после дистанции 10 клеток, учитывается штраф стрелков при рукопашной. Существа используют все свойства, которые проявляются постоянно и могут влиять на исход битвы (двойной удар, нет ответа, двойной выстрел, отсутствие штрафа при рукопашной, снижение брони чудищ, отсутствие штрафа дистанции снайперов). Случайно срабатывающие свойства не учитываются.

Ниже приведен результат вычисления ai value для ванильных героев, нормировка на титана. Столбцы: имя существа, мое значение, значение ванильных героев, отношение значений.
Как видно, различия существенны, но в целом рейтинги ведут себя подобным образом. Максимальные различия возникают на существах, чьи свойства я не учитываю (максимальная разница во всем рейтинге, например, у сказочного дракона, который у меня не кастует).

Quote:0) Pikeman my 84 h3AI 80 Dev 1.05
1) Halberdier my 98 h3AI 115 Dev 0.85
2) Archer my 167 h3AI 126 Dev 1.33
3) Marksman my 242 h3AI 184 Dev 1.32
4) Griffin my 240 h3AI 351 Dev 0.68
5) Royal Griffin my 281 h3AI 448 Dev 0.63
6) Swordsman my 396 h3AI 445 Dev 0.89
7) Crusader my 454 h3AI 588 Dev 0.77
8) Monk my 734 h3AI 485 Dev 1.51
9) Zealot my 763 h3AI 750 Dev 1.02
10) Cavalier my 1251 h3AI 1946 Dev 0.64
11) Champion my 1534 h3AI 2100 Dev 0.73
12) Angel my 4890 h3AI 5019 Dev 0.97
13) Archangel my 8621 h3AI 8776 Dev 0.98
14) Centaur my 79 h3AI 100 Dev 0.79
15) Centaur Captain my 108 h3AI 138 Dev 0.78
16) Dwarf my 149 h3AI 138 Dev 1.08
17) Battle Dwarf my 176 h3AI 209 Dev 0.84
18) Wood Elf my 284 h3AI 234 Dev 1.21
19) Grand Elf my 412 h3AI 331 Dev 1.24
20) Pegasus my 363 h3AI 518 Dev 0.70
21) Silver Pegasus my 497 h3AI 532 Dev 0.93
22) Dendroid Guard my 524 h3AI 517 Dev 1.01
23) Dendroid Soldier my 656 h3AI 803 Dev 0.82
24) Unicorn my 1136 h3AI 1806 Dev 0.63
25) War Unicorn my 1482 h3AI 2030 Dev 0.73
26) Green Dragon my 3069 h3AI 4872 Dev 0.63
27) Gold Dragon my 7356 h3AI 8613 Dev 0.85
28) Gremlin my 38 h3AI 44 Dev 0.86
29) Master Gremlin my 79 h3AI 66 Dev 1.20
30) Stone Gargoyle my 138 h3AI 165 Dev 0.84
31) Obsidian Gargoyle my 160 h3AI 201 Dev 0.80
32) Stone Golem my 241 h3AI 250 Dev 0.96
33) Iron Golem my 318 h3AI 412 Dev 0.77
34) Mage my 565 h3AI 570 Dev 0.99
35) Arch Mage my 636 h3AI 680 Dev 0.94
36) Genie my 537 h3AI 884 Dev 0.61
37) Master Genie my 883 h3AI 942 Dev 0.94
38) Naga my 1482 h3AI 2016 Dev 0.74
39) Naga Queen my 1632 h3AI 2840 Dev 0.57
40) Giant my 2308 h3AI 3718 Dev 0.62
41) Titan my 7500 h3AI 7500 Dev 1.00
42) Imp my 40 h3AI 50 Dev 0.80
43) Familiar my 42 h3AI 60 Dev 0.70
44) Gog my 211 h3AI 159 Dev 1.33
45) Magog my 216 h3AI 240 Dev 0.90
46) Hell Hound my 238 h3AI 357 Dev 0.67
47) Cerberus my 330 h3AI 392 Dev 0.84
48) Demon my 387 h3AI 445 Dev 0.87
49) Horned Demon my 424 h3AI 480 Dev 0.88
50) Pit Fiend my 611 h3AI 765 Dev 0.80
51) Pit Lord my 611 h3AI 1224 Dev 0.50
52) Efreeti my 1259 h3AI 1670 Dev 0.75
53) Efreet Sultan my 1750 h3AI 1848 Dev 0.95
54) Devil my 4371 h3AI 5101 Dev 0.86
55) Arch Devil my 8067 h3AI 7115 Dev 1.13
56) Skeleton my 57 h3AI 60 Dev 0.95
57) Skeleton Warrior my 65 h3AI 85 Dev 0.76
58) Walking Dead my 109 h3AI 98 Dev 1.11
59) Zombie my 147 h3AI 128 Dev 1.15
60) Wight my 179 h3AI 252 Dev 0.71
61) Wraith my 179 h3AI 315 Dev 0.57
62) Vampire my 320 h3AI 555 Dev 0.58
63) Vampire Lord my 533 h3AI 783 Dev 0.68
64) Lich my 815 h3AI 848 Dev 0.96
65) Power Lich my 972 h3AI 1079 Dev 0.90
66) Black Knight my 1523 h3AI 2087 Dev 0.73
67) Dread Knight my 1852 h3AI 2382 Dev 0.78
68) Bone Dragon my 2354 h3AI 3388 Dev 0.69
69) Ghost Dragon my 3960 h3AI 4696 Dev 0.84
70) Troglodyte my 49 h3AI 59 Dev 0.83
71) Infernal Troglodyte my 61 h3AI 84 Dev 0.73
72) Harpy my 123 h3AI 154 Dev 0.80
73) Harpy Hag my 168 h3AI 238 Dev 0.71
74) Beholder my 349 h3AI 336 Dev 1.04
75) Evil Eye my 361 h3AI 367 Dev 0.98
76) Medusa my 512 h3AI 517 Dev 0.99
77) Medusa Queen my 577 h3AI 577 Dev 1.00
78) Minotaur my 662 h3AI 835 Dev 0.79
79) Minotaur King my 833 h3AI 1068 Dev 0.78
80) Manticore my 973 h3AI 1547 Dev 0.63
81) Scorpicore my 1504 h3AI 1589 Dev 0.95
82) Red Dragon my 3937 h3AI 4702 Dev 0.84
83) Black Dragon my 7477 h3AI 8721 Dev 0.86
84) Goblin my 47 h3AI 60 Dev 0.78
85) Hobgoblin my 49 h3AI 78 Dev 0.63
86) Wolf Rider my 104 h3AI 130 Dev 0.80
87) Wolf Raider my 139 h3AI 203 Dev 0.68
88) Orc my 256 h3AI 192 Dev 1.33
89) Orc Chieftain my 294 h3AI 240 Dev 1.23
90) Ogre my 401 h3AI 416 Dev 0.96
91) Ogre Mage my 568 h3AI 672 Dev 0.85
92) Roc my 689 h3AI 1027 Dev 0.67
93) Thunderbird my 1040 h3AI 1106 Dev 0.94
94) Cyclops my 1602 h3AI 1266 Dev 1.27
95) Cyclops King my 1681 h3AI 1443 Dev 1.16
96) Behemoth my 2628 h3AI 3162 Dev 0.83
97) Ancient Behemoth my 4453 h3AI 6168 Dev 0.72
98) Gnoll my 60 h3AI 56 Dev 1.07
99) Gnoll Marauder my 67 h3AI 90 Dev 0.74
100) Lizardman my 198 h3AI 126 Dev 1.57
101) Lizard Warrior my 257 h3AI 156 Dev 1.65
102) Gorgon my 810 h3AI 890 Dev 0.91
103) Mighty Gorgon my 859 h3AI 1028 Dev 0.84
104) Serpent Fly my 216 h3AI 268 Dev 0.81
105) Dragon Fly my 284 h3AI 312 Dev 0.91
106) Basilisk my 399 h3AI 552 Dev 0.72
107) Greater Basilisk my 453 h3AI 714 Dev 0.63
108) Wyvern my 882 h3AI 1350 Dev 0.65
109) Wyvern Monarch my 1466 h3AI 1518 Dev 0.97
110) Hydra my 2754 h3AI 4120 Dev 0.67
111) Chaos Hydra my 3852 h3AI 5931 Dev 0.65
112) Air Elemental my 257 h3AI 356 Dev 0.72
113) Earth Elemental my 367 h3AI 330 Dev 1.11
114) Fire Elemental my 321 h3AI 345 Dev 0.93
115) Water Elemental my 293 h3AI 315 Dev 0.93
116) Gold Golem my 542 h3AI 600 Dev 0.90
117) Diamond Golem my 687 h3AI 775 Dev 0.89
118) Pixie my 31 h3AI 55 Dev 0.56
119) Sprite my 45 h3AI 95 Dev 0.47
120) Psychic Elemental my 1026 h3AI 1669 Dev 0.61
121) Magic Elemental my 1358 h3AI 2012 Dev 0.67
122) Ice Elemental my 464 h3AI 380 Dev 1.22
123) Magma Elemental my 438 h3AI 490 Dev 0.89
124) Storm Elemental my 429 h3AI 486 Dev 0.88
125) Energy Elemental my 371 h3AI 470 Dev 0.79
126) Firebird my 3664 h3AI 4547 Dev 0.81
127) Phoenix my 4396 h3AI 6721 Dev 0.65
128) Azure Dragon my 43206 h3AI 78845 Dev 0.55
129) Crystal Dragon my 24834 h3AI 39338 Dev 0.63
130) Faerie Dragon my 5955 h3AI 19580 Dev 0.30
131) Rust Dragon my 14755 h3AI 26433 Dev 0.56
132) Enchanter my 976 h3AI 1210 Dev 0.81
133) Sharpshooter my 729 h3AI 585 Dev 1.25
134) Halfling my 90 h3AI 75 Dev 1.20
135) Peasant my 9 h3AI 15 Dev 0.60
136) Boar my 129 h3AI 145 Dev 0.89
137) Mummy my 253 h3AI 270 Dev 0.94
138) Nomad my 265 h3AI 345 Dev 0.77
139) Rogue my 102 h3AI 135 Dev 0.76
140) Troll my 473 h3AI 1024 Dev 0.46

Ну и на сладкое, для тех, кто хотел бы узнать, кого в ком сколько:
http://rusfolder.com/40275854
Большой текстовый файл, если будут проблемы со скачиванием, могу выложить в другое место по просьбе.

Если интересны исходники генератора/расчета ai value, причешу и скину.

Буду благодарен дельным замечаниям и предложениям. Sm


- Как я сегодня балагурю?
- Вы прекрасны, сир! (с)
(This post was last modified: 30.03.2014 10:35 by Arseniy.)
30.03.2014 10:28
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #60

Берсеркер когда-то писал программу для вычисления этих значений.


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
30.03.2014 11:59
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group