EssayAI
Блог
Блог
Математика и алгоритмы

Метод потенциалов: решение транспортной задачи

11 июня 2026Время чтения: 8 минут
#метод потенциалов#транспортная задача#опорный план#потенциалы#оценки клеток

Метод потенциалов - это способ довести опорный план транспортной задачи до оптимального, проверяя каждую свободную клетку на выгодность одним коротким признаком. Идея простая: каждой строке и каждому столбцу таблицы перевозок приписывают число (потенциал), а затем по этим числам мгновенно считают, можно ли удешевить план, перебросив часть груза в незанятую клетку. Ниже разберём, как строится опорный план, как находят потенциалы из условия для базисных клеток, как считают оценки свободных клеток и как по отрицательной оценке улучшить план. Чтобы сразу увидеть, как тарифы и потенциалы превращаются в оценки, покрутите калькулятор ниже: он строит план методом северо-западного угла, считает потенциалы и оценки и подсвечивает клетку, в которую выгодно ввести перевозку.

Постановка транспортной задачи

В транспортной задаче есть mm поставщиков с запасами a1,,ama_1, \dots, a_m и nn потребителей с потребностями b1,,bnb_1, \dots, b_n. Стоимость перевозки единицы груза из пункта ii в пункт jj задана тарифом cijc_{ij}. Нужно составить план перевозок xij0x_{ij} \ge 0 так, чтобы вывезти весь запас, удовлетворить весь спрос и минимизировать суммарную стоимость:

Z=i=1mj=1ncijxijmin.Z = \sum_{i=1}^{m} \sum_{j=1}^{n} c_{ij}\, x_{ij} \to \min.

Задача называется закрытой (сбалансированной), если суммарный запас равен суммарной потребности:

i=1mai=j=1nbj.\sum_{i=1}^{m} a_i = \sum_{j=1}^{n} b_j.

Если баланса нет, задачу делают закрытой, добавляя фиктивного поставщика или потребителя с нулевыми тарифами. Метод потенциалов работает именно с закрытой задачей, поэтому проверка баланса - первый шаг.

Опорный план: метод северо-западного угла

Прежде чем что-то оптимизировать, нужен любой допустимый план - опорный. Самый быстрый способ его получить - метод северо-западного угла. Начинают с левой верхней клетки таблицы и заполняют её максимально возможным объёмом - минимумом из оставшегося запаса строки и оставшейся потребности столбца. Затем вычёркивают исчерпанную строку или столбец и переходят к следующей клетке вправо или вниз, пока не распределят весь груз.

Заполнение транспортной таблицы методом северо-западного угла: маркер идёт по диагонали слева сверху, в каждой клетке ставится минимум из остатка запаса и потребности, исчерпанные строка или столбец гаснут, пока не разместится весь груз

Для закрытой задачи опорный план содержит ровно m+n1m + n - 1 занятых (базисных) клеток - это число опорных переменных. Если занятых клеток оказалось меньше, план вырожденный: в одну из клеток вписывают перевозку ноль, чтобы формально добрать базис. Без полного базиса потенциалы не определятся однозначно, поэтому условие m+n1m + n - 1 важно держать в голове.

Потенциалы строк и столбцов

Сердце метода - потенциалы. Каждой строке ii приписывают число uiu_i, каждому столбцу jj - число vjv_j. Для всех базисных (занятых) клиток выполняется условие:

ui+vj=cij.u_i + v_j = c_{ij}.

Базисных клеток ровно m+n1m + n - 1, а потенциалов m+nm + n, поэтому система недоопределена на одно уравнение. Это решается просто: один потенциал задают произвольно, обычно u1=0u_1 = 0. После этого остальные потенциалы однозначно находятся цепочкой: зная uiu_i, из занятой клетки (i,j)(i, j) получают vj=cijuiv_j = c_{ij} - u_i, и наоборот. Заполняя потенциалы от занятой клетки к занятой клетке, доходят до всех строк и столбцов.

Транспортная таблица с занятыми клетками опорного плана, потенциалами строк и столбцов и оценками свободных клеток; отрицательная оценка выделена красным
Транспортная таблица с занятыми клетками опорного плана, потенциалами строк и столбцов и оценками свободных клеток; отрицательная оценка выделена красным

Удобно записывать потенциалы прямо на полях таблицы: uiu_i - справа от строк, vjv_j - под столбцами. Тогда оценка любой свободной клетки читается с таблицы за секунды. В калькуляторе выше потенциалы показаны синими ярлыками по краям таблицы - видно, как они пересчитываются при любом изменении тарифов.

Оценки свободных клеток и признак оптимальности

Для каждой свободной (незанятой) клетки считают оценку - разность между её тарифом и суммой потенциалов:

Δij=cij(ui+vj).\Delta_{ij} = c_{ij} - (u_i + v_j).

Смысл оценки прямой: Δij\Delta_{ij} показывает, на сколько изменится стоимость плана, если в клетку (i,j)(i, j) ввести одну единицу перевозки и перераспределить груз по циклу. Отсюда признак оптимальности: если все оценки свободных клеток неотрицательны Δij0\Delta_{ij} \ge 0, план оптимален - удешевить его нельзя. Если хотя бы одна оценка отрицательна, план можно улучшить, причём начинать выгоднее с клетки, где оценка минимальна (самая отрицательная).

В калькуляторе нижняя диаграмма показывает все оценки столбиками: красные - отрицательные (план улучшаем), зелёные - неотрицательные. Когда все столбики становятся зелёными, признак оптимальности выполнен.

Улучшение плана по циклу пересчёта

