AI-система динамічної складності гри (DDA)
Гравець застрягає на босі п'ятого рівня — frustration зростає, retention падає, середня сесія скорочується. Dynamic Difficulty Adjustment (DDA) або динамічне регулювання складності вирішує це підстроюванням параметрів гри в реальному часі, утримуючи гравця у flow state. Адаптивна складність (DDA) — це ключ до утримання гравця. Ми розробляємо AI-системи DDA під ключ: від аналітики до інтеграції у ваш рушій. Наш досвід — 5+ років в AI/ML та 20+ проєктів у геймдеві, включаючи DDA для мобільних та PC-ігор. За 5 років ми реалізували DDA для понад 20 проєктів. Ми гарантуємо якість інтеграції та підтримку після запуску. Зниження rage-quit на 30% і зростання retention на 15-25% — реальні результати RL-based DDA. DDA — це AI-система, яка динамічно регулює складність гри. DDA допомагає утримувати гравця в flow state. Економія від зниження rage-quit та підвищення retention може сягати десятків тисяч доларів на життєвому циклі гри — при retention growth у 20% та середньому ARPU $2 додатковий дохід за рік може становити $40 000 на 100k інсталяцій. Вартість базової rule-based DDA починається від $5000, RL-based — від $15 000.
Як DDA утримує гравця у flow?
Стан потоку (flow за Чиксентмігаї) — коли challenge ≈ skill. Занадто легко → нудьга, занадто складно → тривога. DDA балансує складність, спостерігаючи за поведінкою гравця. Класичний приклад — Resident Evil 4 з ручними правилами; сучасні ML-підходи точніші та непомітніші. Ми використовуємо reinforcement learning (PPO, SAC) для навчання агента, який у реальному часі підбирає параметри складності. Середовище — симулятор гри, нагорода — метрики flow state. Ми використовуємо алгоритми policy gradient (PPO, SAC) для оптимізації стратегії агента в безперервному просторі дій. Для збору даних ми аналізуємо кілька сигналів: deaths per level, time to complete, damage taken ratio, items used, retry count, session length та drop-off points. Ці метрики агрегуються у спостереження для RL агента. Цільові метрики DDA: death rate 1-3 deaths per section, completion rate 70-80%, стабільна або зростаюча середня сесія.
Чому непомітність змін важлива?
Головна вимога: гравець не повинен помічати DDA. Груба зміна HP ворогів з ×1 до ×0,5 відчувається як читерство. Наші техніки: gradual changes (не більше ±5% за раз), diegetic зміни (дощ знижує точність ворогів — логічно в рамках гри), respawn positioning, timing windows, loot probability. Ці методи забезпечують плавне підстроювання без втрати занурення.
Метрики DDA
| Сигнал | Опис | Типове значення |
|---|---|---|
| Deaths per level | Кількість смертей на рівні | 0-5 |
| Time to complete | Час проходження секції | ±20% від норми |
| Damage taken ratio | Відношення отриманого урону до максимального HP | 0.2-0.8 |
| Items used | Кількість використаних предметів | 0-10 |
| Retry count | Кількість повторних спроб | 0-3 |
| Session length | Довжина ігрової сесії | 15-60 хвилин |
| Drop-off points | Точки виходу з гри | по рівнях |
Ключові метрики ефективності: session length vs control group (мета +15–25%), day 7 retention, completion rate, negative reviews про складність (зниження на 20–40%), rage-quit events (-30%).
Приклад RL середовища для DDA
class DDAEnv(gym.Env):
"""Середовище для навчання DDA агента"""
def __init__(self):
self.observation_space = spaces.Box(
low=0, high=1,
shape=(12,),
dtype=np.float32
)
self.action_space = spaces.Box(
low=np.array([0.5, 0.5, 0.5, 0.5]),
high=np.array([1.5, 1.5, 1.5, 1.5]),
dtype=np.float32
)
def step(self, action):
self.game.set_difficulty_params(action)
player_stats = self.game.advance()
obs = self._extract_obs(player_stats)
reward = self._compute_flow_reward(player_stats)
return obs, reward, False, False, {}
def _compute_flow_reward(self, stats):
target_death_rate = 0.15
target_completion = 0.75
target_time_ratio = 1.0
r = 0
r -= abs(stats['death_rate'] - target_death_rate) * 5
r -= abs(stats['completion_rate'] - target_completion) * 3
r += stats['session_continued'] * 2
return r
Ми використовуємо GAE (Generalized Advantage Estimation) для зменшення дисперсії оцінки та entropy bonus для заохочення дослідження.
Порівняння підходів: rule-based vs RL-based
| Параметр | Rule-based DDA | RL-based DDA |
|---|---|---|
| Точність | Середня (фіксовані пороги) | Висока (адаптація під гравця) |
| Помітність | Може бути різкою | Плавні зміни |
| Час розробки | 1-2 тижні | 4-8 тижнів |
| Retention (приріст) | +5-10% | +15-25% — в 2-3 рази більше |
| Rage-quit зниження | -10% | -30% — в 3 рази ефективніше |
RL-based DDA в 3 рази ефективніше за rule-based за зниженням rage-quit.
Профілювання гравця
Різні гравці хочуть різного досвіду. Ми будуємо модель гравця:
class PlayerModel:
def __init__(self):
self.skill_estimate = 0.5
self.frustration_tolerance = 0.5
self.preferred_style = None
def update(self, player_events):
if player_events['cleared_hard_section']:
self.skill_estimate = min(1.0, self.skill_estimate + 0.05)
if player_events['deaths_this_session'] > 5:
self.skill_estimate = max(0.0, self.skill_estimate - 0.02)
if player_events['stealth_actions'] > player_events['combat_actions']:
self.preferred_style = 'stealth'
Модель оновлюється після кожної події та впливає на ваги нагороди агента.
Реалізація в Unity
Інтегруємо навчену модель через ONNX Runtime в Unity:
Реалізація DDA в Unity (ONNX Runtime)
public class DDAManager : MonoBehaviour
{
private float[] difficultyParams = {1.0f, 1.0f, 1.0f, 1.0f};
private ONNXInferenceSession policyModel;
void Update()
{
if (Time.frameCount % 300 == 0)
{
float[] obs = GatherPlayerStats();
float[] newParams = policyModel.Run(obs);
ApplyGradualChange(difficultyParams, newParams);
ApplyToGameSystems(difficultyParams);
}
}
void ApplyToGameSystems(float[] p)
{
EnemyManager.SetHPMultiplier(p[0]);
EnemyManager.SetDamageMultiplier(p[1]);
SpawnManager.SetSpawnRate(p[2]);
LootManager.SetDropRate(p[3]);
}
}
Процес та терміни
- Аналітика: аудит поточних механік, збір даних (1 тиждень)
- Проектування: вибір архітектури (rule-based/RL), розробка функції нагороди (1 тиждень)
- Реалізація: навчання моделі, інтеграція у ваш рушій (Unity, Unreal, custom) (2-4 тижні)
- Тестування: A/B тест на реальних гравцях (1-2 тижні)
- Документація та навчання команди
- Підтримка після запуску
Що входить у роботу
- Документація інтеграції: опис архітектури, API, інструкції для розробників
- Доступ до репозиторію з кодом моделі та інтеграцією
- Навчання команди: воркшоп з використання та налаштування DDA
- Технічна підтримка: 3 місяці після запуску
Базова rule-based DDA — від 1 тижня (від $5000). Повноцінна RL-based DDA з profiling та A/B тестом — від 6 до 8 тижнів (від $15 000). Вартість розраховується індивідуально — пишіть, оцінімо ваш проєкт за 2 дні.







