МатВектор

Command Palette

Search for a command to run...

♟️ Теория игр

Симплекс-метод или транспортная задача: что и когда применять

Симплекс-методТранспортная задача

Коротко: Транспортная задача — частный случай линейного программирования с матрицей из нулей и единиц: циклы перераспределения и потенциалы решают её быстрее и проще общего симплекса. Общий симплекс возвращают, когда появляются нецелые мощности, фиксированные маршруты и прочие ограничения сверх баланса.

План на семестр Вердикт: с чего начать

Задача в одну строку: два склада с запасами 30 и 40 тонн, три магазина с потребностями 20, 25 и 25, тарифы перевозки — таблица два на три. Можно садиться и решать симплексом: шесть переменных, пять ограничений баланса, час аккуратной возни со столбцами отношений. А можно заметить структуру — и закрыть задачу четырьмя клетками транспортной таблицы, вообще без симплексной механики. Разберём, почему здесь работает укороченный путь, посчитаем два стартовых плана (140 и 200 за один и тот же груз) и честно скажем, когда без общего симплекса не обойтись.

Рамка общая: транспортная задача — частный случай линейного программирования, а не отдельная наука. Формулировка:

— тариф перевозки от поставщика потребителю , — объём, — запасы, — потребности; суммы по строкам и столбцам фиксированы

Матрица ограничений здесь из нулей и единиц: каждая переменная входит ровно в два уравнения — баланс своей строки и своего столбца. Уравнений m + n, но одно из них лишнее: сумма запасов равна сумме потребностей, поэтому ранг равен m + n − 1, и базисный план несёт ровно m + n − 1 заполненных клеток. Для нашей задачи 2 + 3 − 1 = 4. Эта вырожденность — не дефект, а структура, которую спец-алгоритм использует на полную; общий алгоритм — в уроке симплекс-метод, частный — в уроке транспортная задача.

КритерийОбщий симплексТранспортная задача
Форма ограниченийлюбая матрица: дробные коэффициенты, любые знакиматрица из нулей и единиц, балансы строк и столбцов
Размер базисаm переменных при m ограниченияхm + n − 1 клеток при m·n тарифах
Шаг алгоритмавыбор вводимого столбца, пересчёт всей таблицыцикл перераспределения: плюс-минус по замкнутому маршруту
Оценки ценноститеневые цены из двойственной задачипотенциалы и — те же цены в табличной упаковке
Арифметикастолбцы отношений, ведущий элементсложение и вычитание в клетках
Когда выбираютпроизвольные задачи ЛПперевозки, распределение, назначение ресурсов
Транспортный алгоритм — тот же симплекс, переписанный под таблицу перевозок

Почему специальный алгоритм обыгрывает общий#

Шаг симплекса — выбрать вводимую переменную, найти уходящую, пересчитать таблицу. В транспортной задаче то же самое выглядит проще. Базисные клетки образуют дерево, и любая свободная клетка достраивает его до единственного цикла: по циклу пускают перераспределение — прибавляют θ в одних клетках, вычитают в других, ограничивает сдвиг самая скудная из убывающих. Ввод переменной, вывод переменной и новый опорный план — за один проход по таблице, без столбцов отношений.

Проверка оптимальности тоже упрощается до сложения. В симплексе теневые цены достают из двойственной задачи — её разбор в уроке двойственность в ЛП; в транспортной таблице те же числа называют потенциалами: для базисной клетки потенциал строки плюс потенциал столбца дают тариф, . Один потенциал фиксируют нулём, остальные вычитаются по цепочке. Кто решал матричную игру через линейное программирование — узнаёт ту же двойственную кухню в профиль.

Стартовый план: минимальный элемент против северо-западного угла#

