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

Метод минимального элемента: транспортная задача

17 июня 2026Время чтения: 6 минут
#транспортная задача#метод минимального элемента#линейное программирование#начальный план#оптимизация
Метод минимального элемента: транспортная задача

Транспортная задача - одна из классических задач линейного программирования: нужно перевезти груз от mm поставщиков к nn потребителям с минимальными суммарными затратами. Метод минимального элемента - самый быстрый способ получить начальный опорный план, с которого затем стартует метод потенциалов.

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

Дано mm поставщиков с запасами aia_i (i=1,,mi = 1, \ldots, m) и nn потребителей со спросом bjb_j (j=1,,nj = 1, \ldots, n). Стоимость перевозки единицы груза из ii в jj равна cijc_{ij}. Нужно найти план перевозок xij0x_{ij} \geq 0 такой, что:

j=1nxij=ai,i=1mxij=bj,Z=i=1mj=1ncijxijmin\sum_{j=1}^{n} x_{ij} = a_i, \quad \sum_{i=1}^{m} x_{ij} = b_j, \quad Z = \sum_{i=1}^{m}\sum_{j=1}^{n} c_{ij} x_{ij} \to \min

Задача сбалансирована, если ai=bj\sum a_i = \sum b_j. Если нет - добавляют фиктивного поставщика или потребителя с нулевыми тарифами.

Алгоритм метода: выбор минимального тарифа, заполнение клетки, вычёркивание строки или столбца

Алгоритм метода минимального элемента

Метод строит начальный план «жадным» способом: на каждом шаге заполняет клетку с наименьшим тарифом.

Шаг 1. В таблице тарифов [cij][c_{ij}] найти клетку с минимальным значением cijc_{ij}^*.

Шаг 2. Назначить перевозку xij=min(ai,bj)x_{ij}^* = \min(a_i, b_j).

Шаг 3. Уменьшить остаток соответствующего поставщика и потребителя: aiaixij,bjbjxija_i \leftarrow a_i - x_{ij}^*, \quad b_j \leftarrow b_j - x_{ij}^*

Шаг 4. Если ai=0a_i = 0 - вычеркнуть строку ii; если bj=0b_j = 0 - вычеркнуть столбец jj; если оба равны нулю - вычеркнуть одно из двух (оставив вырожденную базисную клетку с нулём).

Шаг 5. Повторять шаги 1-4 до полного распределения грузов.

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

Таблица тарифов: выделены последовательно выбираемые минимальные элементы
Таблица тарифов: выделены последовательно выбираемые минимальные элементы

Числовой пример

Рассмотрим задачу 3×33 \times 3: поставщики A1,A2,A3A_1, A_2, A_3 (запасы 30, 40, 20) и потребители B1,B2,B3B_1, B_2, B_3 (спрос 20, 50, 20).

Матрица тарифов: C=(235741683)C = \begin{pmatrix} 2 & 3 & 5 \\ 7 & 4 & 1 \\ 6 & 8 & 3 \end{pmatrix}

Итерация 1: минимум c23=1c_{23} = 1. x23=min(40,20)=20x_{23} = \min(40, 20) = 20. Вычеркиваем столбец 3. Остаток a2=20a_2 = 20.

Итерация 2: из оставшихся минимум c11=2c_{11} = 2. x11=min(30,20)=20x_{11} = \min(30, 20) = 20. Вычеркиваем столбец 1. Остаток a1=10a_1 = 10.

Итерация 3: минимум c12=3c_{12} = 3. x12=min(10,50)=10x_{12} = \min(10, 50) = 10. Вычеркиваем строку 1. Остаток b2=40b_2 = 40.

Итерация 4: минимум c22=4c_{22} = 4. x22=min(20,40)=20x_{22} = \min(20, 40) = 20. Вычеркиваем строку 2. Остаток b2=20b_2 = 20.

Итерация 5: x32=20x_{32} = 20. Вычеркиваем строку 3 и столбец 2.

Начальный план: Z=220+310+120+420+820=40+30+20+80+160=330Z = 2\cdot20 + 3\cdot10 + 1\cdot20 + 4\cdot20 + 8\cdot20 = 40+30+20+80+160 = 330.

Число базисных переменных: 5=3+315 = 3 + 3 - 1 - план невырожден.

Сравнение с методом северо-западного угла

Метод северо-западного угла заполняет клетки по диагонали таблицы, не смотря на тарифы. Для нашего примера он дал бы:

