Логистические производственно-транспортные системы - УрГУПС

Курс лекций и лабораторных работ

Лекция 2.7. Транспортная задача: линейное программирование

Содержание


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

Транспортная задача — задача оптимизации перевозок грузов от поставщиков к потребителям с минимальными затратами при соблюдении ограничений по запасам и спросу.

Исходные данные

Поставщики:

Потребители:

Стоимости перевозки:

Пример

Данные:

Поставщик \ Потребитель П1 П2 П3 Запас
С1 5 8 3 100
С2 4 6 7 150
С3 9 5 4 200
Спрос 120 180 150 —

Вопрос: Сколько и куда перевозить для минимизации затрат?


Математическая модель

Целевая функция

Минимизация совокупных затрат:

\[min \\sum_{i=1}^{m}\\sum_{j=1}^{n} C_{ij} \\cdot x_{ij}\]

Где:

Ограничения

По запасам поставщиков: \(\\sum_{j=1}^{n} x_{ij} \\leq A_i, \\quad i = 1, ..., m\)

По спросу потребителей: \(\\sum_{i=1}^{m} x_{ij} \\geq B_j, \\quad j = 1, ..., n\)

Неотрицательность: \(x_{ij} \\geq 0\)

Балансовое условие

Закрытая модель (спрос = предложение): \(\\sum_{i=1}^{m} A_i = \\sum_{j=1}^{n} B_j\)

Открытая модель (требуется балансировка):


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

Алгоритм

Шаг 1. Найти клетку с минимальной стоимостью $C_{ij}$

Шаг 2. Назначить максимальную перевозку: \(x_{ij} = min(A_i, B_j)\)

Шаг 3. Скорректировать запасы и спрос:

Шаг 4. Исключить удовлетворённую строку или столбец

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

Пример решения

Исходная матрица:

С \ П П1 П2 П3 Запас
С1 5 8 3 100
С2 4 6 7 150
С3 9 5 4 200
Спрос 120 180 150 —

Шаги:

  1. Минимум = 3 (С1-П3): $x_{13} = min(100, 150) = 100$
    • С1 исчерпан, П3 осталось 50
  2. Минимум = 4 (С2-П1): $x_{21} = min(150, 120) = 120$
    • П1 удовлетворён, С2 осталось 30
  3. Минимум = 5 (С3-П2): $x_{32} = min(200, 180) = 180$
    • П2 удовлетворён, С3 осталось 20
  4. Минимум = 4 (С3-П3): $x_{33} = min(20, 50) = 20$
    • С3 исчерпан, П3 осталось 30
  5. Минимум = 7 (С2-П3): $x_{23} = min(30, 30) = 30$
    • Всё распределено

Результат:

С \ П П1 П2 П3
С1 0 0 100
С2 120 0 30
С3 0 180 20

Затраты: $100×3 + 120×4 + 30×7 + 180×5 + 20×4 = 300 + 480 + 210 + 900 + 80 = 1970$ руб.


Метод потенциалов

Алгоритм проверки оптимальности

Шаг 1. Назначить потенциалы $u_i$ и $v_j$ так, чтобы для всех базисных клеток: \(u_i + v_j = C_{ij}\)

Шаг 2. Принять $u_1 = 0$

Шаг 3. Вычислить оценки свободных клеток: \(\\Delta_{ij} = C_{ij} - (u_i + v_j)\)

Шаг 4. Проверить оптимальность:

Пример проверки

Потенциалы для базисных клеток:

С \ П П1 ($v_1$) П2 ($v_2$) П3 ($v_3$) $u_i$
С1 ($u_1=0$) — — 3 0
С2 ($u_2$) 4 — 7 -1
С3 ($u_3$) — 5 4 0
$v_j$ 5 5 3 —

Расчёт оценок свободных клеток:

Вывод: Все $\Delta_{ij} \geq 0$ → план оптимален!


Инструменты решения

Excel («Поиск решения»)

Настройка:

  1. Создать таблицу перевозок
  2. Формула целевой функции: =СУММПРОИЗВ(матрица_перевозок; матрица_стоимостей)
  3. Ограничения:
    • Сумма по строкам ≤ запасы
    • Сумма по столбцам ≥ спрос
  4. Запустить «Поиск решения» (Solver)

