Объявления

Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

Герои 2 (разные версии) с плагинами

Не запускается игра? Проблемы со звуком? Где, в конце концов, взять игру, скачать патчи, приложения и карты? Как установить все это? Все проблемы обсуждаем в этом разделе
offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Герои 2 (разные версии) с плагинами

Сообщение Ben80 » 16 авг 2023, 04:51

AlexSpl писал(а):

составить табличку: старый QuickCombat/новый QuickCombat/автобой/человек.


Если напишите составы сражающихся армий, то я протестирую и составлю табличку.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5588
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Герои 2 (разные версии) с плагинами

Сообщение AlexSpl » 16 авг 2023, 08:08

Можно дать стандартному герою 1-го уровня без артефактов и модификаторов морали/удачи 5 родных отрядов 2-6 уровня фиксированной численности. Пусть это будет армия Волшебницы: 1 Феникс, 4 Единорога, 7 Старших Друидов, 15 Высоких Эльфов и 14 Боевых Гномов (примерно альфа 1 Феникса в каждом отряде). Для начала можно потестить бои против нейтралов. По-хорошему, нужно подобрать 5-10 нейтральных отрядов, обеспечивающих коэффициенты победы с равномерным шагом (например, 0.20, 0.30, ..., 0.80), но считать коэффициент победы точно вручную долго, а программ для подсчёта C[w] в Героях 2 у меня нет, поэтому можно просто от 5 альф Феникса (a) отталкиваться: например, 0.25a, 0.33a, 0.40a, 0.50a, 0.80a, 1.00a, 1.25a, 1.50a, 2.00a, 2.50a, 3.00a, 4.00a. И с каждым отрядом боёв 5 хотя бы (нерепрезентативно, желательно больше, но тут уж от свободного времени и желания тестировать зависит). Можно автоматизировать процесс, если совсем уж серьёзно подходить. Только вручную останется сразиться, без всяких трюков/разводов: просто игра среднего игрока, который уже не допускает ошибок в бою.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Герои 2 (разные версии) с плагинами

Сообщение Ben80 » 19 авг 2023, 09:58

Завершил исследование. Таблицы можно посмотреть в приложенном файле (и при желании взять за основу для своих исследований):
Теор_битва_эксперимент.xlsx
(23.89 КБ) Скачиваний: 171


Были проведены автобитвы с Мечниками, Птицами Рок и Друидами - численностью, соответствующей 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 Cw (коэффициента победы героя), по 3 автобитвы для каждого Cw с усреднением результатов (то есть потерь армии героя). Результаты в таблицах 3-7.

Модификаторы героя (первичные навыки) были учтены, однако для существ (с обеих сторон) использовалась только Альфа-сила (базовые fight_value). Расчеты с использованием мю-поправки были произведены, однако исключительно для справки. Дополнительно проведены битвы и расчеты, показывающие неадекватность применения Мю-функций (табл. 16, 17). Так, проведены 3 автобитвы с Зомби-мутантами - армия героя выигрывает уже при Cw = 0.4 (92 Зомби-мутанта) и 3 автобитвы с Гоблинами - армия героя выигрывает уже при Cw = 0.2 (350 Гоблинов). Причина неадекватности результатов заключается в том что при расчете Cw использовались Мю-функции.

Теперь вернемся к нормальным fight_value и нормальным результатам.
Построены графики зависимости потерь армии героя в боях с нейтралами от Cw - можно сравнить результаты 1) автобоя, 2) оригинального теор. расчета, 3) нового теор. алгоритма ("new 1") - используются новые границы для dice (от 20 до 80) плюс сдвиги в значениях Cw 4) нового теор. алгоритма ("new 2") - используются новые границы для dice (от 20 до 80), но сдвиги не используются.
Отдельные графики для Мечников, Птиц Рок и Друидов:

Изображение

Изображение

Изображение

Друиды оказались слабее, чем можно спрогнозировать на основе fight_values. При Cw = 0,5 армия героя выиграла все 3 автобитвы. Это можно объяснить завышенным fight_value для стрелков - в базовом fight_value используется "стратегическая ценность", которая у стрелков повышена, благодаря их важности при осадах - как при защите замка, так и при штурме. Для теор. расчета битв предлагаю использовать коэффициент 0.85 для стрелков к их Альфа-силе. Численность Друидов, необходимая для достижения нужных Cw, была перерасчитана, проведены дополнительные автобитвы (табл. 12, 13).
Построен новый график для Друидов:

Изображение

Итогом приведем график для потерь, усредненных по боям с Мечниками, Птицами Рок, Друидами:

Изображение

Визуально можно сказать, что оба новых алгоритма теор. расчета лучше оригинального, однако алгоритм, который использует сдвиги Cw, дает неправдоподобно низкую величину потерь для высоких Cw (в районе 0,9) - 4% против 15% потерь, которые дает автобой. Нужно учитывать особую важность высоких значений Cw - ведь комп с большой вероятностью будет проводить битвы именно при высоких Cw. Кроме того, большие Cw соответствуют и большой армии - значит, каждый процент потерь соответствует большому количеству юнитов.
Поэтому был предложен 3-й алгоритм расчета, который использует другие значения для сдвигов значений Cw:
+0,02 если Cw >= 0.6 и Сw < 0.7
+0.04 если Cw >= 0.7 и Cw < 0.8
+0.02 если Cw >= 0.8 и Cw < 0.9

