Анализ чувствительности в линейном программировании

Что такое анализ чувствительности? 🧐

Представьте, что вы построили идеальный бизнес-план на основе математической модели. Но мир меняется: цены на сырье растут, спрос падает, появляются новые конкуренты. Анализ чувствительности — это ваш супер-навык, который позволяет понять, как такие изменения повлияют на ваше оптимальное решение. Он отвечает на вопрос: «Насколько "чувствительно" мое решение к изменениям в исходных данных?»

💡 Простыми словами: это проверка вашего плана на прочность. Мы смотрим, останется ли он лучшим, если условия немного (или даже сильно) поменяются.

Базовые концепции: с чего начать

В основе лежит симплекс-метод и его финальная таблица. Именно из нее мы будем черпать всю необходимую информацию. Главное, что нас интересует:

  • Диапазоны устойчивости для коэффициентов целевой функции (Cj). В каких пределах можно менять цены или издержки, чтобы текущее решение оставалось оптимальным?
  • Диапазоны устойчивости для правых частей ограничений (bi). Насколько можно увеличить или уменьшить доступные ресурсы (бюджет, материалы, время), чтобы "теневая цена" ресурса оставалась неизменной?

🎯 Ключевой вывод: анализ чувствительности позволяет принимать обоснованные решения без решения задачи с нуля каждый раз!

Анализ коэффициентов целевой функции (Cj)

Допустим, мы максимизируем прибыль: Z = 3x1 + 5x2. Цена товара x2 может колебаться. Нас интересует, при какой новой цене производство товара x2 все еще будет выгодным.

Алгоритм для одного коэффициента Ck (для переменной xk):

  1. Найдите финальную симплекс-таблицу.
  2. Для каждой небазисной переменной вычислите допустимое изменение ΔCk, при котором ее оценка (Zj - Cj) остается неотрицательной (для максимизации).
  3. Диапазон для Ck будет: Текущее_Ck - ΔCk_down ≤ Ck_new ≤ Текущее_Ck + ΔCk_up

Пример: анализ коэффициентов целевой функции

Условие: Целевая функция: Z = 5x1 + 4x2 → max. В финальной симплекс-таблице оценки для небазисных переменных (Zj - Cj) равны 0 и 1.5 для x1 и x2 соответственно. Найдите диапазон для коэффициента C1 (перед x1).

Решение:

  1. Пусть новый коэффициент будет C1_new = 5 + Δ.
  2. Поскольку x1 является базисной переменной, изменение C1 повлияет на оценки всех небазисных переменных.
  3. Оценка для одной из небазисных переменных в таблице записана как 1.5 - 0.5 * Δ ≥ 0.
  4. Решаем неравенство: 1.5 - 0.5Δ ≥ 0-0.5Δ ≥ -1.5Δ ≤ 3.
  5. Диапазон для C1: 5 - ∞ ≤ C1_new ≤ 5 + 3C1_new ≤ 8.

Вывод: цена первого товара может быть не выше 8, чтобы текущий план выпуска оставался оптимальным.


Анализ правых частей ограничений (bi) 📊

Этот анализ показывает, как изменение количества доступного ресурса (например, часов работы или килограммов сырья) влияет на значение целевой функции.

Алгоритм для одного ограничения с правой частью bk:

  1. Найдите финальную симплекс-таблицу.
  2. В столбце для переменной «запас» (или в столбце правых частей) найдите значения для базисных переменных.
  3. Для каждого значения вычислите, при каком изменении Δbk это значение остается неотрицательным.
  4. Диапазон для bk будет: Текущее_bk - Δbk_down ≤ bk_new ≤ Текущее_bk + Δbk_up

📘 Теневая цена (Shadow Price): Это скорость изменения целевой функции при увеличении правой части ограничения на единицу. В рамках диапазона устойчивости теневая цена постоянна.

Пример: анализ правых частей

Условие: В задаче с ограничением 2x1 + x2 ≤ 100 (трудовые часы), финальная симплекс-таблица показывает, что значения базисных переменных равны 20 и 30. Найдите диапазон для ресурса b1 = 100.

Решение:

  1. Пусть новый ресурс будет 100 + Δ.
  2. Новые значения базисных переменных: 20 + 0.2Δ ≥ 0 и 30 - 0.3Δ ≥ 0.
  3. Решаем систему неравенств:
    • Из первого: Δ ≥ -100 (так как 20 + 0.2Δ ≥ 0Δ ≥ -100)
    • Из второго: Δ ≤ 100 (так как 30 - 0.3Δ ≥ 0Δ ≤ 100)
  4. Диапазон для b1: 100 - 100 ≤ b1_new ≤ 100 + 1000 ≤ b1_new ≤ 200.

Вывод: количество трудовых часов можно уменьшить до 0 или увеличить до 200, и при этом «теневая цена» этого ресурса не изменится.

Скрыть рекламу навсегда

🎥 YouTube: программирование простым языком

Канал, где я спокойно и по шагам объясняю сложные темы — без заумных терминов и лишней теории.

Подходит, если раньше «не заходило», но хочется наконец понять.

▶️ Смотреть курсы на YouTube