ЛР-03: Бюджет логистической готовности#
Student notebook: military 01#
Этот notebook предназначен для самостоятельного анализа.
Готовых численных ответов и заполненного sensitivity-разбора здесь нет.
1. Зачем нужен этот кейс#
Ресурсы нужно распределить между четырьмя направлениями логистической готовности.
После выполнения работы студент должен уметь:
переносить duality-анализ в военный ресурсный сценарий;
искать реальные узкие места в системе обеспечения;
проверять сильную двойственность численно;
объяснять, почему одна программа вытесняет другую.
2. Исходные данные#
Ограничения ресурсов#
Ресурс |
Лимит |
|---|---|
Бюджет |
94 |
Личный состав |
56 |
Техническая ёмкость |
48 |
Программы#
Программа |
Эффект |
Бюджет |
Трудозатраты |
Операционная ёмкость |
|---|---|---|---|---|
Резерв мобильных складов |
86 |
34 |
16 |
15 |
Подготовка водителей снабжения |
72 |
22 |
18 |
10 |
Комплекты перегрузочного оборудования |
78 |
28 |
14 |
13 |
Усиление распределительных узлов |
93 |
46 |
24 |
21 |
3. Что нужно сделать#
Запишите прямую модель через переменные масштабов программ.
Подготовьте
c,A_ub,b_ub,boundsдляlinprog.Определите активные ограничения и запас ресурса.
Кратко запишите двойственную модель.
Проведите минимум два сценария по
bи один сценарий поc.Сравните прогноз по теневой цене с фактическим пересчётом.
import numpy as np
from scipy.optimize import linprog
effects = np.array([86, 72, 78, 93], dtype=float)
A_ub = np.array([[34, 22, 28, 46], [16, 18, 14, 24], [15, 10, 13, 21]], dtype=float)
b_ub = np.array([94, 56, 48], dtype=float)
bounds = [(0, 1)] * len(effects)
print('Число программ =', len(effects))
print('Число ресурсных ограничений =', len(b_ub))
4. Шаблон для самостоятельной сборки решения#
Сначала решите прямую задачу, потом переходите к binding/slack, dual и sensitivity.
# TODO: подготовьте задачу максимизации через минимизацию отрицательной цели.
c = None
result = None
shadow_prices = None
slack = None
# TODO: после своей попытки решите модель и заполните анализ.
# result = linprog(c, A_ub=A_ub, b_ub=b_ub, bounds=bounds, method='highs')
# shadow_prices = -result.ineqlin.marginals
# slack = result.slack
5. Что должно быть в отчёте#
Прямая постановка задачи.
Оптимальный план по программам.
Таблица активных ограничений и запасов.
Таблица теневых цен ресурсов.
Проверка сильной двойственности.
Минимум два сценария по
bи один поc.
6. Контрольный чек-лист#
[ ] Я показал, какие ограничения стали binding.
[ ] Я осмысленно интерпретировал shadow prices.
[ ] Я сравнил прогноз и фактический пересчёт.
[ ] Я сформулировал управленческий вывод по самому дефицитному ресурсу.