Python (Google OR-Tools)

from ortools.linear_solver import pywraplp

# Создание решателя
solver = pywraplp.Solver('Transport', pywraplp.Solver.GLOP_LINEAR_PROGRAMMING)

# Данные
costs = [[5, 8, 3], [4, 6, 7], [9, 5, 4]]
supply = [100, 150, 200]
demand = [120, 180, 150]

# Переменные решения
x = {}
for i in range(3):
    for j in range(3):
        x[i, j] = solver.NumVar(0, solver.infinity(), f'x[{i},{j}]')

# Целевая функция
solver.Minimize(solver.Sum(costs[i][j] * x[i, j] for i in range(3) for j in range(3)))

# Ограничения по запасам
for i in range(3):
    solver.Add(solver.Sum(x[i, j] for j in range(3)) <= supply[i])

# Ограничения по спросу
for j in range(3):
    solver.Add(solver.Sum(x[i, j] for i in range(3)) >= demand[j])

# Решение
status = solver.Solve()
print(f'Минимальные затраты: {solver.Objective().Value()}')

Python (PuLP)

from pulp import *

# Модель
model = LpProblem('Transport', LpMinimize)

# Переменные
x = LpVariable.dicts('x', [(i, j) for i in range(3) for j in range(3)], lowBound=0)

# Целевая функция
model += lpSum(costs[i][j] * x[(i, j)] for i in range(3) for j in range(3))

# Ограничения
for i in range(3):
    model += lpSum(x[(i, j)] for j in range(3)) <= supply[i]

for j in range(3):
    model += lpSum(x[(i, j)] for i in range(3)) >= demand[j]

# Решение
model.solve()

Транспортная задача большой размерности

Проблемы большой размерности

При большом количестве поставщиков и потребителей:

Пример:

Методы решения

1. Декомпозиция

2. Приближённые алгоритмы

3. Специализированные решатели


Учёт ограничений инфраструктуры

Типы ограничений

Пропускная способность маршрутов: \(x_{ij} \\leq Capacity_{ij}\)

Ограничения по типу транспорта:

Временные окна:

Парк подвижного состава: \(\\sum_{j} x_{ij} \\leq Fleet_i \\cdot Capacity_{vehicle}\)

Пример с ограничениями

Дополнительные условия:

Модификация модели:

x[1,3] <= 80
x[2,1] >= 50

Сравнение Excel и Python

Критерий Excel Python
Простота использования Высокая (GUI) Средняя (требуется код)
Размерность задачи До 200 переменных До 1 000 000+ переменных
Время решения Секунды–минуты Секунды для больших задач
Интеграция Ограниченная Полная (API, базы данных)
Стоимость Входит в Office Бесплатно (OR-Tools, PuLP)
Визуализация Встроенная Через matplotlib, seaborn

Рекомендации по выбору

Ситуация Инструмент
Малые задачи (до 50 переменных) Excel
Средние задачи (50–500 переменных) Excel или Python
Большие задачи (500+ переменных) Python
Интеграция с другими системами Python
Быстрый прототип Excel
Промышленное решение Python

Ключевые выводы по лекции

  1. Транспортная задача минимизирует затраты на перевозки при ограничениях по запасам и спросу.

  2. Математическая модель: целевая функция минимизации затрат + ограничения баланса.

  3. Метод минимального элемента строит начальный план.

  4. Метод потенциалов проверяет оптимальность: все $\Delta_{ij} \geq 0$.

  5. Инструменты: Excel (Solver), Python (OR-Tools, PuLP).

  6. Большая размерность требует декомпозиции или специализированных решателей.

  7. Ограничения инфраструктуры учитываются в модели дополнительными условиями.

  8. Выбор инструмента зависит от размерности задачи и требований к интеграции.


Контрольные вопросы

  1. Дайте определение транспортной задачи.
  2. Запишите математическую модель транспортной задачи.
  3. Опишите алгоритм метода минимального элемента.
  4. Как проверяется оптимальность плана методом потенциалов?
  5. Какие инструменты используются для решения транспортных задач?