Метод потенциалов: решение транспортной задачи
Метод потенциалов - это способ довести опорный план транспортной задачи до оптимального, проверяя каждую свободную клетку на выгодность одним коротким признаком. Идея простая: каждой строке и каждому столбцу таблицы перевозок приписывают число (потенциал), а затем по этим числам мгновенно считают, можно ли удешевить план, перебросив часть груза в незанятую клетку. Ниже разберём, как строится опорный план, как находят потенциалы из условия для базисных клеток, как считают оценки свободных клеток и как по отрицательной оценке улучшить план. Чтобы сразу увидеть, как тарифы и потенциалы превращаются в оценки, покрутите калькулятор ниже: он строит план методом северо-западного угла, считает потенциалы и оценки и подсвечивает клетку, в которую выгодно ввести перевозку.
Постановка транспортной задачи
В транспортной задаче есть поставщиков с запасами и потребителей с потребностями . Стоимость перевозки единицы груза из пункта в пункт задана тарифом . Нужно составить план перевозок так, чтобы вывезти весь запас, удовлетворить весь спрос и минимизировать суммарную стоимость:
Задача называется закрытой (сбалансированной), если суммарный запас равен суммарной потребности:
Если баланса нет, задачу делают закрытой, добавляя фиктивного поставщика или потребителя с нулевыми тарифами. Метод потенциалов работает именно с закрытой задачей, поэтому проверка баланса - первый шаг.
Опорный план: метод северо-западного угла
Прежде чем что-то оптимизировать, нужен любой допустимый план - опорный. Самый быстрый способ его получить - метод северо-западного угла. Начинают с левой верхней клетки таблицы и заполняют её максимально возможным объёмом - минимумом из оставшегося запаса строки и оставшейся потребности столбца. Затем вычёркивают исчерпанную строку или столбец и переходят к следующей клетке вправо или вниз, пока не распределят весь груз.
Для закрытой задачи опорный план содержит ровно занятых (базисных) клеток - это число опорных переменных. Если занятых клеток оказалось меньше, план вырожденный: в одну из клеток вписывают перевозку ноль, чтобы формально добрать базис. Без полного базиса потенциалы не определятся однозначно, поэтому условие важно держать в голове.
Потенциалы строк и столбцов
Сердце метода - потенциалы. Каждой строке приписывают число , каждому столбцу - число . Для всех базисных (занятых) клиток выполняется условие:
Базисных клеток ровно , а потенциалов , поэтому система недоопределена на одно уравнение. Это решается просто: один потенциал задают произвольно, обычно . После этого остальные потенциалы однозначно находятся цепочкой: зная , из занятой клетки получают , и наоборот. Заполняя потенциалы от занятой клетки к занятой клетке, доходят до всех строк и столбцов.

