Перейти до змісту

Лабораторна робота 16. Які обмеження реально стримують план

Коротко про роботу

Ви проаналізуєте кілька планів відносно системи обмежень. Потрібно обчислити запаси, розрізнити допустимі, активні та порушені обмеження й правильно використати числовий tolerance біля межі.

Ця робота виконується після лекцій 23. Вона спирається лише на матеріал, який уже пройдено до цього заняття.

▶ Відкрити робочий зошит у браузері

1. Ситуація

Два зарядні модулі мають бажані потужності, але електромережа задає кілька обмежень. Деякі плани безпечні із запасом, деякі лежать майже на межі, а один порушує ліміт зовсім трохи.

Головне питання роботи: Як відрізнити активне обмеження від маленького числового порушення і які межі справді визначають оптимальний план?

2. Що вже потрібно знати

Перед початком достатньо розуміти такі речі з попередніх лекцій:

  • допустима точка;
  • значення обмеження \(g_i(x)\);
  • запас до межі;
  • активне обмеження;
  • числовий допуск;

Якщо якийсь пункт забувся, поверніться до відповідної лекції. У цій роботі нова теорія не вводиться без пояснення.

3. Як перейти від ситуації до математики

Обмеження зручно записати так, щоб допустима точка давала \(g_i(x)\le0\). Тоді позитивне значення означає порушення, значення близько до нуля — межу.

Спочатку сформулюйте зміст задачі словами. Лише після цього записуйте формули й код. Це зменшує ризик правильно порахувати не ту задачу.

4. Ваш варіант

У notebook змініть тільки один рядок:

STUDENT_X = 1  # поставте свій номер 1..30

Номер варіанта змінює числа, але не дає готового способу розв’язання. Основна частина роботи однакова для всіх: побудувати правильну модель, зробити потрібний вибір і перевірити результат.

Після запуску комірки «Дані вашого варіанта» notebook покаже всі числа, потрібні для роботи. Вручну підставляти STUDENT_X у формули не потрібно. Спочатку подивіться на отримані дані та підпишіть, що означає кожен масив або параметр.

5. Де тут треба подумати

Число на кшталт 2e-10 не можна трактувати без допуску. Спочатку зафіксуйте правило класифікації, потім застосовуйте його однаково до кандидатних планів і до оптимуму.

Перед тим як писати код, дайте собі відповідь на два питання:

  1. Чому число 1e-10 не можна автоматично назвати порушенням?
  2. Як активний набір пояснює, які обмеження реально формують знайдений план?

Відповідь не треба робити довгою. Достатньо 1–2 речень на кожне питання. Це допомагає перевірити, що ви розумієте задачу до запуску обчислень.

6. Послідовність роботи

Крок 1. Записати всі обмеження в одному форматі

Перетворіть їх до \(g_i(x)\le0\) і підпишіть фізичний зміст.

Крок 2. Вибрати числовий допуск

Наприклад, tol=1e-8. Запишіть правило: violated, active, inactive.

Крок 3. Класифікувати готові плани

Для кожної точки порахуйте всі \(g_i(x)\) і поясніть її статус.

Крок 4. Знайти оптимальний план

Використайте SLSQP для квадратичної цілі.

Крок 5. Повторно перевірити обмеження

Не довіряйте лише success: перераховуйте \(g_i(x^*)\) самостійно.

Крок 6. Знайти активний набір

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

7. Python

Використовуйте: NumPy, SciPy minimize(method="SLSQP").

Не намагайтеся вмістити всю роботу в одну велику комірку. Зручніше мати окремі невеликі блоки: дані → модель → обчислення → перевірка → висновок. Назви змінних повинні показувати їхній зміст.

8. Локальна самоперевірка

У робочому notebook наперед створені назви змінних, які читає автоматична перевірка. Не перейменовуйте їх. Ви самі пишете спосіб розв’язання, але фінальний результат записуєте у визначені змінні.

Змінна Що записати
tol явний числовий допуск, наприклад 1e-8
candidate_classification для кожної з 3 точок список 4 статусів: "неактивне", "активне", "порушене"
x_solution оптимальна точка
objective_value f(x_solution)
constraint_values g(x_solution)
active_constraints номери активних обмежень 1..4
max_violation max(max(g(x_solution),0))

Після виконання всіх кроків запустіть комірку «Локальна самоперевірка». Для вашого STUDENT_X вона читає наперед обчислені контрольні значення та порівнює з ними всі результатні змінні з таблиці вище. Числові значення порівнюються з указаним допуском; логічні, текстові та дискретні результати — точно. Для множин індексів порядок елементів не має значення, а для напрямів власних векторів враховується еквівалентність v та -v.

  • ✅ OK означає, що всі результатні змінні збігаються з контрольними значеннями в межах заданих допусків.
  • означає, що біля конкретної змінної буде вказано, яке порівняння не пройдено.

Самоперевірка не замінює короткий предметний висновок: після OK поясніть своїми словами, що означає отриманий результат у ситуації цієї лабораторної.

9. Що має бути у звіті

Звіт не повинен бути переписаним notebook. Покажіть вихідні дані, ключові проміжні результати, перевірки та короткий висновок своїми словами. У звіті обов’язково мають бути:

  1. номер вашого варіанта;
  2. вихідні дані, які реально використовувалися;
  3. ключовий проміжний результат, на якому ґрунтується рішення;
  4. фінальний результат;
  5. незалежна числова перевірка;
  6. коротке пояснення, що цей результат означає в початковій прикладній ситуації.

Наприкінці дайте відповідь на головне питання лабораторної одним коротким абзацом.

10. Контрольні питання

  1. Чим активне обмеження відрізняється від порушеного?
Показати відповідь Для активного обмеження значення близьке до нуля в межах допуску. Порушене має позитивне значення, яке виходить за допуск.
  1. Навіщо задавати один допуск до класифікації?
Показати відповідь Щоб однакові за масштабом числові похибки не трактувалися по-різному в різних обмеженнях або точках.