Добавлено: Пн Авг 01, 2011 9:39
Заголовок сообщения: Думаем за ИИ
Давайте попытаемся сформулировать правила "Хорошего ИИ", который не будет тупо атаковать, расшибая лоб о стенку.
Возможно (хотя и маловероятно), что появятся некоторые идеи, которые автору пригодятся.
0. В ходе этого обсуждения можно будет продемонстировать сложность проблемы и прекратить стоны о плохом ИИ.
1. В чем основная проблема ИИ сейчас? Он неплохо решает задачу максимально эффективного применения каждого отдельно взятого юнита, на каждом, отдельно взятом ходу. Но ИИ, кажется, не делает глубокого тактического планирования (больше чем на полтора хода) и не обеспечивает кооперации войск.
2. Как решать проблему? Можно пойти по пути шахматных программ, ветвящиеся деревья решений со взвешенными узлами, но при том, что поле в Эадоре маленькое, богатство выбора на каждом ходу значительно больше шахматного. В шахматах надо ходить за раз одной фигурой, в эадоре - всей армией. При армиях из десятка воинов богатство выбора зашкаливает. А честно перебрать варианты на 4 хода вперед - задачка для суперкомпьютера на недельку.
Другой вариант - тактические шаблоны -
"стенка, стрелки, лекари"
"хит энд ран по важным целям"
"засада в лесу" (переждать стрелы, заставить стенку выйти в поле)
"концентрация на выбранной цели"
ит.п.
Что включает в себя шаблон? Во-первых оценку целесообразности (сравнительный состав армий, классы/статы героев, местность). Возможно, как простой вариант - прописать для типичных нейтралов какой шаблон использовать. Гномы с баллистами должны практически всегда делать стенку, а кочевники - хит энд ран, воры, тролли - засаду или концентрацию удара.
Во-вторых некую общую геометрию, я бы так набросал алгоритм для стенки - простой перебор оборонительных контуров, оцениваемых по минимизации максимальной уязвимости элементов (холмы - плюс, болота - минус, возможость удара с трех направлений - минус, если есть лекари - безопасность лечения - плюс, наличие удобных клеток (холмы, леса) перед фронтом - минус, болота - плюс), с сортировкой стеночных бойцов по бронированию - самых живучих на самое опасное направление.
В рамках контура оцениваем позиции для лекарей и стрелков. По покрытию, защищенности (лес), количеству полей, с которых доступными человеку войсками простреливается без возможности ИИ ответить.
Контур рассматривается, только если охватывает N и более полей, где N - число ИИ войск.
Дополнительно - оценить возможность сжатия контура при потерях, либо подведение резервов для затыкания дыр. Оценить возможность уводить с фронта раненых и усталых (если есть чем заменить)
В третьих - алгоритм действий в бою, прироритет лечения. Сортировка войск в стенке по опасности пробоя на следующем ходу, делать такие шаги вперед, назад, заменять раненых, лечить лекарями, чтобы число потенциальных пробоев на следующем ходу минимизировать.
Опасность для стрелков / лекарей.
Положение вражесого героя, стрелков, лекарей, возможность их атаковать не выходя из контура.