12 — Діагностика та валідація¶
🇬🇧 English | 🇺🇦 Українська
Рівні повідомлень¶
FFuzzyDiagnostic має Severity, текст і, за потреби, RuleIndex.
| Рівень | Значення |
|---|---|
Info |
Корисна інформація без проблеми |
Warning |
Обчислення завершилося, але використано fallback або щось пропущено |
Error |
Система не може вважатися коректно обчисленою |
ToString() і Blueprint-вузол Fuzzy Diagnostic To String повертають готовий текст на кшталт Error: unknown set (rule 3).
Валідація Data Asset¶
UFuzzySystemAsset::IsDataValid інтегрований у стандартну валідацію контенту Unreal. Помилки та попередження потрапляють у Message Log під час перевірки контенту. У коді та Blueprint використовуйте Validate System.
Load Preset виконує валідацію до зміни асета. Save To JSON також не експортує систему з помилками.
Типові помилки¶
Некоректний діапазон¶
Max має перевищувати Min, обидві межі мають бути скінченними. Виправте діапазон перед налаштуванням форм.
Повторне або некоректне ім’я¶
Імена змінних і множин мають бути валідними ідентифікаторами. Не використовуйте пробіли, дефіси або однакове ім’я для входу й виходу. Імена зіставляються без урахування регістру, тож Low і low в однієї змінної вважаються дублікатом.
Зарезервовані ключові слова (IF, IS, NOT, AND, OR, THEN, WITH) проходять цю перевірку, але на них не можна послатися з правила. Якщо правило падає з «Expected a variable name but found 'Or'» — проблема в імені змінної, а не в правилі.
Невідома змінна чи множина у правилі¶
Перевірте написання авторських імен — регістр не має значення, решта символів має. Передумова повинна посилатися на input, наслідок — на output.
Змішані AND та OR¶
Одне правило не підтримує обидва сполучники. Розбийте логіку на кілька правил.
Немає правила для виходу¶
Додайте хоча б одне правило, наслідок якого пише в кожний потрібний вихід.
Жодне правило не спрацювало¶
Це runtime-попередження, яке створює кожен метод дефазифікації. Система повертає середину вихідного діапазону. Перевірте проміжки між вхідними множинами та сценарій на вкладці Inference.
Частковий preview¶
Редактор може показати результати правил, які вдалося скомпілювати, навіть коли інші правила мають помилки. Такий результат позначається як partial preview. Він потрібен для діагностики, але bSuccess лишається false.
Runtime-перевірка¶
const FFuzzyInferenceResult Result = FuzzyLogic->Evaluate();
if (!Result.bSuccess)
{
for (const FFuzzyDiagnostic& Diagnostic : Result.Diagnostics)
{
UE_LOG(LogTemp, Warning, TEXT("%s"), *Diagnostic.ToString());
}
return;
}
Якщо структура системи відома та перевірена під час авторингу, не потрібно виконувати окрему валідацію кожного кадру. Компонент кешує компіляцію.
Що перевіряти перед випуском¶
- усі Data Assets проходять content validation;
- крайні та середні входи перевірені у Inference;
- кожен вихід має правила;
- немає неочікуваних fallback-попереджень;
- JSON-пресети проходять round-trip;
- game-код перевіряє
bSuccess, якщо система може бути зовнішньою або змінною.