Лабораторна робота 17. Як розподілити обмежений ресурс між чотирма каналами
Коротко про роботу
Ви розподілите обмежений ресурс між чотирма каналами так, щоб сумарні втрати були мінімальними. Потрібно скласти систему Лагранжа, знайти розв’язок і пояснити, що означає множник для зміни загального ресурсу.
Ця робота виконується після лекцій 24. Вона спирається лише на матеріал, який уже пройдено до цього заняття.
▶ Відкрити робочий зошит у браузері
1. Ситуація
Чотири технологічні канали мають бажані рівні ресурсу. Водночас загального ресурсу не вистачає, тому всі бажані значення виконати неможливо. Відхилення для різних каналів має різну ціну. Треба знайти найменш болісний компроміс.
Головне питання роботи: Як розподілити дефіцит між каналами і що множник Лагранжа говорить про ціну ще однієї одиниці ресурсу?
2. Що вже потрібно знати
Перед початком достатньо розуміти такі речі з попередніх лекцій:
- рівність як обмеження;
- функція Лагранжа;
- стаціонарність;
- множник Лагранжа;
Якщо якийсь пункт забувся, поверніться до відповідної лекції. У цій роботі нова теорія не вводиться без пояснення.
3. Як перейти від ситуації до математики
Ресурсу не вистачає, тому неможливо поставити всі канали точно в бажані значення. Множник Лагранжа допомагає знайти баланс між ціною відхилень та єдиним загальним обмеженням.
Спочатку сформулюйте зміст задачі словами. Лише після цього записуйте формули й код. Це зменшує ризик правильно порахувати не ту задачу.
4. Ваш варіант
У notebook змініть тільки один рядок:
STUDENT_X = 1 # поставте свій номер 1..30
Номер варіанта змінює числа, але не дає готового способу розв’язання. Основна частина роботи однакова для всіх: побудувати правильну модель, зробити потрібний вибір і перевірити результат.
Після запуску комірки «Дані вашого варіанта» notebook покаже всі числа, потрібні для роботи. Вручну підставляти STUDENT_X у формули не потрібно. Спочатку подивіться на отримані дані та підпишіть, що означає кожен масив або параметр.
5. Де тут треба подумати
Не треба вгадувати, кому «урізати» ресурс. Умова стаціонарності сама встановлює баланс між штрафами відхилень. Після розв’язання змініть загальний ресурс трохи і перевірте зміст множника чисельно.
Перед тим як писати код, дайте собі відповідь на два питання:
- Чому множник Лагранжа можна тлумачити як чутливість оптимальної цілі до ресурсу?
- Як чисельно перевірити це тлумачення малим зміщенням R?
Відповідь не треба робити довгою. Достатньо 1–2 речень на кожне питання. Це допомагає перевірити, що ви розумієте задачу до запуску обчислень.
6. Послідовність роботи
Крок 1. Записати ціль
Поясніть, чому великий \(w_i\) означає, що відхиляти канал \(i\) дорожче.
Крок 2. Побудувати Лагранжіан
Додайте рівність \(\sum x_i=R\) з одним множником \(\lambda\).
Крок 3. Отримати систему рівнянь
Запишіть чотири умови стаціонарності плюс одну умову ресурсу.
Крок 4. Розв’язати блокову систему
Сформуйте матрицю і використайте np.linalg.solve.
Крок 5. Перевірити баланс
Переконайтеся, що сума компонент дорівнює \(R\) і стаціонарність має малу нев’язку.
Крок 6. Перевірити чутливість
Збільште \(R\) на мале \(\Delta R\), розв’яжіть задачу ще раз і порівняйте зміну оптимальної цілі з прогнозом через \(\lambda\).
7. Python
Використовуйте: NumPy.
Не намагайтеся вмістити всю роботу в одну велику комірку. Зручніше мати окремі невеликі блоки: дані → модель → обчислення → перевірка → висновок. Назви змінних повинні показувати їхній зміст.
8. Локальна самоперевірка
У робочому notebook наперед створені назви змінних, які читає автоматична перевірка. Не перейменовуйте їх. Ви самі пишете спосіб розв’язання, але фінальний результат записуєте у визначені змінні.
| Змінна | Що записати |
|---|---|
x_solution |
оптимальний розподіл чотирьох ресурсів |
lambda_value |
множник для L=f+lambda*(sum(x)-R) |
objective_value |
0.5sum(w(x-t)^2) |
equality_residual |
sum(x_solution)-R |
stationarity_residual |
max abs(w*(x-t)+lambda) |
sensitivity_actual |
f(R+dR)-f(R) |
sensitivity_predicted |
-lambda_value*dR |
Після виконання всіх кроків запустіть комірку «Локальна самоперевірка». Для вашого STUDENT_X вона читає наперед обчислені контрольні значення та порівнює з ними всі результатні змінні з таблиці вище. Числові значення порівнюються з указаним допуском; логічні, текстові та дискретні результати — точно. Для множин індексів порядок елементів не має значення, а для напрямів власних векторів враховується еквівалентність v та -v.
✅ OKозначає, що всі результатні змінні збігаються з контрольними значеннями в межах заданих допусків.❌означає, що біля конкретної змінної буде вказано, яке порівняння не пройдено.
Самоперевірка не замінює короткий предметний висновок: після OK поясніть своїми словами, що означає отриманий результат у ситуації цієї лабораторної.
9. Що має бути у звіті
Звіт не повинен бути переписаним notebook. Покажіть вихідні дані, ключові проміжні результати, перевірки та короткий висновок своїми словами. У звіті обов’язково мають бути:
- номер вашого варіанта;
- вихідні дані, які реально використовувалися;
- ключовий проміжний результат, на якому ґрунтується рішення;
- фінальний результат;
- незалежна числова перевірка;
- коротке пояснення, що цей результат означає в початковій прикладній ситуації.
Наприкінці дайте відповідь на головне питання лабораторної одним коротким абзацом.
10. Контрольні питання
- Що означає великий множник Лагранжа за модулем?
Показати відповідь
Мала зміна доступного ресурсу може помітно змінити оптимальне значення цілі.- Навіщо після розв’язання перевіряти суму компонент?