Нашлась отрицательная оценка - значит, в эту клетку нужно ввести перевозку. Делают это через цикл пересчёта. Из выбранной свободной клетки строят замкнутый цикл по занятым клеткам: ходы идут только по горизонтали и вертикали, повороты - под прямым углом, вершины цикла чередуют знаки плюс и минус (свободная клетка получает плюс). В клетках со знаком минус находят наименьшую перевозку θ\theta - это объём перераспределения. Затем по циклу прибавляют θ\theta к плюсовым клеткам и вычитают из минусовых. Клетка с найденным минимумом обнуляется и выходит из базиса, а свободная клетка входит в него.

После пересчёта снова считают потенциалы и оценки. Цикл повторяют, пока все оценки не станут неотрицательными. Каждый шаг строго уменьшает стоимость (на Δijθ|\Delta_{ij}| \cdot \theta), поэтому метод сходится за конечное число итераций к оптимальному плану.

Разбор примера из калькулятора

Возьмём задачу из калькулятора: запасы a=(60,40,50)a = (60, 40, 50), потребности b=(50,40,60)b = (50, 40, 60) (сумма по 150, задача закрытая), тарифы по строкам 3,5,73, 5, 7; 6,4,26, 4, 2; 8,3,58, 3, 5. Метод северо-западного угла даёт занятые клетки (1,1)=50(1,1)=50, (1,2)=10(1,2)=10, (2,2)=30(2,2)=30, (2,3)=10(2,3)=10, (3,3)=50(3,3)=50 - ровно m+n1=5m + n - 1 = 5 клеток. Стоимость этого плана:

Z=350+510+430+210+550=590.Z = 3\cdot 50 + 5\cdot 10 + 4\cdot 30 + 2\cdot 10 + 5\cdot 50 = 590.

Берём u1=0u_1 = 0 и разворачиваем потенциалы по занятым клеткам: v1=3v_1 = 3, v2=5v_2 = 5, далее u2=c22v2=45=1u_2 = c_{22} - v_2 = 4 - 5 = -1, потом v3=c23u2=2(1)=3v_3 = c_{23} - u_2 = 2 - (-1) = 3 и u3=c33v3=53=2u_3 = c_{33} - v_3 = 5 - 3 = 2. Итог: u=(0,1,2)u = (0, -1, 2), v=(3,5,3)v = (3, 5, 3). Теперь оценки свободных клеток:

Δ13=7(0+3)=4,Δ21=6(1+3)=4,\Delta_{13} = 7 - (0 + 3) = 4, \quad \Delta_{21} = 6 - (-1 + 3) = 4,

Δ31=8(2+3)=3,Δ32=3(2+5)=4.\Delta_{31} = 8 - (2 + 3) = 3, \quad \Delta_{32} = 3 - (2 + 5) = -4.

Оценка Δ32=4\Delta_{32} = -4 отрицательна, значит, план не оптимален: выгодно ввести перевозку в клетку (3,2)(3, 2). Построив для неё цикл пересчёта и перераспределив груз, стоимость снизится. После пересчёта все оценки станут неотрицательными - это и будет оптимальный план. Калькулятор показывает ровно эту цепочку чисел: стоимость 590, минимальную оценку -4 и пометку, что план ещё не оптимален.

Частые ошибки

  • Несбалансированная задача. Если сумма запасов не равна сумме потребностей, метод потенциалов применять нельзя напрямую. Сначала вводят фиктивный пункт с нулевыми тарифами.
  • Неполный базис. В опорном плане должно быть ровно m+n1m + n - 1 занятых клеток. При вырождении добавляют нулевую перевозку, иначе потенциалы не определятся.
  • Потенциалы по свободным клеткам. Условие ui+vj=ciju_i + v_j = c_{ij} записывают только для занятых клеток. По свободным считают оценки, а не потенциалы.
  • Знак оценки. Признак оптимальности - все Δij0\Delta_{ij} \ge 0. Если ищут максимум стоимости, признак зеркальный, но классическая транспортная задача - на минимум.
  • Цикл не из занятых клеток. В цикле пересчёта все вершины, кроме вводимой, должны быть занятыми клетками; ходы строго по строкам и столбцам с поворотами под прямым углом.

FAQ

Чем метод потенциалов отличается от метода северо-западного угла? Метод северо-западного угла строит лишь начальный опорный план - любой допустимый, без оглядки на стоимость. Метод потенциалов берёт этот план и доводит его до оптимального, проверяя оценки свободных клеток и улучшая план по циклу. Это два последовательных этапа решения, а не альтернативы.

Почему один потенциал задают равным нулю? Базисных клеток m+n1m + n - 1, а потенциалов m+nm + n, то есть на единицу больше уравнений. Система имеет один свободный параметр, поэтому один потенциал (обычно u1=0u_1 = 0) выбирают произвольно. На оценки Δij\Delta_{ij} это не влияет - в разности cij(ui+vj)c_{ij} - (u_i + v_j) сдвиг потенциалов сокращается.

Когда план транспортной задачи оптимален? План оптимален, когда все оценки свободных клеток неотрицательны: Δij0\Delta_{ij} \ge 0 для каждой незанятой клетки. Это означает, что любое введение новой перевозки только увеличит стоимость, поэтому дешевле уже не сделать.

Коротко

Метод потенциалов решает транспортную задачу в два этапа: сначала строят опорный план (например, методом северо-западного угла из m+n1m + n - 1 занятых клеток), затем по потенциалам uiu_i и vjv_j, найденным из условия ui+vj=ciju_i + v_j = c_{ij}, считают оценки свободных клеток Δij=cij(ui+vj)\Delta_{ij} = c_{ij} - (u_i + v_j). Если все оценки неотрицательны - план оптимален; отрицательная оценка указывает клетку, в которую вводят перевозку, после чего план улучшают по циклу пересчёта и повторяют до оптимума.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также