x11=20,  x12=10,  x22=40,  x23=0,  x32=20ZСЗУ=220+310+440+x_{11}=20,\; x_{12}=10,\; x_{22}=40,\; x_{23}=0^*,\; x_{32}=20 \quad Z_{\text{СЗУ}} = 2\cdot20+3\cdot10+4\cdot40+\ldots

Метод минимального элемента обычно даёт более дешёвый начальный план - разрыв в 15-30 % типичен, что сокращает число итераций в методе потенциалов.

При равенстве нескольких минимальных тарифов выбирайте клетку с большей возможной перевозкой - это чаще даёт невырожденный план без добавления нулей.

Условие невырожденности и вырожденный план

Если на шаге одновременно обнуляются и aia_i, и bjb_j, одну из строк (или столбцов) не вычёркивают, а оставляют с нулевой перевозкой xij=0x_{ij}^* = 0. Эта базисная клетка с нулём - вырожденная - всё равно учитывается в счётчике базисных переменных: их ровно m+n1m+n-1.

Вырожденность не запрещена, но при циклировании (бесконечном переходе между планами одной стоимости) в методе потенциалов к нулевым базисным клеткам прибавляют ε>0\varepsilon > 0.

Проверка оптимальности: метод потенциалов

После получения начального плана переходят к методу потенциалов:

  1. Системе ui+vj=ciju_i + v_j = c_{ij} для всех базисных клеток (i,j)(i,j) решают относительно потенциалов ui,vju_i, v_j (полагая u1=0u_1 = 0).
  2. Для небазисных клеток вычисляют оценку Δij=cijuivj\Delta_{ij} = c_{ij} - u_i - v_j.
  3. Если все Δij0\Delta_{ij} \geq 0 - план оптимален.
  4. Иначе находят клетку с Δij<0\Delta_{ij} < 0, строят цикл и перераспределяют перевозки.

Метод минимального элемента сокращает путь к оптимуму именно потому, что начальный план уже близок к нему по стоимости.

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

  • Не проверяют баланс. Перед применением метода нужно убедиться, что ai=bj\sum a_i = \sum b_j. Если не так - добавляют фиктивный поставщик или потребитель с нулевыми тарифами и нулевой перевозкой.
  • Вычёркивают оба при одновременном обнулении. Правильно оставить одно из них «открытым» с остатком 0 - иначе число базисных переменных будет меньше m+n1m+n-1 и план непригоден для метода потенциалов.
  • Выбирают разные минимумы при одинаковых тарифах случайно. Лучше придерживаться правила: при равных тарифах - выбирать наибольший возможный объём перевозки.
  • Путают начальный план с оптимальным. Метод минимального элемента даёт только начальный план. Он редко оптимален сам по себе - требуется проверка по методу потенциалов или распределительному методу.
  • Неверно считают количество базисных переменных. Их должно быть ровно m+n1m+n-1; если меньше - план вырожден неправильно и метод потенциалов зависнет.

FAQ

Почему метод минимального элемента лучше метода северо-западного угла?

Метод северо-западного угла заполняет клетки без учёта тарифов - он гарантирует только допустимость плана. Метод минимального элемента на каждом шаге минимизирует «местные» затраты, что в среднем даёт план на 15-30 % дешевле и требует меньше итераций для выхода на оптимум.

Гарантирует ли метод минимального элемента оптимальный план?

Нет. Это жадный алгоритм: локально оптимальные решения не всегда глобально оптимальны. Для проверки оптимальности применяют метод потенциалов (для больших задач) или распределительный метод (для небольших). Метод минимального элемента только строит хорошее стартовое приближение.

Что делать, если задача несбалансирована?

Добавить фиктивного поставщика с запасом bjai>0\sum b_j - \sum a_i > 0 (или потребителя, если запасы превышают спрос) и нулевыми тарифами. После решения перевозки в фиктивные клетки означают неудовлетворённый спрос (или нераспределённые запасы) и в реальности не выполняются.

Коротко

Метод минимального элемента строит начальный опорный план транспортной задачи, жадно заполняя клетки с наименьшим тарифом. Алгоритм прост: найти минимальный cijc_{ij}, назначить максимально возможную перевозку, вычеркнуть насыщенную строку или столбец - и повторять до заполнения. Результат - m+n1m+n-1 базисных клеток, план, близкий к оптимуму, и быстрый старт для метода потенциалов.

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

Открыть EssayAI

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

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