Перейти к основному содержимому

Боевой ИИ

MCE использует подключаемый паттерн стратегий для боевого ИИ. Система ИИ построена вокруг базового класса BattleAI и набора компонентов BattleAction, которые можно комбинировать для создания различных уровней сложности и стилей поведения.

Архитектура

Конвейер ИИ работает в два слоя:

  1. BattleAI -- Точка входа, получающая текущее состояние боя и возвращающая BattleAction.
  2. Компоненты BattleAction -- Отдельные блоки принятия решений, оценивающие один аспект боя (например, "стоит ли использовать суперэффективный приём?" или "стоит ли переключиться на устойчивого монстра?").

Экземпляр BattleAI содержит упорядоченный список компонентов BattleAction. Он оценивает их в порядке приоритета, и первый, выдавший допустимое действие, побеждает.

Встроенные стратегии ИИ

MCE поставляется с несколькими стратегиями ИИ, которые можно комбинировать:

RandomBattleAI

Простейший ИИ. Выбирает случайный допустимый приём каждый ход.

  • Сложность: Очень лёгкая
  • Применение: Дикие встречи, тренеры ранней игры
  • Поведение: Случайный выбор из доступных приёмов. Без стратегического мышления.

PerformEffectiveMove

Выбирает приём, наносящий наиболее эффективный урон текущей цели.

  • Сложность: Средняя
  • Применение: Тренеры середины игры, лидеры залов
  • Поведение: Рассчитывает эффективность типов для каждого доступного приёма и выбирает лучший. Не учитывает изменения характеристик и статусные приёмы.

PerformRandomMove

Аналогичен RandomBattleAI, но со взвешенным выбором приёмов.

  • Сложность: Лёгкая
  • Применение: Тренеры низкого уровня
  • Поведение: Случайный выбор приёма с небольшим предпочтением атакующих приёмов перед статусными.

Встроенные компоненты действий

Эти компоненты можно компоновать в пользовательские стратегии ИИ:

КомпонентОписание
PerformEffectiveMoveИспользовать приём с лучшей эффективностью типов
PerformRandomMoveИспользовать случайный приём
MegaOrGigaIfCanАктивировать Мега-эволюцию или Gigantamax, если доступно
SwitchToEffectiveMonsterПереключиться на члена отряда с преимуществом типа
UseBattleItemsИспользовать лечебные или статусные предметы при низком HP
IfWildWithRunChanceRunДикие монстры могут попытаться сбежать

Настройка ИИ для каждого тренера

Каждый NPC-тренер может иметь свою конфигурацию ИИ:

  1. В данных Actor или встречи тренера найдите поле AI Configuration.
  2. Назначьте ScriptableObject BattleAI.
  3. Настройте список компонентов действий и их порядок приоритета.

Примеры конфигураций:

Лёгкий тренер (Маршрут 1)

1. PerformRandomMove

Средний тренер (головоломка зала)

1. MegaOrGigaIfCan
2. PerformEffectiveMove
3. PerformRandomMove (запасной)

Сложный тренер (Чемпион)

1. MegaOrGigaIfCan
2. SwitchToEffectiveMonster (при невыгодном положении)
3. UseBattleItems (когда HP < 25%)
4. PerformEffectiveMove
5. PerformRandomMove (запасной)

Интерфейс IBattleAI

Для пользователей DLL-уровня система ИИ доступна через базовый класс BattleAI. Хотя вы не можете изменить внутреннюю реализацию без исходного кода, вы можете:

  1. Создавать новые ScriptableObject'ы BattleAI в редакторе.
  2. Настраивать список компонентов действий через Inspector.
  3. Назначать их тренерам.

Ключевой интерфейс:

public abstract class BattleAI : ScriptableObject
{
// List of BattleAction components evaluated in order
public List<BattleAction> Actions;
}

public abstract class BattleAction : ScriptableObject
{
// Evaluate whether this action should be taken
// Returns null if this action does not apply
public abstract BattleActionResult Evaluate(BattleContext context);
}

Интеграция ML-Agents

MCE включает экспериментальный ИИ на основе ML-Agents для продвинутой сложности:

