---
key: lesson/npc-action-selection
type: lesson
id: npc-action-selection
lang: ru
title: Как NPC выбирает действие
summary: >-
  Разделяем допустимость, приоритет и выполнение действия, чтобы персонаж
  принимал объяснимые решения и не метался между ними.
updatedAt: '2026-10-20'
status: active
url: 'https://gamemechanics.pro/ru/lessons/npc-action-selection/'
jsonUrl: 'https://gamemechanics.pro/api/v1/knowledge/ru/lesson/npc-action-selection.json'
markdownUrl: 'https://gamemechanics.pro/content/knowledge/ru/lesson/npc-action-selection.md'
aliases: []
tags:
  - npc-ai
  - decision-making
  - debugging
sourceIds:
  - source-25e079ce502c5d9b
  - source-8ad8c2778e5aab6e
sources:
  - id: source-25e079ce502c5d9b
    title: 'Dawe et al.: Behavior Selection Algorithms, An Overview'
    url: >-
      https://www.gameaipro.com/GameAIPro/GameAIPro_Chapter04_Behavior_Selection_Algorithms.pdf
    verifiedAt: null
  - id: source-8ad8c2778e5aab6e
    title: 'David Rez Graham: An Introduction to Utility Theory'
    url: >-
      https://www.gameaipro.com/GameAIPro/GameAIPro_Chapter09_An_Introduction_to_Utility_Theory.pdf
    verifiedAt: null
relations:
  - type: requires
    direction: outgoing
    label: Перед началом
    key: lesson/npc-perception
    title: Восприятие NPC и память о цели
    url: 'https://gamemechanics.pro/ru/lessons/npc-perception/'
    jsonUrl: 'https://gamemechanics.pro/api/v1/knowledge/ru/lesson/npc-perception.json'
    markdownUrl: 'https://gamemechanics.pro/content/knowledge/ru/lesson/npc-perception.md'
  - type: explains
    direction: outgoing
    label: Применение принципа
    key: mechanic/point-and-click--family-31
    title: 'Поведение NPC, животных и живых систем'
    url: >-
      https://gamemechanics.pro/ru/knowledge/mechanic/point-and-click--family-31/
    jsonUrl: >-
      https://gamemechanics.pro/api/v1/knowledge/ru/mechanic/point-and-click--family-31.json
    markdownUrl: >-
      https://gamemechanics.pro/content/knowledge/ru/mechanic/point-and-click--family-31.md
  - type: practices
    direction: outgoing
    label: Применить на практике
    key: practice/maintenance-patrol
    title: Ремонтный патруль
    url: 'https://gamemechanics.pro/ru/knowledge/practice/maintenance-patrol/'
    jsonUrl: >-
      https://gamemechanics.pro/api/v1/knowledge/ru/practice/maintenance-patrol.json
    markdownUrl: >-
      https://gamemechanics.pro/content/knowledge/ru/practice/maintenance-patrol.md
  - type: reviews
    direction: outgoing
    label: Проверить через призму
    key: lens/schell-031
    title: Действия
    url: 'https://gamemechanics.pro/ru/knowledge/lens/schell-031/'
    jsonUrl: 'https://gamemechanics.pro/api/v1/knowledge/ru/lens/schell-031.json'
    markdownUrl: 'https://gamemechanics.pro/content/knowledge/ru/lens/schell-031.md'
  - type: reviews
    direction: outgoing
    label: Проверить через призму
    key: lens/schell-062
    title: Прозрачность
    url: 'https://gamemechanics.pro/ru/knowledge/lens/schell-062/'
    jsonUrl: 'https://gamemechanics.pro/api/v1/knowledge/ru/lens/schell-062.json'
    markdownUrl: 'https://gamemechanics.pro/content/knowledge/ru/lens/schell-062.md'
  - type: contains
    direction: incoming
    label: Учебные маршруты
    key: path/npc-behavior
    title: Поведение NPC
    url: 'https://gamemechanics.pro/ru/learn/npc-behavior/'
    jsonUrl: 'https://gamemechanics.pro/api/v1/knowledge/ru/path/npc-behavior.json'
    markdownUrl: 'https://gamemechanics.pro/content/knowledge/ru/path/npc-behavior.md'
placements: []
supersededBy: []
attributes:
  category: engineering
  level: intermediate
  minutes: 6
endsAt: null
provenance: >-
  Авторский материал gamemechanics.pro. Учебные примеры требуют проверки в своём
  проекте.
license: CC-BY-4.0
codeLicense: MIT
attribution: gamemechanics.pro contributors
---
# Как NPC выбирает действие

id: npc-action-selection
type: lesson
key: lesson/npc-action-selection
lang: ru
status: active
url: https://gamemechanics.pro/ru/lessons/npc-action-selection/