Любому методу потенциалов нужен стартовый опорный план с m + n − 1 заполненными клетками. Классических способа два. Северо-западный угол — механический: заполняем таблицу с левого верхнего угла, не глядя на тарифы. Метод минимального элемента — жадный: каждый раз везём по самому дешёвому доступному тарифу. Ни тот ни другой не обязан дать оптимум — они дают точку старта. Но качество старта экономит циклы перераспределения. Считаем оба на нашей задаче.

  1. Шаг 1: самый дешёвый тариф во всей таблице — 1, клетка второй строки и третьего столбца. Перевозим всё, что можно: min(40, 25) = 25. Потребитель 3 закрыт целиком, у второго поставщика остаток 15.
  2. Шаг 2: из оставшихся клеток дешевле всех тариф 2 — первая строка, второй столбец: min(30, 25) = 25. Потребитель 2 закрыт, у первого поставщика остаток 5.
  3. Шаг 3: далее самый дешёвый доступный тариф 3 — вторая строка, первый столбец: min(15, 20) = 15. Второй поставщик исчерпан, у первого потребителя недобор 5.
  4. Шаг 4: последняя клетка — тариф 4, первая строка, первый столбец: min(30, 5) = 5. Все запасы распределены, все потребности закрыты, заполнено ровно 4 клетки.
  5. Шаг 5: стоимость: 5·4 + 25·2 + 15·3 + 25·1 = 20 + 50 + 45 + 25 = 140.
Потребитель 1Потребитель 2Потребитель 3Запасы
Поставщик 15 (тариф 4)25 (тариф 2)—30
Поставщик 215 (тариф 3)—25 (тариф 1)40
Потребности20252570
Опорный план методом минимального элемента: 4 базисные клетки, стоимость 140
  1. Шаг 1: клетка (1, 1), тариф 4: min(30, 20) = 20. Потребитель 1 закрыт, у поставщика 1 остаток 10.
  2. Шаг 2: двигаемся вправо, клетка (1, 2), тариф 2: min(10, 25) = 10. Поставщик 1 исчерпан, у потребителя 2 остаток 15.
  3. Шаг 3: спускаемся вниз, клетка (2, 2), тариф 5: min(40, 15) = 15. Потребитель 2 закрыт, у поставщика 2 остаток 25.
  4. Шаг 4: клетка (2, 3), тариф 1: min(25, 25) = 25. Таблица закрыта.
  5. Шаг 5: стоимость: 20·4 + 10·2 + 15·5 + 25·1 = 80 + 20 + 75 + 25 = 200.
Потребитель 1Потребитель 2Потребитель 3Запасы
Поставщик 120 (тариф 4)10 (тариф 2)—30
Поставщик 2—15 (тариф 5)25 (тариф 1)40
Потребности20252570
Опорный план северо-западным углом: та же структура, стоимость 200

Разница — 140 против 200 — целиком заслуга выбора клеток: жадный метод повёз груз по дешёвым тарифам, механический — как пришлось. Проверьте суммы сами: по строкам 30 и 40, по столбцам 20, 25 и 25 — баланс сошёлся в обеих таблицах. Заметьте и это: клетку с самым дорогим тарифом 5 северо-западный угол загрузил пятнадцатью единицами, минимальный элемент — ни одной. На экзамене обычно просят оба плана и сравнение: разница в 60 единиц стоимости наглядно показывает, что стартовый план — это ещё не решение.

Проверка оптимальности: потенциалы u + v = c#

Механика проверки. Потенциалы вводятся для базисных клеток равенством : неизвестных m + n, независимых уравнений m + n − 1, поэтому один потенциал фиксируют нулём — обычно — и вычитают остальные. Для плана минимального элемента цепочка короткая:

равенства по четырём базисным клеткам; при получается , , ,

Теперь свободные клетки. Для минимизации план оптимален, когда в каждой свободной клетке сумма потенциалов не превосходит тарифа:

критерий оптимальности: превышение означает, что по циклу через эту клетку стоимость можно снизить

Подставляем. Клетка (1, 3): 0 + 2 = 2 ≤ 5 — запас 3. Клетка (2, 2): −1 + 2 = 1 ≤ 5 — запас 4. Обе свободные клетки прошли, значит план со стоимостью 140 оптимален: жадный старт здесь попал в цель с первого раза, перераспределений не понадобилось. Рассчитывать на такое всегда нельзя — минимальный элемент даёт хорошую точку старта, но проверка потенциалами обязательна в любом случае. И приятный факт для контроля: полный перебор всех допустимых планов этой маленькой задачи подтверждает, что дешевле 140 не бывает.