MLBattleAI

Использует Unity ML-Agents для принятия решений на основе обученной нейронной сети.

  • Сложность: Варьируется (зависит от обучения)
  • Применение: Тренеры эндгейма, соревновательный ИИ, исследования
  • Настройка: Требуется пакет ML-Agents и обученная модель

Обучение ИИ

  1. Установите зависимости ML-Agents: .\MLAgentsInstall.ps1
  2. Настройте параметры обучения в MLAgentsConfig/OpenMonAgent.yaml
  3. Начните обучение: .\RunMLTraining.ps1
  4. Мониторинг через TensorBoard: .\ViewMLResults.ps1
  5. Экспортируйте обученную модель (файл .onnx)
  6. Назначьте модель компоненту MLBattleAI

Класс MCEBattleAgent определяет пространства наблюдений и действий:

Наблюдения (что видит ИИ):

  • HP% своего монстра, типы, стадии характеристик, состояния статуса.
  • HP% монстра противника, типы, стадии характеристик, состояния статуса.
  • Доступные приёмы и их типы.
  • Состояние отряда (оставшиеся монстры, проценты HP).

Действия (что может делать ИИ):

  • Использовать приём 1-4.
  • Переключиться на члена отряда 1-5.
  • Использовать предмет.
Зависимость ML-Agents

ML-Agents -- это отдельный пакет со своими зависимостями Python. Основная система сражений MCE работает без него. Устанавливайте ML-Agents только если планируете использовать ИИ на основе нейронных сетей.

Создание пользовательского ИИ (уровень Source)

С доступом к исходному коду вы можете создавать полностью новые стратегии ИИ:

Пользовательский BattleAction

[CreateAssetMenu(menuName = "OpenMon/AI/Actions/Use Status Move If No Status")]
public class UseStatusMoveIfNoStatus : BattleAction
{
public override BattleActionResult Evaluate(BattleContext context)
{
// Check if opponent has no status condition
if (context.OpponentBattler.StatusCondition != StatusCondition.None)
return null; // Skip this action

// Find a status-inflicting move
foreach (var moveSlot in context.OwnBattler.MoveSlots)
{
if (moveSlot.Move.Category == MoveCategory.Status
&& moveSlot.CurrentPP > 0
&& moveSlot.Move.InflictsStatus)
{
return new BattleActionResult
{
ActionType = BattleActionType.UseMove,
MoveIndex = moveSlot.Index
};
}
}

return null; // No applicable status move found
}
}

Пользовательский BattleAI

[CreateAssetMenu(menuName = "OpenMon/AI/Strategies/Expert AI")]
public class ExpertBattleAI : BattleAI
{
// Override the decision pipeline if needed
public override BattleActionResult DecideAction(BattleContext context)
{
// Custom logic that goes beyond simple action composition
// e.g., look-ahead prediction, team synergy analysis
return base.DecideAction(context);
}
}

Рекомендации по сложности ИИ

СложностьКомпоненты ИИГде использовать
Очень лёгкаяТолько случайный приёмДикие встречи
ЛёгкаяСлучайный со взвешенными приёмамиРанние маршруты, юные тренеры
СредняяУчёт эффективности типовТренеры залов, соперники
СложнаяЭффективность + переключение + предметыЛидеры залов, Элитная четвёрка
ЭкспертнаяПолная композиция + предсказаниеЧемпион, постгейм
НейроннаяМодель, обученная MLСоревновательная, режимы вызова

Лучшие практики

  1. Соответствуйте ИИ нарративному контексту. Случайный ловец жуков не должен играть как Чемпион.
  2. Тестируйте ИИ против команд игрока аналогичного уровня. Несбалансированный ИИ ощущается нечестным.
  3. Используйте паттерн компонентов действий. Его легче поддерживать, чем монолитные скрипты ИИ.
  4. Обеспечьте запасные варианты. Всегда включайте PerformRandomMove как последнее действие, чтобы ИИ не застрял.
  5. Не переоптимизируйте ИИ для ранних тренеров. Игрокам нужно изучить систему, прежде чем столкнуться с умными противниками.