Удобно записывать потенциалы прямо на полях таблицы: - справа от строк, - под столбцами. Тогда оценка любой свободной клетки читается с таблицы за секунды. В калькуляторе выше потенциалы показаны синими ярлыками по краям таблицы - видно, как они пересчитываются при любом изменении тарифов.
Оценки свободных клеток и признак оптимальности
Для каждой свободной (незанятой) клетки считают оценку - разность между её тарифом и суммой потенциалов:
Смысл оценки прямой: показывает, на сколько изменится стоимость плана, если в клетку ввести одну единицу перевозки и перераспределить груз по циклу. Отсюда признак оптимальности: если все оценки свободных клеток неотрицательны , план оптимален - удешевить его нельзя. Если хотя бы одна оценка отрицательна, план можно улучшить, причём начинать выгоднее с клетки, где оценка минимальна (самая отрицательная).
В калькуляторе нижняя диаграмма показывает все оценки столбиками: красные - отрицательные (план улучшаем), зелёные - неотрицательные. Когда все столбики становятся зелёными, признак оптимальности выполнен.
Улучшение плана по циклу пересчёта
Нашлась отрицательная оценка - значит, в эту клетку нужно ввести перевозку. Делают это через цикл пересчёта. Из выбранной свободной клетки строят замкнутый цикл по занятым клеткам: ходы идут только по горизонтали и вертикали, повороты - под прямым углом, вершины цикла чередуют знаки плюс и минус (свободная клетка получает плюс). В клетках со знаком минус находят наименьшую перевозку - это объём перераспределения. Затем по циклу прибавляют к плюсовым клеткам и вычитают из минусовых. Клетка с найденным минимумом обнуляется и выходит из базиса, а свободная клетка входит в него.
После пересчёта снова считают потенциалы и оценки. Цикл повторяют, пока все оценки не станут неотрицательными. Каждый шаг строго уменьшает стоимость (на ), поэтому метод сходится за конечное число итераций к оптимальному плану.
Разбор примера из калькулятора
Возьмём задачу из калькулятора: запасы , потребности (сумма по 150, задача закрытая), тарифы по строкам ; ; . Метод северо-западного угла даёт занятые клетки , , , , - ровно клеток. Стоимость этого плана:
Берём и разворачиваем потенциалы по занятым клеткам: , , далее , потом и . Итог: , . Теперь оценки свободных клеток:
Оценка отрицательна, значит, план не оптимален: выгодно ввести перевозку в клетку . Построив для неё цикл пересчёта и перераспределив груз, стоимость снизится. После пересчёта все оценки станут неотрицательными - это и будет оптимальный план. Калькулятор показывает ровно эту цепочку чисел: стоимость 590, минимальную оценку -4 и пометку, что план ещё не оптимален.
Частые ошибки
- Несбалансированная задача. Если сумма запасов не равна сумме потребностей, метод потенциалов применять нельзя напрямую. Сначала вводят фиктивный пункт с нулевыми тарифами.
- Неполный базис. В опорном плане должно быть ровно занятых клеток. При вырождении добавляют нулевую перевозку, иначе потенциалы не определятся.
- Потенциалы по свободным клеткам. Условие записывают только для занятых клеток. По свободным считают оценки, а не потенциалы.
- Знак оценки. Признак оптимальности - все . Если ищут максимум стоимости, признак зеркальный, но классическая транспортная задача - на минимум.
- Цикл не из занятых клеток. В цикле пересчёта все вершины, кроме вводимой, должны быть занятыми клетками; ходы строго по строкам и столбцам с поворотами под прямым углом.
FAQ
Чем метод потенциалов отличается от метода северо-западного угла? Метод северо-западного угла строит лишь начальный опорный план - любой допустимый, без оглядки на стоимость. Метод потенциалов берёт этот план и доводит его до оптимального, проверяя оценки свободных клеток и улучшая план по циклу. Это два последовательных этапа решения, а не альтернативы.
Почему один потенциал задают равным нулю? Базисных клеток , а потенциалов , то есть на единицу больше уравнений. Система имеет один свободный параметр, поэтому один потенциал (обычно ) выбирают произвольно. На оценки это не влияет - в разности сдвиг потенциалов сокращается.
Когда план транспортной задачи оптимален? План оптимален, когда все оценки свободных клеток неотрицательны: для каждой незанятой клетки. Это означает, что любое введение новой перевозки только увеличит стоимость, поэтому дешевле уже не сделать.
Коротко
Метод потенциалов решает транспортную задачу в два этапа: сначала строят опорный план (например, методом северо-западного угла из занятых клеток), затем по потенциалам и , найденным из условия , считают оценки свободных клеток . Если все оценки неотрицательны - план оптимален; отрицательная оценка указывает клетку, в которую вводят перевозку, после чего план улучшают по циклу пересчёта и повторяют до оптимума.
Читайте также

Метод северо-западного угла: транспортная задача
Метод северо-западного угла для транспортной задачи: как пошагово построить опорный план, проверить его на вырожденность по правилу m+n-1 и посчитать стоимость перевозок с разбором типовой задачи.

Метод минимального элемента: транспортная задача
Метод минимального элемента в транспортной задаче: пошаговый алгоритм начального плана, таблица тарифов, критерий оптимальности. Примеры и частые ошибки.

Абстрактный класс и интерфейс: в чём отличие
Абстрактный класс и интерфейс: чем отличаются в ООП, когда наследовать поведение, а когда задавать контракт, как выбрать на примерах Java, C# и Python.