Разделяем допустимость, приоритет и выполнение действия, чтобы персонаж принимал объяснимые решения и не метался между ними.

## Что нужно знать

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

## Принцип

Сначала отберите допустимые действия, затем выберите одно, затем выполните его. Не позволяйте каждой подсистеме независимо управлять движением. Обзор алгоритмов в Game AI Pro сравнивает машины состояний, деревья поведения и другие способы выбора; универсального победителя здесь нет.

Для нескольких жёстких режимов удобна машина состояний. Для последовательностей проверок и действий подходит дерево поведения. Для сравнения ситуативной полезности можно оценивать кандидатов общей шкалой, как описано в главе о utility theory. Система оценок не заменяет запреты и проверку доступности действия.

<span id="пример-ремонтный-робот"></span>

## Практический пример

### Ремонтный робот

В нашей учебной модели робот может заряжаться, чинить насос или помогать игроку открыть тяжёлую дверь. Заряд нормирован от 0 до 1. Ниже 0,1 действует обязательное правило: отправиться на доступную зарядку. Если путь к ней отсутствует, робот переходит в безопасное ожидание и сообщает причину.

В остальных случаях сравним допустимые кандидаты:

| Действие | Оценка в этой модели | Условие допуска                       |
| -------- | -------------------- | ------------------------------------- |
| Зарядка  | `1 - battery`        | Станция достижима                     |
| Ремонт   | `leakSeverity`       | Есть детали и путь к насосу           |
| Помощь   | `requestUrgency`     | Запрос ещё актуален и дверь достижима |

Все входы ограничены диапазоном 0..1. При заряде 0,6, утечке 0,8 и срочности 0,5 выигрывает ремонт. Это выбранные проектные оценки, а не измерение человеческих желаний.

Чтобы близкие оценки не вызывали метания, сохраняйте текущее действие, пока конкурент не лучше минимум на 0,15. Недопустимое или завершённое действие освобождайте сразу. При равенстве используйте стабильный порядок. Порог можно менять после наблюдения; жёсткое правило низкого заряда всё равно имеет приоритет.

## Частые ошибки

- Сравнивать расстояние в метрах с срочностью 0..1 без преобразования шкалы.
- Каждый кадр начинать ремонт заново, сбрасывая прогресс.
- Удерживать действие ради стабильности, когда цель уже уничтожена.

## Проверка результата

- Запишите входы, исключённые действия, оценки и причину выбора.
- Проверьте равенство оценок, потерю цели и отсутствие любого допустимого кандидата.
- Колеблите срочность рядом с порогом и проверьте отсутствие частых переключений.
- Отдельно проверьте обязательную зарядку и её недостижимость.

## Задание для ИИ-агента

> Реализуй выбор как чистую функцию снимка мира и текущего действия. Отдельно сделай выполнение. Подготовь таблицу граничных ситуаций и объясни каждый результат без случайного выбора. Не подключай языковую модель к покадровому управлению.

Проверьте решение через призмы [«Действия»](/ru/lenses/#schell-031) и [«Прозрачность»](/ru/lenses/#schell-062).

## Связанные материалы

- Перед началом: [Восприятие NPC и память о цели](https://gamemechanics.pro/ru/lessons/npc-perception/) (key: lesson/npc-perception)
- Применение принципа: [Поведение NPC, животных и живых систем](https://gamemechanics.pro/ru/knowledge/mechanic/point-and-click--family-31/) (key: mechanic/point-and-click--family-31)
- Применить на практике: [Ремонтный патруль](https://gamemechanics.pro/ru/knowledge/practice/maintenance-patrol/) (key: practice/maintenance-patrol)
- Проверить через призму: [Действия](https://gamemechanics.pro/ru/knowledge/lens/schell-031/) (key: lens/schell-031)
- Проверить через призму: [Прозрачность](https://gamemechanics.pro/ru/knowledge/lens/schell-062/) (key: lens/schell-062)
- Учебные маршруты: [Поведение NPC](https://gamemechanics.pro/ru/learn/npc-behavior/) (key: path/npc-behavior)

## Источники и происхождение

Авторский материал gamemechanics.pro. Учебные примеры требуют проверки в своём проекте.

- [Dawe et al.: Behavior Selection Algorithms, An Overview](https://www.gameaipro.com/GameAIPro/GameAIPro_Chapter04_Behavior_Selection_Algorithms.pdf) (id: source-25e079ce502c5d9b)
- [David Rez Graham: An Introduction to Utility Theory](https://www.gameaipro.com/GameAIPro/GameAIPro_Chapter09_An_Introduction_to_Utility_Theory.pdf) (id: source-8ad8c2778e5aab6e)

CC-BY-4.0 · gamemechanics.pro contributors