Связь с общим симплексом прямая. Потенциалы — те же двойственные переменные, теневые цены строк и столбцов; проверка — та же проверка знаков оценок, записанная в терминах таблицы. Экономия не в идее, а в объёме арифметики: вместо пересчёта столбцов отношений — вычитание в шести клетках и два коротких вектора.

Когда без общего симплекса не обойтись#

Транспортный аппарат работает, пока ограничения укладываются в схему «сумма по строке, сумма по столбцу, x ≥ 0». Добавьте что-то сверх — и задача перестаёт быть транспортной в узком смысле: циклы перераспределения больше не описывают допустимые шаги. Типовые поводы вернуться к общему симплекс-методу:

Что появилось в задачеПочему таблица ломаетсяЧто делать
нецелые мощности и потребностивычёркивание строк и столбцов становится кропотливым, вырожденные базисы множатсяобщий симплекс
минимальные объёмы по маршрутам ()нижняя граница сверх двух балансов на переменнуюобщий симплекс или сдвиг переменных
фиксированные маршруты ()равенство третье по счёту — таблица его не видитобщий симплекс
транзит через промежуточные пунктыпеременная получает третий баланссетевые постановки, общий симплекс
несколько продуктов на одной сетитариф зависит уже не только от клеткиобщий симплекс
Появилась строка в ограничениях сверх балансов — транспортная таблица уступает место симплексу
Проверь себя+15 XP

План минимального элемента дал стоимость 140. Как проверить, оптимален ли он?

Проверь себя+15 XP

Почему базисный план транспортной задачи несёт ровно m + n − 1 заполненную клетку?

Частые вопросы

Чем транспортная задача отличается от задачи, решаемой симплекс-методом?

Транспортная — частный случай линейного программирования с матрицей ограничений из нулей и единиц: каждая переменная сидит ровно в двух балансах, базис всегда m + n − 1. На этой структуре общий симплекс ускоряют: шаг становится циклом перераспределения, а теневые цены — потенциалами. Решать её общим симплексом можно, но это как вскапывать грядку экскаватором: получится, только медленнее.

Как построить опорное решение транспортной задачи?

Два классических способа: северо-западный угол — заполняем таблицу слева направо по остаткам, не глядя на тарифы; метод минимального элемента — каждый раз везём по самому дешёвому доступному тарифу. Оба дают ровно m + n − 1 заполненную клетку. В примере из статьи минимальный элемент дал 140 против 200 у северо-западного угла — при одинаковых запасах и потребностях.

Как проверить план транспортной задачи на оптимальность?

Методом потенциалов: для базисных клеток подберите и так, чтобы , зафиксировав один потенциал нулём. Затем для каждой свободной клетки проверьте . Всё прошло — план оптимален; нашлось превышение — пускайте цикл перераспределения через эту клетку: сдвиг ограничен самой скудной из убывающих клеток.

Когда транспортную задачу нельзя решать методом потенциалов?

Когда ограничения выходят за рамки балансов: минимальные или фиксированные объёмы по отдельным маршрутам, транзит через промежуточные узлы, несколько продуктов на одной сети, связка с производством. Матрица ограничений перестаёт быть из нулей и единиц — берите общий симплекс. Проверка простая: если модель не описывается строками и столбцами таблицы, потенциалы не подойдут.

Следующий шаг: возьмите ту же задачу и добавьте запрет «второй поставщик не возит первому потребителю» — и почувствуете, где кончается уютная таблица и начинается общий симплекс. Тренировка — в тренажёре по симплекс-методу и тренажёре по транспортной задаче; начала теории — в уроке введение в теорию игр, двойственные оценки под микроскопом — в уроке двойственность в ЛП, а точка, где ни один план не лучше, — в терминах седловая точка.