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

Лабораторна робота 22. Як обрати між кількома добрими рішеннями

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

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

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

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

1. Ситуація

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

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

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

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

  • домінування;
  • Парето-множина;
  • нормування критеріїв;
  • зважена сума;
  • метод \(\varepsilon\)-обмеження;
  • абсолютний і відносний допуск;

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

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

Парето-підхід спочатку не просить вибрати «найкращу» альтернативу. Він лише відкидає ті, для яких існує інша альтернатива не гірша за всіма критеріями і краща хоча б за одним.

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

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

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

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

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

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

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

Не починайте зі зваженої суми. Спочатку знайдіть доміновані альтернативи. Потім нормуйте критерії, бо гривні, години та частка надійності мають різні масштаби.

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

  1. Чому спочатку треба відкинути доміновані альтернативи, а вже потім вводити ваги?
  2. Чому нормування критеріїв важливе, якщо один вимірюється у гривнях, а інший у годинах?

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

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

Крок 1. Прочитати три критерії

Зафіксуйте напрям кожного: вартість і час мінімізуємо, надійність максимізуємо.

Крок 2. Реалізувати перевірку домінування

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

Крок 3. Побудувати Парето-множину

Відкиньте доміновані альтернативи й поясніть один конкретний приклад домінування.

Крок 4. Нормувати критерії

Переведіть усі критерії до порівнянного масштабу з однаковим напрямом «менше — краще».

Крок 5. Застосувати зважену суму

Використайте ваги свого варіанта й знайдіть рекомендовану Парето-альтернативу.

Крок 6. Застосувати \(\varepsilon\)-обмеження

Відфільтруйте альтернативи за заданою межею одного критерію та оптимізуйте інший.

Крок 7. Зробити чисельний аудит

Змініть одиниці одного критерію та додайте мале збурення. Покажіть, що правильне нормування й допуски не дають випадкової зміни висновку.

7. Python

Використовуйте: NumPy, Pandas, Matplotlib.

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

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

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

Змінна Що записати
pareto_indices індекси Парето-альтернатив, 1..N
dominated_indices індекси домінованих альтернатив, 1..N
normalized_values матриця нормованих втрат 0..1; менше — краще
weighted_choice номер Парето-альтернативи за зваженою сумою
epsilon_choice номер Парето-альтернативи з найбільшою надійністю серед time<=epsilon_time
audit_result словник з ключами finite, unit_rescale_ok, weights_ok

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

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

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

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

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

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

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

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

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