Как решить транспортную задачу: пошаговое решение
Дано: три склада с запасами 120, 100 и 80 т, три магазина со спросом 90, 130 и 80 т, тарифы перевозки одной тонны по строкам 2, 3, 6; 9, 7, 5; 4, 8, 10. Найти: план перевозок минимальной стоимости.
Запас равен спросу (300 = 300), значит модель закрытая и решается в два приёма: сначала любой допустимый опорный план, затем метод потенциалов, который улучшает его до оптимума. Ответ: минимальная стоимость перевозок 1210 ден. ед. при плане , , , , . Калькулятор сверху пересчитает обе таблицы под ваши запасы, спрос и тарифы.
Решение по шагам
Дано. Транспортная таблица: в клетках тарифы , справа запасы , снизу потребности .
| Склад | B1 | B2 | B3 | Запас |
|---|---|---|---|---|
| A1 | 2 | 3 | 6 | 120 |
| A2 | 9 | 7 | 5 | 100 |
| A3 | 4 | 8 | 10 | 80 |
| Спрос | 90 | 130 | 80 | 300 |
Найти: объёмы перевозок , при которых суммарная стоимость минимальна.
Шаг 1. Проверка баланса. Складываем запасы и потребности:
Суммы совпали, задача закрытая: фиктивных пунктов не нужно, можно строить план.
Шаг 2. Опорный план методом минимального элемента. Занимаем самую дешёвую свободную клетку и вывозим по ней максимум, который позволяют остатки запаса и спроса.
- Минимальный тариф . Кладём . Спрос B1 закрыт, у A1 осталось 30 т.
- Из оставшихся минимален . Кладём . Запас A1 исчерпан, у B2 осталось 100 т.
- Дальше минимален . Кладём . Спрос B3 закрыт, у A2 осталось 20 т.
- Минимален . Кладём . Запас A2 исчерпан, у B2 осталось 80 т.
- Осталась одна клетка: .
Стоимость опорного плана:
Шаг 3. Проверка на вырожденность. Занятых клеток должно быть ровно . У нас занято пять: (1,1), (1,2), (2,2), (2,3), (3,2). План невырожденный, метод потенциалов применим.
Шаг 4. Потенциалы строк и столбцов. Для каждой занятой клетки должно выполняться . Уравнений пять, неизвестных шесть, поэтому одно значение задаём произвольно: пусть .
Шаг 5. Оценки свободных клеток. Считаем для каждой незанятой клетки:
Оценка отрицательна: каждая тонна, переброшенная в клетку (3,1), удешевляет план на 3 ден. ед. Значит опорный план не оптимален.
Шаг 6. Цикл пересчёта. Из клетки (3,1) строим замкнутый цикл, все остальные вершины которого лежат в занятых клетках: (3,1) → (3,2) → (1,2) → (1,1) → (3,1). Расставляем знаки, начиная с плюса в клетке ввода: , , , .
Величина сдвига равна наименьшей перевозке в клетках со знаком минус:
Прибавляем 80 в клетках со знаком плюс и вычитаем в клетках со знаком минус:
Клетка (3,2) обнулилась и выходит из базиса, её место занимает (3,1). Новая стоимость:
Шаг 7. Проверка нового плана на оптимальность. Пересчитываем потенциалы для нового набора занятых клеток (1,1), (1,2), (2,2), (2,3), (3,1): , , , , , . Оценки свободных клеток:
Все оценки строго положительны, улучшить план больше нечем.
Ответ. Оптимальный план перевозок: , , , , , остальные перевозки нулевые. Минимальная стоимость ден. ед. Метод минимального элемента дал 1450, одна итерация потенциалов сэкономила 240 ден. ед., то есть около 17 % затрат.
| Склад | B1 | B2 | B3 | Вывезено |
|---|---|---|---|---|
| A1 | 10 | 110 | 0 | 120 |
| A2 | 0 | 20 | 80 | 100 |
| A3 | 80 | 0 | 0 | 80 |
| Получено | 90 | 130 | 80 | 300 |
Из чего состоит решение транспортной задачи
В общем виде дано поставщиков с запасами , потребителей с потребностями и тариф на перевозку единицы груза из пункта в пункт . Нужны объёмы перевозок, которые вывозят весь запас, закрывают весь спрос и стоят дешевле всего:
Формально это задача линейного программирования, но с особой структурой: все коэффициенты ограничений равны нулю или единице, поэтому симплекс-таблица вырождается в обычную таблицу перевозок. Отсюда схема решения из двух частей: первая даёт стартовый допустимый план, вторая его улучшает.
Стартовый план называют опорным: он занимает ровно клеток и соответствует базисному решению задачи ЛП. Способы его построить разобраны в статье про построение опорного плана; минимальный элемент здесь компромисс между скоростью и качеством стартовой точки.
Метод потенциалов отвечает на вопрос, выгодно ли пустить груз через пустующую клетку. Потенциалы и распределяют тариф каждого занятого маршрута между поставщиком и потребителем, а разность показывает, насколько клетка дороже такого справедливого тарифа: отрицательная разность значит, что клетка дешевле и в неё нужно направить груз. Разбор процедуры есть в статье про метод потенциалов.
Проверка ответа через двойственную задачу
Потенциалы с последнего шага это не служебные числа, а решение двойственной задачи, поэтому у ответа есть независимая проверка: стоимость оптимального плана обязана совпасть со значением двойственной целевой функции.
Сошлось с из прямого суммирования. Это следствие теоремы двойственности, а проверка занимает одну строку: если числа разошлись, ошибка либо в потенциалах, либо в плане.
Вторая проверка обязательна всегда: суммы по строкам итоговой таблицы должны дать запасы, суммы по столбцам потребности. В ответе , , по строкам и , , по столбцам.
Чем заменить метод минимального элемента
Опорный план строят и по-другому: от выбора зависит число итераций, но не ответ. Метод северо-западного угла не смотрит на тарифы и заполняет таблицу лесенкой от левой верхней клетки: на наших данных он даёт и вдобавок вырожденный план с нулевой перевозкой в клетке (3,2).
Метод Фогеля тратит время на подготовку: в каждой строке и столбце считают штраф, разность двух наименьших тарифов, и груз идёт туда, где штраф максимален. На этих же числах он даёт 1240 ден. ед., а при другом разрешении ничьей в штрафах попадает прямо в оптимум 1210. Если метод в задании не назван, минимальный элемент остаётся безопасным выбором: он короче Фогеля и ближе к оптимуму, чем северо-западный угол.
Открытая модель и вырожденный план
Первая ловушка: суммы запасов и спроса не равны, модель открытая. Её закрывают фиктивным пунктом с нулевыми тарифами. Если запас больше спроса на , добавляют фиктивного потребителя с потребностью , и остаток груза остаётся на складах; если больше спрос, добавляют фиктивного поставщика с запасом . Нулевые тарифы гарантируют, что фиктивные перевозки не изменят стоимость, а дальше задача решается как закрытая. Калькулятор сверху добавляет такой пункт сам и подсвечивает его серым.
Вторая ловушка: занятых клеток меньше . Так бывает, когда очередная перевозка исчерпывает сразу и запас строки, и потребность столбца, а уравнений для потенциалов становится меньше, чем нужно. Лечится это формально: в любую свободную клетку, не образующую замкнутого цикла с занятыми, ставят нулевую перевозку. Она считается занятой, добирает недостающее уравнение и на стоимость не влияет.
Частые ошибки
- Не проверяют баланс. Метод потенциалов работает только на закрытой модели: без фиктивного пункта план не сойдётся ни с запасами, ни со спросом.
- Считают опорный план ответом. Метод минимального элемента даёт допустимый, но обычно не оптимальный план: у нас 1450 против 1210. Без проверки оценок решение неполное.
- Забывают правило . При меньшем числе занятых клеток система для потенциалов недоопределена; нужна нулевая перевозка, а не «пропуск» неизвестного потенциала.
- Строят цикл через свободные клетки. Свободной в цикле может быть только клетка ввода, все остальные вершины обязаны быть занятыми.
- Берут по всем клеткам цикла. Сдвиг ограничивают только клетки со знаком минус: именно из них груз вычитается, а уйти в отрицательные перевозки нельзя.
- Останавливаются на первой отрицательной оценке. После пересчёта плана оценки считают заново: пока среди них есть отрицательная, решение не закончено.
FAQ
Всегда ли метод потенциалов сходится? Да, за конечное число шагов: каждая итерация уменьшает стоимость (в вырожденном случае меняет базис при той же стоимости), а базисных планов конечное число.
Что означает нулевая оценка свободной клетки? Что у задачи несколько оптимальных планов: введя груз в такую клетку, вы получите другой план той же стоимости. Достаточно указать один план и отметить, что решение не единственно.
Чем транспортная задача отличается от задачи о назначениях? Задача о назначениях это её частный случай: таблица квадратная, запасы и потребности равны единице. Её быстрее решает венгерский алгоритм, хотя потенциалы тоже дадут верный ответ.
Можно ли запретить перевозку по конкретному маршруту? Да, такой клетке ставят заведомо большой тариф, в учебниках его обозначают буквой M. Метод потенциалов обойдёт её стороной: оценка останется положительной.
Коротко
- Проверьте баланс: . Если суммы не равны, закройте модель фиктивным поставщиком или потребителем с нулевыми тарифами.
- Постройте опорный план методом минимального элемента и убедитесь, что занято ровно клеток; при нехватке добавьте нулевую перевозку.
- Найдите потенциалы из условия для занятых клеток, приняв .
- Посчитайте оценки для свободных клеток: все неотрицательны, план оптимален; иначе стройте цикл из клетки с самой отрицательной оценкой и сдвигайте по нему единиц.
- В задаче из условия опорный план стоит 1450 ден. ед., а оптимальный после одной итерации 1210 ден. ед. при перевозках , , , , .
Похожие задачи
Как решить задачу линейного программирования: разбор
Как решить задачу линейного программирования по шагам: модель, область допустимых решений, перебор вершин, линия уровня, канонический вид и симплекс-таблица с критерием оптимальности.
Орг./аналит. химияОкисление перманганатом калия: реакции в трёх средах
Как написать окисление перманганатом калия в кислой, нейтральной и щелочной средах: продукты восстановления марганца, метод электронного баланса, расстановка коэффициентов, расчёт титранта.
Химия (физич./структурная)Как найти активность иона: расчёт по Дебаю-Хюккелю
Как найти активность иона в растворе: ионная сила по всем ионам, коэффициент активности по предельному закону Дебая-Хюккеля, произведение f на c, разбор с числами и калькулятор.
ГенетикаКак найти частоту генотипов: закон Харди-Вайнберга
Разбор задачи по популяционной генетике: как найти частоту генотипов по закону Харди-Вайнберга, формула p2 плюс 2pq плюс q2, расчёт числа особей и калькулятор частот.
МатанализКак найти дифференциал второго порядка функции: формула
Разбираем, как найти дифференциал второго порядка функции: формула через вторую производную, пошаговый расчёт для y = x^3 ln x при dx = 0,1, потеря инвариантности формы и случай двух переменных.
СопроматКак найти допускаемую нагрузку: расчёт по прочности
Как найти допускаемую нагрузку из условия прочности: допускаемое напряжение через коэффициент запаса, площадь и момент сопротивления, расчёт для растяжения и изгиба, калькулятор.