Игрового смысла в этих сдвигах никакого - чистая подгонка. Предполагаю, что и у Фила это была попытка чистой подгонки. Думаю, можно было бы обойтись без этих сдвигов, но это нужно работать :smile1:
То есть нужных результатов можно было бы достичь подборкой границ для dice плюс корректировкой основного алгоритма по потерям:
Код: Выделить всё
  if(isAttackerWin && probWinnerA > 0.6)
    probDelta = (probWinnerA + 0.65) * probDelta;
  if(probDelta > 1.0)
    probDelta = 1.0;
  float casualties = (1.0 - probDelta) * (1.0 - probDelta);

  if(winningDegree > 0.8 && casualties > 0.2)
    casualties = casualties * casualties;
  if(winningDegree > 0.96 && (1.0 - winningDegree) / 2.0 < casualties)
    casualties = (1.0 - winningDegree) / 2.0;
  if(casualties > 0.6 && casualties < 0.99)
    casualties = casualties - 0.1;


Сравнение автобоя и последнего (лучшего) алгоритма теор. расчета:
Изображение
Последний раз редактировалось Ben80 19 авг 2023, 18:14, всего редактировалось 3 раз(а).
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Герои 2 (разные версии) с плагинами

Сообщение Ben80 » 19 авг 2023, 10:07

Что меня дополнительно заинтересовало ? - Нетривиальность зависимости потерь от Cw. В смысле, реальной зависимости потерь - по данным автобоя (уверен, что при ручных битвах все эти нюансы сохранятся). Если двигаться от Cw = 0.5 в сторону больших значений Cw, то сначала при увеличении Cw потери резко падают, затем примерно в районе Cw = 0.8 увеличение Cw перестает существенно снижать потери (это как бы одна точка перегиба), ну а далее уже где-то в районе Cw = 0.95 потери резко падают до нуля (это как бы еще одна точка перегиба). Видимо, Фил и пытался это отразить в своем алгоритме:

Код: Выделить всё
  if(winningDegree > 0.8 && casualties > 0.2)
    casualties = casualties * casualties;
  if(winningDegree > 0.96 && (1.0 - winningDegree) / 2.0 < casualties)
    casualties = (1.0 - winningDegree) / 2.0;
  if(casualties > 0.6 && casualties < 0.99)
    casualties = casualties - 0.1;
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5588
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Герои 2 (разные версии) с плагинами

Сообщение AlexSpl » 19 авг 2023, 10:11

Отличная работа, но третий алгоритм нужно немного подкорректировать на участке C[w] от 0.2 до 0.6, ибо автобитва на этом участке даёт заведомо большие потери, причём расхождение довольно значимое (особенно на отрезке 0.4 .. 0.6).
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Герои 2 (разные версии) с плагинами

Сообщение Ben80 » 19 авг 2023, 10:17

AlexSpl писал(а):

Отличная работа, но третий алгоритм нужно немного подкорректировать на участке C[w] от 0.2 до 0.6, ибо автобитва на этом участке даёт заведомо большие потери, причём расхождение довольно значимое.


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

Ну и как уже говорил должно быть соответствие между прогнозом ИИ перед боем и результатами боя. Для прогноза используется вот такая функция (в philAI_ProbableOutcomeOfBattle), которая как уже говорил дает лишь 75% потерь при Cw = 0.5:
Код: Выделить всё
  *probablePreciseCasualtiesA = (1.0 - *probWinnerA * *probWinnerA) * simpleStrengthA;
  *probablePreciseCasualtiesD = (1.0 - (1 - *probWinnerA)*(1 - *probWinnerA)) * simpleStrengthD;
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5588
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Герои 2 (разные версии) с плагинами

Сообщение AlexSpl » 19 авг 2023, 10:20

Цитата:
Ну и как уже говорил должно быть соответствие между прогнозом ИИ перед боем и результатами боя.

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

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Герои 2 (разные версии) с плагинами

Сообщение Ben80 » 19 авг 2023, 10:24

AlexSpl писал(а):

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


Там вся суть в том, что в реальной битве должен быть сделан dice. Можно, конечно в прогнозе усреднить результаты по разным возможным значениям dice. Как собственно я и делал. Это возможно, да.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5588
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Герои 2 (разные версии) с плагинами

Сообщение AlexSpl » 19 авг 2023, 10:24

Цитата:
Можете предложить для прогноза новый алгоритм/функцию ?

Можно взять QuickBattle() без имплементации потерь. Т.е. лоухук на вот этот код:

Код: Выделить всё
*probablePreciseCasualtiesA = (1.0 - *probWinnerA * *probWinnerA) * simpleStrengthA;
*probablePreciseCasualtiesD = (1.0 - (1 - *probWinnerA)*(1 - *probWinnerA)) * simpleStrengthD;

И вызов "обрезанной" QuickBattle() для определения probablePreciseCasualtiesA, probablePreciseCasualtiesD. Это уравняет потери, которые ожидает получить AI и те, которые он получит.

Цитата:
Там вся суть в том, что в реальной битве должен быть сделан dice. Можно, конечно в прогнозе усреднить результаты по разным возможным значениям dice. Как собственно я и делал. Это возможно, да.

Можно усреднять, конечно. А можно использовать последний бросок (dice) прогноза (где-то его хранить, в QuickBattle не делать новый, а просто доставать сохранённый). Кстати, это ещё сымитирует сомнения (нападать/не нападать) реального игрока.
Последний раз редактировалось AlexSpl 19 авг 2023, 10:33, всего редактировалось 1 раз.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Герои 2 (разные версии) с плагинами

Сообщение Ben80 » 19 авг 2023, 10:32

В общем, можно подумать. Но главное в том, чтобы было соответствие прогноза и МО реальных потерь. Но ! Реальные потери будут отличаться от МО потерь - dice должен влиять и давать разницу между прогнозом и реальным исходом.
Вернуться к началу

Пред.След.

Вернуться в Техническая часть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1