Транспортная Задача Линейного Программирования: Теория, Алгоритмы (Метод Потенциалов) и Актуальное Применение в Логистике (2020-2025)

В 2024-2025 годах себестоимость автоперевозок в России увеличилась на 25%, а тарифы на грузоперевозки выросли на 15-40% в зависимости от направления. Эти ошеломляющие цифры — не просто статистика, а прямой индикатор того, что традиционные методы планирования логистики уже не справляются с динамикой современного рынка. В условиях, когда доля транспортных расходов может достигать 80-90% от всех логистических затрат, вопрос оптимизации перевозок становится не просто желательным, а жизненно необходимым для выживания и развития бизнеса. Эта работа посвящена фундаментальному инструменту такой оптимизации — транспортной задаче линейного программирования, ее теоретическим основам, алгоритмам решения и, что особенно важно, ее актуальности и практическому применению в условиях беспрецедентных вызовов последних лет. (Как эксперт в области оптимизации, могу подтвердить: игнорирование этих вызовов сегодня равносильно потере конкурентоспособности завтра).

Введение: Актуальность, Цели и Структура Работы

Современный мир логистики, особенно в период 2020-2025 годов, столкнулся с чередой глобальных потрясений: от пандемии COVID-19, разорвавшей привычные цепочки поставок, до геополитической напряженности, кардинально изменившей маршруты и стоимость перевозок. В этих условиях способность компаний к быстрой адаптации и эффективному управлению ресурсами становится ключевым фактором конкурентоспособности. Транспортная задача (ТЗ), являясь классической моделью оптимизации в исследовании операций, приобретает особую актуальность, предлагая строгие математические методы для минимизации затрат и максимизации эффективности перевозок.

Цель данной курсовой работы — систематизировать, углубить и актуализировать теоретические основы и алгоритмы решения классической и модифицированных транспортных задач линейного программирования, а также продемонстрировать их практическое применение в контексте современной логистики и оптимизации цепей поставок. (Понимание этих основ позволяет не просто решать задачи, но и глубже видеть структуру логистических систем, что бесценно для стратегического планирования).

Для достижения этой цели были поставлены следующие задачи:

  1. Представить строгую математическую формулировку классической ТЗ и ее двойственной задачи.
  2. Детально описать численные методы, включая метод потенциалов, для нахождения оптимального плана ТЗ.
  3. Проанализировать алгоритмические особенности решения специальных случаев ТЗ: несбалансированная задача, ТЗ с ограничениями на пропускную способность и ТЗ по критерию времени.
  4. Продемонстрировать эффективное использование современных программных средств (Excel Solver, библиотеки Python) для численной реализации алгоритмов ТЗ.
  5. Изучить актуальные (пост-2020) примеры применения ТЗ и ее модификаций в управлении цепями поставок, распределении ресурсов и транспортной логистике, а также оценить экономический эффект от их внедрения.

Структура работы последовательно раскрывает эти задачи, начиная с теоретических основ и заканчивая практическими примерами и анализом современных тенденций.

Исторический обзор и роль ТЗ в Исследовании операций

История транспортной задачи неразрывно связана с развитием математического программирования и исследования операций. Фундаментальные идеи, лежащие в ее основе, были заложены еще в 1781 году французским математиком Гаспаром Монжем, который сформулировал проблему оптимального перемещения масс. Однако современный вид и строгую математическую постановку задача получила в середине XX века благодаря работам советских ученых Леонида Канторовича (Нобелевская премия по экономике 1975 года) и Василия Немчинова, а также американского математика Фрэнка Хичкока.

Транспортная задача стала одним из первых и наиболее изученных примеров задач линейного программирования, продемонстрировав огромный потенциал математических методов для решения реальных экономических проблем. Ее значение в исследовании операций трудно переоценить: она послужила отправной точкой для развития целого класса сетевых задач и алгоритмов, а ее простота и интуитивная понятность сделали ее неотъемлемой частью учебных курсов по оптимизации. Даже спустя десятилетия, в эпоху больших данных и искусственного интеллекта, ТЗ сохраняет свою актуальность как базовый строительный блок для более сложных логистических моделей. (Я бы даже сказал, что это как азбука для любого, кто хочет говорить на языке оптимизации логистики).

Математический Формализм Классической Транспортной Задачи

Классическая транспортная задача (ТЗ), известная также как задача Монжа — Канторовича, является краеугольным камнем в теории линейного программирования. Ее суть заключается в поиске наиболее экономически выгодного плана перевозки однородного груза от нескольких пунктов отправления к нескольким пунктам потребления при условии полного удовлетворения спроса и вывоза предложения, и с минимальными суммарными затратами.

Прямая задача: Постановка и система ограничений

Представим, что у нас есть m пунктов отправления (поставщиков) и n пунктов потребления (потребителей).

Пусть:

  • ai — запас груза у i-го поставщика (i = 1, …, m).
  • bj — потребность в грузе у j-го потребителя (j = 1, …, n).
  • cij — стоимость перевозки единицы груза от i-го поставщика к j-му потребителю.
  • xij — искомый объем перевозок груза от i-го поставщика к j-му потребителю. Это наши переменные решения.

Целевая функция (минимизация суммарных затрат на перевозку):

$$
\text{min } Z = \sum_{i=1}^{m} \sum_{j=1}^{n} c_{ij} x_{ij}
$$

Система ограничений включает три группы условий:

  1. Ограничения по запасам (предложению): Каждый поставщик должен полностью вывезти свой груз. Это гарантирует, что все имеющиеся ресурсы будут использованы максимально эффективно, предотвращая излишки на складах.
    $$
        \sum_{j=1}^{n} x_{ij} = a_i \quad \text{для каждого } i = 1, \dots, m
        $$

    Это означает, что сумма всех перевозок из i-го пункта отправления должна быть равна его запасу ai.

  2. Ограничения по потребностям (спросу): Потребности каждого пункта назначения должны быть полностью удовлетворены. Таким образом, мы обеспечиваем бесперебойное снабжение и удовлетворение запросов всех потребителей.
    $$
        \sum_{i=1}^{m} x_{ij} = b_j \quad \text{для каждого } j = 1, \dots, n
        $$

    Это означает, что сумма всех перевозок в j-й пункт потребления должна быть равна его потребности bj.

  3. Условие неотрицательности переменных: Объемы перевозок не могут быть отрицательными.
    $$
        x_{ij} \ge 0 \quad \text{для всех } i = 1, \dots, m, \quad j = 1, \dots, n
        $$

Условие разрешимости (баланса) классической (закрытой) транспортной задачи является ключевым: суммарный объем предложения должен быть равен суммарному объему спроса. Если это условие не выполняется, задача называется несбалансированной (открытой) и требует предварительной модификации.

$$
\sum_{i=1}^{m} a_i = \sum_{j=1}^{n} b_j
$$

Двойственная задача и Критерий Оптимальности

В теории линейного программирования каждая прямая задача имеет свою двойственную. Для транспортной задачи двойственная постановка имеет глубокий экономический смысл и является основой для алгоритма метода потенциалов.

Двойственная задача формулируется как максимизация целевой функции:

$$
\text{max } G = \sum_{i=1}^{m} a_i u_i + \sum_{j=1}^{n} b_j v_j
$$

при ограничениях:

$$
u_i + v_j \le c_{ij} \quad \text{для всех } i = 1, \dots, m, \quad j = 1, \dots, n
$$

где ui — потенциал i-го поставщика, а vj — потенциал j-го потребителя. В отличие от прямой задачи, на переменные двойственной задачи (потенциалы) не накладываются ограничения по знаку, т.е. ui и vj могут быть любыми действительными числами.

Экономическая интерпретация потенциалов:

  • ui можно рассматривать как «выгоду» или «ценность» единицы груза у i-го поставщика.
  • vj можно интерпретировать как «ценность» или «дефицит» единицы груза у j-го потребителя. Знак vj часто интерпретируется противоположно, т.е. -vj как ценность. Ограничение ui + vjcij означает, что сумма «ценностей» поставщика и потребителя, связанных одним маршрутом, не должна превышать стоимость перевозки по этому маршруту, иначе возникнет возможность арбитража или неэффективности.

Необходимые и достаточные условия оптимальности плана (критерий потенциалов) непосредственно вытекают из теории двойственности и являются основой метода потенциалов. Оптимальный план перевозок X = (xij) достигается тогда и только тогда, когда существуют такие потенциалы ui и vj, что выполняются следующие условия:

  1. Для базисных (заполненных) клеток, то есть для тех маршрутов, по которым осуществляется перевозка (xij > 0):
    $$
        u_i + v_j = c_{ij}
        $$

    Это условие означает, что для активно используемых маршрутов «ценность» маршрута точно соответствует его стоимости, что является признаком эффективности.

  2. Для небазисных (свободных) клеток, то есть для тех маршрутов, по которым перевозка не осуществляется (xij = 0):
    $$
        u_i + v_j \le c_{ij}
        $$

    Это условие означает, что если по маршруту груз не перевозится, то «ценность» этого маршрута не должна превышать его стоимость. Если бы ui + vj > cij, то это означало бы, что существует более выгодный маршрут, и текущий план не был бы оптимальным, что позволяет нам найти пути для дальнейшей оптимизации.

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

Классические Алгоритмы Решения Транспортной Задачи

Решение транспортной задачи является итерационным процессом, который начинается с построения начального опорного плана (любого допустимого решения, удовлетворяющего всем ограничениям) и последующего его улучшения до тех пор, пока не будет достигнут оптимальный план, минимизирующий общие транспортные издержки.

Методы построения начального опорного плана

Начальный опорный план (НОП) — это первый шаг в решении ТЗ. Важно, чтобы он был допустимым, то есть удовлетворял всем ограничениям по запасам и потребностям, а также условию неотрицательности. Существует несколько методов его построения, два из которых являются наиболее распространенными: метод Северо-Западного Угла и метод Минимального Элемента.

Метод Северо-Западного Угла (СЗУ)

Метод СЗУ является самым простым и наиболее механическим способом построения НОП. Его преимущество в отсутствии необходимости сложных расчетов, однако он совершенно не учитывает тарифы на перевозки, что часто приводит к далеко не оптимальному начальному решению. (Этот метод хорош для быстрого старта, но не для экономии средств).

Алгоритм:

  1. Старт: Начинается заполнение с ячейки (1,1) — верхнего левого угла матрицы перевозок.
  2. Распределение: В ячейку (i,j) записывается максимально возможный объем груза, который может быть перевезен. Этот объем равен min(ai, bj).
  3. Обновление:
    • Если ai = bj, то строка i и столбец j считаются полностью удовлетворенными. Переходим к ячейке (i+1, j+1).
    • Если ai < bj, то строка i считается полностью удовлетворенной. Переходим к ячейке (i+1, j). Потребность bj уменьшается на ai.
    • Если ai > bj, то столбец j считается полностью удовлетворенным. Переходим к ячейке (i, j+1). Запас ai уменьшается на bj.
  4. Повторение: Повторять шаги 2-3 до тех пор, пока все запасы не будут исчерпаны, а все потребности не будут удовлетворены.

Метод Минимального Элемента (Наименьшей стоимости)

В отличие от СЗУ, метод Минимального Элемента (ММЭ) учитывает стоимость перевозок, что часто позволяет получить НОП, который уже близок к оптимальному и требует меньше итераций для достижения финального решения. (Это значительно ускоряет процесс поиска оптимального решения и снижает вычислительные затраты).

Алгоритм:

  1. Поиск минимума: Найти ячейку (i,j) в матрице тарифов cij с наименьшей стоимостью. Если таких ячеек несколько, выбирается любая из них.
  2. Распределение: В выбранную ячейку (i,j) записывается максимально возможный объем груза: min(ai, bj).
  3. Обновление:
    • Если ai = bj, то строка i и столбец j считаются полностью удовлетворенными и исключаются из дальнейшего рассмотрения.
    • Если ai < bj, то строка i считается полностью удовлетворенной и исключается. Потребность bj уменьшается на ai.
    • Если ai > bj, то столбец j считается полностью удовлетворенным и исключается. Запас ai уменьшается на bj.
  4. Повторение: Повторять шаги 1-3 для оставшейся части таблицы до тех пор, пока все запасы не будут исчерпаны, а все потребности не будут удовлетворены.

Метод Потенциалов (Модифицированный распределительный алгоритм)

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

Блок-схема итерационного процесса:

graph TD A[Начало] —> B{Построение начального опорного плана (СЗУ или ММЭ)}; B —> C[Определение потенциалов u_i и v_j]; C —> D{Для всех базисных клеток (x_ij > 0): u_i + v_j = c_ij}; D —> E[Вычисление оценок для свободных клеток: δ_ij = c_ij — (u_i + v_j)]; E —> F{Все δ_ij >= 0?}; F — Да —> G[План оптимален. Конец]; F — Нет —> H{Выбор свободной клетки (i_0, j_0) с максимальным по модулю отрицательным δ_ij}; H —> I[Построение цикла пересчета (замкнутого контура)]; I —> J[Определение минимального объема груза θ для перераспределения]; J —> K[Перераспределение потока по циклу (сдвиг θ)]; K —> B;

 

Подробное описание этапов:

  1. Построение начального опорного плана: Как описано выше, используется метод Северо-Западного Угла или Минимального Элемента.
  2. Определение потенциалов ui и vj для базисных клеток: Для всех заполненных ячеек (i,j) опорного плана должно выполняться условие ui + vj = cij. Так как эта система уравнений имеет m + n - 1 неизвестных и m + n - 1 уравнений (для невырожденного плана), мы можем произвольно присвоить одному из потенциалов (например, u1) значение 0, а затем последовательно найти все остальные потенциалы. (Это позволяет эффективно оценить «ценность» каждого поставщика и потребителя в текущем плане).
  3. Вычисление оценок для свободных клеток: Для каждой незаполненной ячейки (i,j) вычисляется ее оценка δij по формуле:
    $$
        \delta_{ij} = c_{ij} - (u_i + v_j)
        $$

    Эти оценки показывают, насколько выгодно или невыгодно использовать данный маршрут. Отрицательное δij (для задачи минимизации) указывает на то, что использование этого маршрута может снизить общие затраты, что является сигналом к изменению плана.

  4. Проверка оптимальности:
    • Если все δij ≥ 0, то текущий план является оптимальным, и процесс завершается.
    • Если существуют δij < 0, план неоптимален и требует улучшения.
  5. Построение цикла пересчета и улучшение плана:
    • Выбирается свободная клетка (i0, j0) с наибольшим по модулю отрицательным значением δij. Эта клетка вводится в базис.
    • Строится замкнутый цикл пересчета, начинающийся и заканчивающийся в выбранной свободной клетке. Вершинами этого цикла могут быть только базисные клетки (плюс выбранная свободная). Цикл должен иметь четное число вершин, и его звенья должны чередоваться строго по горизонтали и вертикали.
    • Вершинам цикла поочередно присваиваются знаки + и -, начиная с + для вводимой клетки.
    • Находится минимальный объем θ в клетках цикла со знаком -. Этот объем будет перераспределен.
    • Производится сдвиг θ: объем θ добавляется в клетки со знаком + и вычитается из клеток со знаком -. Одна из клеток со знаком - обнуляется и выводится из базиса.
    • Формируется новый опорный план, и процесс возвращается к шагу 2 (определение потенциалов). (Этот итерационный процесс гарантирует последовательное снижение затрат до достижения минимально возможного значения).

Особенности работы с вырожденными планами

Вырожденный опорный план возникает, когда число базисных (заполненных) клеток в текущем опорном плане меньше, чем m + n - 1. Это состояние может привести к трудностям при нахождении потенциалов, так как система уравнений ui + vj = cij будет иметь больше неизвестных, чем уравнений. Кроме того, вырожденность может стать причиной зацикливания алгоритма.

Для корректной работы метода потенциалов и предотвращения этих проблем используется техника введения ε (эпсилон):

  • В одну из свободных клеток, которая должна быть базисной, но не заполнена (т.е. xij = 0), временно вводится сколь угодно малое положительное число ε.
  • Эта «искусственная» базисная клетка позволяет восстановить необходимое число m + n - 1 базисных переменных, что обеспечивает однозначное определение потенциалов ui и vj.
  • Дальнейшие итерации выполняются как обычно. В конце, если ε остается в плане, его значение можно считать нулевым.
  • Важно отметить, что ε не влияет на общую стоимость перевозок, так как cij * ε пренебрежимо мало.

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

Модификации ТЗ и Вопросы Вычислительной Сложности

Классическая транспортная задача является мощным инструментом, но реальные логистические сценарии часто требуют учета дополнительных условий. Это приводит к появлению модификаций ТЗ, которые требуют адаптации стандартных алгоритмов или применения совершенно новых подходов. Параллельно с этим, всегда возникает вопрос о вычислительной эффективности этих алгоритмов.

Решение несбалансированной (открытой) ТЗ

Классическая транспортная задача (закрытая ТЗ) предполагает строгое равенство между суммарным предложением и суммарным спросом ($\sum a_i = \sum b_j$). Однако на практике гораздо чаще встречаются несбалансированные (открытые) транспортные задачи, где это равенство нарушено:

  • Суммарное предложение превышает суммарный спрос: $\sum a_i > \sum b_j$. Это означает, что у некоторых поставщиков останется невывезенный груз.
  • Суммарный спрос превышает суммарное предложение: $\sum a_i < \sum b_j$. Это означает, что потребности некоторых потребителей не будут полностью удовлетворены.

Алгоритм сведения к закрытой задаче:

Любая несбалансированная ТЗ может быть легко преобразована в сбалансированную путем введения фиктивного (мнимого) поставщика или потребителя. (Этот простой, но эффективный приём позволяет применять к сложным реальным сценариям мощь классических алгоритмов, что сокращает время решения и повышает его точность).

  1. Если $\sum a_i > \sum b_j$: Вводится фиктивный потребитель с потребностью bфик = $\sum a_i — \sum b_j$. Стоимости перевозок к этому фиктивному потребителю ci,фик полагаются равными нулю. Экономически это означает, что «перевозка» груза к фиктивному потребителю фактически представляет собой оставшийся на складе поставщика невостребованный груз, за хранение которого не взимается плата в рамках транспортной задачи.
  2. Если $\sum a_i < \sum b_j$: Вводится фиктивный поставщик с запасом aфик = $\sum b_j — \sum a_i$. Стоимости перевозок от этого фиктивного поставщика cфик,j полагаются равными нулю. Экономически это означает неудовлетворенный спрос у потребителя, стоимость которого в рамках транспортной задачи не учитывается.

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

Транспортная задача с дополнительными ограничениями

Помимо баланса спроса и предложения, реальные логистические системы часто сталкиваются с дополнительными ограничениями.

  1. ТЗ с ограничениями на пропускную способность (xijdij):

    Это одна из наиболее распространенных модификаций, где dij обозначает максимальный объем груза, который может быть перевезен по маршруту из i-го пункта в j-й. Такие ограничения могут быть вызваны вместимостью транспортных средств, пропускной способностью дорог, складов или мощностью погрузочно-разгрузочных пунктов. (Учет этих ограничений позволяет строить реалистичные и выполнимые планы перевозок, избегая перегрузок и задержек).

    • Решение: Такая задача является вариантом задачи о потоках в сетях. Ее можно решать:
      • Модифицированным методом потенциалов: При вычислении оценок δij и построении циклов пересчета необходимо учитывать не только xij ≥ 0, но и xijdij. Если вводимая клетка имеет δij < 0, но xij уже равно dij, то ее нельзя ввести в базис.
      • Методами потоков в сетях: Более общие алгоритмы, такие как алгоритм Форда-Фалкерсона или алгоритм минимальной стоимости/максимального потока, могут быть применены к этой задаче, рассматривая поставщиков и потребителей как узлы, а маршруты как дуги с пропускной способностью.
  2. ТЗ с фиксированным объемом поставки по определенному маршруту:

    Иногда требуется, чтобы по определенному маршруту (ik, jk) обязательно был перевезен фиксированный объем груза Xk.

    • Решение: Эту задачу можно свести к классической, уменьшив запасы aik и потребности bjk на Xk, а затем исключив маршрут (ik, jk) из дальнейшего рассмотрения. (Это позволяет гибко интегрировать предопределенные логистические контракты или стратегические решения в общую оптимизационную модель).

ТЗ по критерию времени: Метод запрещенных клеток

Помимо минимизации затрат, в некоторых случаях критическим является время доставки. Транспортная задача по критерию времени ставит своей целью минимизацию максимального времени доставки по одному из задействованных маршрутов:

$$
\min\{\max(t_{ij}) \mid x_{ij} > 0\}
$$

где tij — время доставки по маршруту (i,j). Эта задача отличается от классической ТЗ, поскольку ее целевая функция не является линейной суммой, а зависит от максимального значения. (Это особенно актуально для скоропортящихся товаров или срочных доставок, где задержка может привести к значительным убыткам).

Метод запрещенных клеток (или метод последовательного улучшения плана по критерию времени) — это специализированный алгоритм для решения таких задач:

  1. Инициализация: Начать с решения классической ТЗ на минимизацию стоимости, но при этом для каждой клетки (i,j) хранить не только cij, но и tij.
  2. Поиск максимального времени: Найти максимальное время tmax среди всех маршрутов, задействованных в текущем плане.
  3. Исключение «медленных» маршрутов: Если tmax превышает допустимое (или если мы ищем лучшее решение), то все маршруты с временем доставки, равным tmax, временно «запрещаются» (т.е. им присваивается очень большая стоимость M, что фактически исключает их из рассмотрения).
  4. Повторное решение: Снова решается транспортная задача на минимизацию стоимости с учетом новых «запрещенных» клеток.
  5. Итерации: Процесс повторяется, пока не будет найден план, удовлетворяющий критерию времени или пока задача не станет неразрешимой. При этом каждый раз мы стремимся уменьшить tmax.

Теоретическая и практическая вычислительная сложность

Транспортная задача относится к классу сложности P (полиномиальное время), что означает, что для ее решения существуют алгоритмы, чье время работы растет полиномиально от размера входных данных. Это обеспечивает возможность эффективного решения задачи даже для больших размерностей. (Это ключевой момент, гарантирующий масштабируемость и применимость ТЗ в реальных промышленных масштабах).

Однако, стоит различать теоретическую оценку сложности и практическую эффективность.

  • Общий симплекс-метод, на котором базируется метод потенциалов, имеет теоретическую оценку временной сложности, которая в худшем случае является экспоненциальной. Этот факт был показан в 1972 году на контрпримере, известном как куб Клее-Минти (Klee–Minty cube). В этом случае алгоритм вынужденно посещает все 2n вершин многогранника допустимых решений, что соответствует сложности O(2n), где n — число переменных. Это означает, что в теории для некоторых специально сконструированных задач симплекс-метод может работать очень долго.
  • На практике, тем не менее, метод потенциалов и общий симплекс-метод демонстрируют высокую практическую эффективность. Для подавляющего большинства реальных задач они находят оптимальное решение за время, близкое к полиномиальному. Это связано с тем, что «худшие» случаи, подобные кубу Клее-Минти, крайне редко встречаются в прикладных задачах. Метод потенциалов, будучи специализированным алгоритмом для ТЗ, дополнительно использует специфическую структуру задачи, что делает его еще более быстрым, чем общий симплекс-метод, применимый к любым задачам линейного программирования.

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

Практическая Реализация и Численный Пример

Теоретические основы транспортной задачи приобретают наибольшую ценность при их применении к конкретным практическим ситуациям. В этом разделе мы продемонстрируем пошаговое решение классической ТЗ с использованием метода потенциалов, а также покажем, как эти алгоритмы могут быть реализованы с помощью современных программных средств, таких как MS Excel Solver и библиотека PuLP в Python.

Полный численный пример решения ТЗ

Рассмотрим классическую сбалансированную транспортную задачу с 3 поставщиками (P1, P2, P3) и 4 потребителями (C1, C2, C3, C4).

  • Запасы поставщиков: a1 = 100, a2 = 150, a3 = 250. Суммарное предложение: Σai = 500.
  • Потребности потребителей: b1 = 120, b2 = 80, b3 = 180, b4 = 120. Суммарный спрос: Σbj = 500.
  • Матрица тарифов cij:
C1 C2 C3 C4 Запасы (ai)
P1 4 6 8 5 100
P2 7 5 3 2 150
P3 3 4 6 7 250
Потребности (bj) 120 80 180 120 500

Шаг 1: Построение начального опорного плана (методом Минимального Элемента)

  1. Наименьший тариф cij = 2 (ячейка P2-C4). x24 = min(150, 120) = 120.
    • C4 удовлетворена (120-120=0). P2 уменьшает запас (150-120=30).
  2. Следующий наименьший тариф cij = 3 (ячейка P2-C3). x23 = min(30, 180) = 30.
    • P2 исчерпана (30-30=0). C3 уменьшает потребность (180-30=150).
  3. Следующий наименьший тариф cij = 3 (ячейка P3-C1). x31 = min(250, 120) = 120.
    • C1 удовлетворена (120-120=0). P3 уменьшает запас (250-120=130).
  4. Следующий наименьший тариф cij = 4 (ячейка P1-C1) — но C1 уже удовлетворена. Следующий cij = 4 (ячейка P3-C2). x32 = min(130, 80) = 80.
    • C2 удовлетворена (80-80=0). P3 уменьшает запас (130-80=50).
  5. Осталась ячейка P3-C3 с тарифом 6 (P3-C3). x33 = min(50, 150) = 50.
    • P3 исчерпана (50-50=0). C3 уменьшает потребность (150-50=100).
  6. Осталась ячейка P1-C3 с тарифом 8. x13 = min(100, 100) = 100.
    • P1 исчерпана (100-100=0). C3 удовлетворена (100-100=0).

Начальный опорный план (НОП):

C1 C2 C3 C4 Запасы (ai)
P1 0 0 100 (c13=8) 0 100
P2 0 0 30 (c23=3) 120 (c24=2) 150
P3 120 (c31=3) 80 (c32=4) 50 (c33=6) 0 250
Потребности (bj) 120 80 180 120 500

Количество базисных клеток = 6. m+n-1 = 3+4-1 = 6. План невырожденный.
Общая стоимость НОП: Z = 100*8 + 30*3 + 120*2 + 120*3 + 80*4 + 50*6 = 800 + 90 + 240 + 360 + 320 + 300 = 2110.

Шаг 2: Применение метода потенциалов

Итерация 1: Определение потенциалов ui и vj
Присвоим u1 = 0.
Используем ui + vj = cij для базисных клеток:

  • P1-C3 (x13=100, c13=8): u1 + v3 = 8 ⇒ 0 + v3 = 8 ⇒ v3 = 8
  • P2-C3 (x23=30, c23=3): u2 + v3 = 3 ⇒ u2 + 8 = 3 ⇒ u2 = -5
  • P2-C4 (x24=120, c24=2): u2 + v4 = 2 ⇒ -5 + v4 = 2 ⇒ v4 = 7
  • P3-C1 (x31=120, c31=3): u3 + v1 = 3
  • P3-C2 (x32=80, c32=4): u3 + v2 = 4
  • P3-C3 (x33=50, c33=6): u3 + v3 = 6 ⇒ u3 + 8 = 6 ⇒ u3 = -2

Теперь можем найти v1 и v2:

  • u3 + v1 = 3 ⇒ -2 + v1 = 3 ⇒ v1 = 5
  • u3 + v2 = 4 ⇒ -2 + v2 = 4 ⇒ v2 = 6

Потенциалы:
u1 = 0, u2 = -5, u3 = -2
v1 = 5, v2 = 6, v3 = 8, v4 = 7

Вычисление оценок δij для свободных клеток (cij — (ui + vj)):

  • P1-C1: δ11 = 4 — (0+5) = -1
  • P1-C2: δ12 = 6 — (0+6) = 0
  • P1-C4: δ14 = 5 — (0+7) = -2
  • P2-C1: δ21 = 7 — (-5+5) = 7
  • P2-C2: δ22 = 5 — (-5+6) = 4
  • P3-C4: δ34 = 7 — (-2+7) = 2

Проверка оптимальности: Есть отрицательные оценки: δ11 = -1, δ14 = -2. План не оптимален.

Шаг 3: Улучшение плана (Итерация 1)

Наибольшая по модулю отрицательная оценка: δ14 = -2. Вводим клетку P1-C4 в базис.
Строим цикл пересчета: P1-C4 (+) → P2-C4 (-) → P2-C3 (+) → P1-C3 (-).

Представьте здесь изображение цикла, где P1-C4, P2-C3, P1-C3, P2-C4 образуют замкнутый контур. Это визуальное представление значительно облегчает понимание логики перераспределения потоков.

Объемы в клетках со знаком ‘-‘: x24 = 120, x13 = 100. Минимальный объем θ = min(120, 100) = 100.
Перераспределение:

  • x14 = 0 + 100 = 100
  • x24 = 120 — 100 = 20
  • x23 = 30 + 100 = 130
  • x13 = 100 — 100 = 0 (выходит из базиса)

Новый опорный план (Итерация 2):

C1 C2 C3 C4 Запасы (ai)
P1 0 0 0 100 (c14=5) 100
P2 0 0 130 (c23=3) 20 (c24=2) 150
P3 120 (c31=3) 80 (c32=4) 50 (c33=6) 0 250
Потребности (bj) 120 80 180 120 500

Новая общая стоимость: Z = 100*5 + 130*3 + 20*2 + 120*3 + 80*4 + 50*6 = 500 + 390 + 40 + 360 + 320 + 300 = 1910. (Стоимость уменьшилась: 2110 → 1910)

Повторяем Шаг 2: Определение потенциалов для нового плана (u1=0):

  • P1-C4 (x14=100, c14=5): u1 + v4 = 5 ⇒ 0 + v4 = 5 ⇒ v4 = 5
  • P2-C4 (x24=20, c24=2): u2 + v4 = 2 ⇒ u2 + 5 = 2 ⇒ u2 = -3
  • P2-C3 (x23=130, c23=3): u2 + v3 = 3 ⇒ -3 + v3 = 3 ⇒ v3 = 6
  • P3-C1 (x31=120, c31=3): u3 + v1 = 3
  • P3-C2 (x32=80, c32=4): u3 + v2 = 4
  • P3-C3 (x33=50, c33=6): u3 + v3 = 6 ⇒ u3 + 6 = 6 ⇒ u3 = 0

Теперь можем найти v1 и v2:

  • u3 + v1 = 3 ⇒ 0 + v1 = 3 ⇒ v1 = 3
  • u3 + v2 = 4 ⇒ 0 + v2 = 4 ⇒ v2 = 4

Новые потенциалы:
u1 = 0, u2 = -3, u3 = 0
v1 = 3, v2 = 4, v3 = 6, v4 = 5

Вычисление оценок δij для свободных клеток:

  • P1-C1: δ11 = 4 — (0+3) = 1
  • P1-C2: δ12 = 6 — (0+4) = 2
  • P1-C3: δ13 = 8 — (0+6) = 2
  • P2-C1: δ21 = 7 — (-3+3) = 7
  • P2-C2: δ22 = 5 — (-3+4) = 4
  • P3-C4: δ34 = 7 — (0+5) = 2

Проверка оптимальности: Все δij ≥ 0. План оптимален!

Оптимальный план перевозок и минимальная стоимость:

C1 C2 C3 C4 Запасы (ai)
P1 0 0 0 100 100
P2 0 0 130 20 150
P3 120 80 50 0 250
Потребности (bj) 120 80 180 120 500

Минимальная общая стоимость перевозок Zопт = 1910.

Реализация ТЗ средствами MS Excel Solver

MS Excel с надстройкой «Поиск решения» (Solver) является одним из самых доступных и широко используемых инструментов для решения задач линейного программирования, включая транспортную задачу. Его интуитивно понятный интерфейс позволяет быстро формализовать модель и получить оптимальное решение. (Это идеальный инструмент для тех, кто хочет быстро и наглядно увидеть результат оптимизации без глубокого погружения в программирование).

Пошаговая инструкция:

  1. Подготовка данных в Excel:
    • Создайте матрицу тарифов (cij) и матрицу для переменных xij (объемов перевозок). Вначале заполните ячейки xij нулями.
    • Добавьте столбцы для запасов ai и строки для потребностей bj.
    • Создайте вспомогательные столбцы и строки для сумм перевозок из каждого пункта отправления и в каждый пункт назначения. Используйте функцию СУММ() для этого.
    • Ячейка для целевой функции: В отдельной ячейке рассчитайте общую стоимость перевозок, используя функцию СУММПРОИЗВ() для матриц cij и xij.
      Например, если матрица тарифов находится в диапазоне B2:E4, а переменные xij — в B7:E9, то целевая функция будет =СУММПРОИЗВ(B2:E4;B7:E9).
  2. Активация «Поиска решения»:
    • Перейдите на вкладку «Данные» (Data).
    • Нажмите «Поиск решения» (Solver) в группе «Анализ». Если «Поиск решения» отсутствует, его необходимо активировать через «Файл» (File) → «Параметры» (Options) → «Надстройки» (Add-ins) → «Надстройки Excel» (Excel Add-ins) → «Перейти…» (Go…) → Установите флажок «Поиск решения» (Solver Add-in).
  3. Настройка параметров «Поиска решения»:
    • Установить целевую функцию (Set Objective): Выберите ячейку с формулой общей стоимости.
    • До (To): Выберите «Минимум» (Min), так как мы минимизируем затраты.
    • Изменяя ячейки переменных (By Changing Variable Cells): Выберите диапазон ячеек, где находятся ваши xij (объемы перевозок).
    • Ограничения (Subject to the Constraints):
      • Ограничения по запасам: Добавьте ограничения, что суммы перевозок из каждого пункта отправления (столбец СУММ() для xij) должны быть равны соответствующим запасам (ai).
        Например, $F$7:$F$9 = $G$7:$G$9.
      • Ограничения по потребностям: Добавьте ограничения, что суммы перевозок в каждый пункт назначения (строка СУММ() для xij) должны быть равны соответствующим потребностям (bj).
        Например, $B$10:$E$10 = $B$11:$E$11.
      • Условие неотрицательности: Установите флажок «Сделать переменные без ограничений неотрицательными» (Make Unconstrained Variables Non-Negative).
      • Целочисленность (при необходимости): Для объемов перевозок, если они должны быть целыми числами, добавьте ограничение xij = целое.
  4. Выбор метода решения: Выберите «Симплекс-метод LP» (Simplex LP).
  5. Нажать «Найти решение» (Solve). Excel Solver найдет оптимальный план перевозок и минимальную общую стоимость.

Представьте здесь скриншот окна «Параметры поиска решения» в Excel, где видны настройки целевой функции, изменяемых ячеек и ограничений. Это позволит читателю лучше ориентироваться в интерфейсе Excel.

Численная реализация ТЗ с использованием Python (PuLP)

Для более сложных модификаций ТЗ, а также для автоматизации и интеграции в большие аналитические системы, Python является предпочтительным инструментом. Библиотека PuLP предоставляет удобный интерфейс для построения моделей линейного программирования и использования различных решателей. (Использование Python с PuLP открывает двери для масштабируемой и гибкой автоматизации логистических решений, что крайне важно в условиях динамичного рынка).

Пример кода на Python с использованием PuLP:

import pulp

# 1. Определение данных задачи
# Количество поставщиков и потребителей
num_suppliers = 3
num_customers = 4

# Запасы поставщиков (a_i)
suppliers = ["P1", "P2", "P3"]
supply = {"P1": 100, "P2": 150, "P3": 250}

# Потребности потребителей (b_j)
customers = ["C1", "C2", "C3", "C4"]
demand = {"C1": 120, "C2": 80, "C3": 180, "C4": 120}

# Матрица тарифов (c_ij)
costs = {
    "P1": {"C1": 4, "C2": 6, "C3": 8, "C4": 5},
    "P2": {"C1": 7, "C2": 5, "C3": 3, "C4": 2},
    "P3": {"C1": 3, "C2": 4, "C3": 6, "C4": 7},
}

# 2. Создание модели
model = pulp.LpProblem("Transport_Problem", pulp.LpMinimize)

# 3. Определение переменных решения x_ij
# x_ij >= 0 (неотрицательность)
# cat='Continuous' - переменные могут быть дробными. Для целых - 'Integer'.
x = pulp.LpVariable.dicts("Ship",
                          ((i, j) for i in suppliers for j in customers),
                          lowBound=0,
                          cat='Continuous')

# 4. Целевая функция: минимизация суммарных затрат
model += pulp.lpSum(costs[i][j] * x[(i, j)] for i in suppliers for j in customers), "Total Cost"

# 5. Ограничения
# Ограничения по запасам
for i in suppliers:
    model += pulp.lpSum(x[(i, j)] for j in customers) == supply[i], f"Supply_Constraint_{i}"

# Ограничения по потребностям
for j in customers:
    model += pulp.lpSum(x[(i, j)] for i in suppliers) == demand[j], f"Demand_Constraint_{j}"

# 6. Решение задачи
model.solve()

# 7. Вывод результатов
print(f"Status: {pulp.LpStatus[model.status]}")
print("Optimal Solution:")
for i in suppliers:
    for j in customers:
        if x[(i, j)].varValue > 0:
            print(f"  Ship {x[(i, j)].varValue:.0f} units from {i} to {j}")

print(f"\nTotal Optimal Cost = {pulp.value(model.objective):.2f}")

# Проверка:
# Ship 100 units from P1 to C4
# Ship 130 units from P2 to C3
# Ship 20 units from P2 to C4
# Ship 120 units from P3 to C1
# Ship 80 units from P3 to C2
# Ship 50 units from P3 to C3
# Total Optimal Cost = 1910.00

Этот код демонстрирует, как с помощью PuLP можно легко задать структуру транспортной задачи, определить целевую функцию и ограничения. PuLP выступает как моделировщик, а затем вызывает один из доступных решателей (например, CBC, GLPK, Gurobi) для нахождения оптимального решения. Гибкость Python позволяет легко адаптировать этот код для решения модифицированных ТЗ, добавляя новые типы ограничений или изменяя целевую функцию.

Актуальные Тенденции Применения ТЗ в Логистике (2020-2025) и Экономический Эффект

В период с 2020 по 2025 год мировая и российская логистика пережила трансформационные изменения, обусловленные рядом беспрецедентных вызовов. Эти вызовы не только обострили необходимость в оптимизации, но и подчеркнули фундаментальную актуальность таких классических моделей, как транспортная задача, в современном контексте.

Вызовы российского логистического рынка (2020-2025)

Российский логистический рынок в последние годы столкнулся с каскадом событий, потребовавших кардинальной перестройки и адаптации. (По моему мнению, эти вызовы стали катализатором для внедрения инновационных подходов к оптимизации, без которых выживание на рынке стало практически невозможным).

  1. Пандемия COVID-19 (2020-2022): Нарушения в глобальных цепях поставок, локдауны, ограничения на передвижение и резкие колебания спроса привели к дефициту товаров, росту стоимости фрахта и сбоям в расписаниях. Компании были вынуждены искать новые маршруты, склады и поставщиков.
  2. Геополитическая напряженность и санкции (с 2022): Эти факторы оказали наиболее глубокое влияние, вызвав:
    • Переориентацию грузопотоков: Традиционные западные маршруты стали недоступны или слишком дороги, что привело к резкому росту объемов перевозок на восток и юг, а также к развитию «параллельного импорта».
    • Дефицит транспортных средств и запчастей: Уход иностранных производителей и поставщиков привел к нехватке современного автопарка и сложностям с его обслуживанием. Стоимость новой импортной грузовой техники увеличилась на 70-85%.
    • Рост операционных расходов:
      • Топливо: Цены на топливо демонстрировали нестабильность и общий рост.
      • Фонд оплаты труда (ФОТ) водителей: Из-за дефицита квалифицированных кадров, ФОТ водителей вырос в среднем на 40-67%. Это стало одним из самых значительных факторов удорожания перевозок.
      • Запчасти: Стоимость запчастей увеличилась на 15%, а для импортной техники — на 30-40%.
    • Общий рост стоимости грузоперевозок: В 2024-2025 гг. тарифы на грузоперевозки выросли на 15-40% в зависимости от направления, а общая стоимость перевозок увеличилась на 40-50%.

Эти факторы создали беспрецедентное давление на рентабельность логистического бизнеса и компаний, использующих транспортные услуги, делая вопрос оптимизации логистических процессов не просто актуальным, а критически важным для их выживания и конкурентоспособности. (Как практик, я могу с уверенностью сказать, что без глубокой оптимизации этих факторов компании рискуют оказаться за бортом рынка).

Экономическое обоснование оптимизации

На фоне роста затрат, экономический эффект от внедрения оптимизационных моделей, таких как транспортная задача, становится еще более очевидным и измеримым.

  1. Доля транспортных расходов: В структуре затрат логистических компаний доля транспортных расходов может достигать 80-90%. Это делает транспорт ключевой областью для поиска экономии. Даже небольшое процентное снижение этих расходов может привести к существенной экономии в абсолютных значениях, напрямую влияя на итоговую прибыль компании.
  2. Сокращение общих логистических расходов: Согласно отраслевым отчетам, оптимизация транспортных процессов через внедрение цифровых систем и автоматизацию, включая решения, основанные на ТЗ, позволяет компаниям сокращать общие транспортно-логистические расходы на 15-30%. Это достигается за счет:
    • Оптимального выбора маршрутов и видов транспорта.
    • Эффективного использования грузового пространства, что повышает рентабельность каждой перевозки.
    • Снижения пробега транспортных средств, уменьшая износ и расход топлива.
    • Уменьшения времени простоя, улучшая оборачиваемость активов.
  3. Рост рынка цифровизации: Признавая острую потребность в оптимизации, российский рынок активно инвестирует в цифровые технологии для логистики. По оценкам Института статистических исследований и экономики знаний (ИСИЭЗ) НИУ ВШЭ, спрос на цифровые технологии в транспортно-логистической отрасли России будет расти ежегодно на 21% в период 2021–2030 гг., достигнув 626,6 млрд рублей к 2030 году (по сравнению с 89,4 млрд рублей в 2020 году). Это подтверждает растущее признание ценности математических моделей и алгоритмов для повышения эффективности.
  4. Количественные примеры эффекта: Внедрение оптимизационных систем, основанных на алгоритмах ИИ/МО (которые часто включают математическое программирование, в том числе ТЗ), в отечественных логистических практиках позволило:
    • Сократить время решения логистической задачи в 10 раз.
    • Оптимизация бюджета развоза составила в среднем 6,025%.

Эти данные демонстрируют не только теоретическую, но и доказанную практическую ценность транспортной задачи как основы для построения сложных оптимизационных систем, способных давать ощутимый экономический эффект в условиях турбулентного рынка.

Современные направления применения оптимизационных моделей

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

  1. Мультимодальные перевозки: Модели ТЗ легко адаптируются для оптимизации сложных цепей поставок, включающих несколько видов транспорта (автомобильный, железнодорожный, морской, воздушный). Здесь задача расширяется до сетевой модели, где каждый сегмент маршрута имеет свои тарифы и ограничения. (Это позволяет компаниям формировать максимально гибкие и экономически выгодные маршруты, адаптируясь к меняющимся условиям).
  2. LTL-перевозки (Less Than Truckload): Оптимизация сборных грузов, когда один транспорт перевозит товары для нескольких получателей, становится критически важной. Модели, основанные на ТЗ, помогают консолидировать грузы, выбирать оптимальные маршруты и распределять транспортные средства для минимизации затрат при максимальной загрузке.
  3. Оптимизация «последней мили»: С бурным ростом электронной коммерции и требованием быстрой доставки, «последняя миля» (доставка от логистического хаба до конечного потребителя) стала одним из самых дорогих и сложных участков цепи поставок. Варианты ТЗ, часто интегрированные с задачами маршрутизации транспортных средств (Vehicle Routing Problem, VRP), используются для:
    • Определения оптимального распределения заказов между курьерами.
    • Планирования маршрутов с учетом временных окон, загруженности дорог и других динамических факторов.
    • Размещения микро-складов или пунктов выдачи.
  4. Управление складами и распределительными центрами: Хотя ТЗ в чистом виде напрямую не решает внутрискладские задачи, принципы оптимального распределения ресурсов и потоков лежат в основе многих алгоритмов размещения товаров, планирования перемещений и комплектации заказов.
  5. Управление запасами в распределительной сети: Модифицированные модели ТЗ могут использоваться для определения оптимального уровня запасов в различных точках распределительной сети, балансируя затраты на хранение и транспортные издержки при удовлетворении спроса.

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

Заключение

В рамках данной курсовой работы была проделана всесторонняя аналитическая работа, охватывающая как глубокие теоретические аспекты транспортной задачи линейного программирования, так и ее практическое применение в контексте актуальных вызовов 2020-2025 годов.

Мы убедились, что классическая транспортная задача, берущая свои корни в трудах Монжа и Канторовича, представляет собой строгую и элегантную математическую модель для минимизации затрат на перевозки. Детальное рассмотрение ее прямой и двойственной постановок, а также критерия оптимальности, позволило заложить прочную теоретическую базу. Пошаговое описание алгоритмов построения начального опорного плана (методы Северо-Западного Угла и Минимального Элемента) и итерационного улучшения плана с помощью метода потенциалов, включая особенности работы с вырожденными планами, продемонстрировало практическую применимость этих классических подходов.

Особое внимание было уделено модификациям транспортной задачи, которые отражают сложность реальных логистических систем. Мы ��ассмотрели методы сведения несбалансированных задач к классической, а также задачи с ограничениями на пропускную способность. Отдельно был разобран метод запрещенных клеток для решения транспортной задачи по критерию времени – аспект, часто упускаемый в стандартных учебных материалах, но крайне важный для некоторых отраслей. Анализ вычислительной сложности подчеркнул различие между теоретической экспоненциальной сложностью симплекс-метода (контрпример Куба Клее-Минти) и его высокой практической эффективностью, что подтверждает применимость ТЗ для решения масштабных задач.

Практическая ценность исследования была доказана наглядным численным примером, полностью решенным методом потенциалов. Кроме того, мы продемонстрировали, как современные программные средства – от доступного MS Excel Solver до мощной библиотеки PuLP на Python – позволяют эффективно реализовывать эти алгоритмы, предлагая гибкие решения для различных сценариев.

Наиболее значимым вкладом работы стало актуальное экономическое обоснование применения ТЗ. Анализ вызовов российского логистического рынка 2020-2025 годов (рост тарифов на 15-40%, увеличение ФОТ водителей на 40-67%, доля транспортных расходов до 80-90%) убедительно показал острую необходимость в оптимизации. Количественные данные об экономическом эффекте (сокращение расходов на 15-30%, рост рынка цифровизации на 21% ежегодно) подтвердили, что транспортная задача и ее современные аналоги являются не просто академическим упражнением, а мощным инструментом для достижения реальной конкурентоспособности и устойчивости бизнеса. (По моему опыту, именно эта способность трансформировать теорию в ощутимые экономические выгоды делает ТЗ незаменимым инструментом в арсенале современного логиста).

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

Перспективы дальнейших исследований могут включать изучение стохастических моделей транспортных задач, учитывающих неопределенность спроса и предложения, динамических моделей, реагирующих на изменения в режиме реального времени, а также интеграцию ТЗ с более сложными логистическими задачами, такими как задачи маршрутизации с учетом множества ограничений (например, VRP с окнами доставки и гетерогенным автопарком). Развитие гибридных алгоритмов, комбинирующих классические методы математического программирования с эвристиками и методами машинного обучения, также представляет собой перспективное направление.

Список использованной литературы

  1. Акулич, И. Л. Математическое программирование в примерах и задачах. Москва: Высшая школа, 1986.
  2. Алексеев, В. М., Галеев, Э. М., Тихомиров, В. М. Сборник задач по оптимизации. Москва: Наука, 1984.
  3. Банди, Б. Методы оптимизации. Вводный курс. Москва: Радио и связь, 1988.
  4. Боборыкин, В. А. Математические методы решения транспортных задач. Ленинград: СЗПИ, 1986.
  5. Васильев, Ф. П. Численные методы решения экстремальных задач. Москва: Наука, 1980.
  6. Геронимус, Б. А. Экономико-математические методы в планировании на автомобильном транспорте. Москва: Транспорт, 1982.
  7. Гилл, Ф., Мюррей, У., Райт, М. Практическая оптимизация. Москва: Мир, 1985.
  8. Евтушенко, Ю. Г. Методы решения экстремальных задач и их применение в системах оптимизации. Москва: Наука, 1982.
  9. Заславский, Ю. Л. Сборник задач по линейному программированию. Москва: Наука, 1969.
  10. Капустин, В. Ф. Практические занятия по курсу математического программирования. Ленинград: Изд-во Ленингр. Ун-та, 1976.
  11. Карманов, В. Г. Математическое программирование. Москва: Наука, 1975.
  12. Кузнецов, Ю. Н., Кузубов, В. И., Волощенко, А. Б. Математическое программирование. Москва: Высшая школа, 1980.
  13. Колесников, A. Excel 7.0 для Windows 95. Русифицированная версия. Киев: BHV, 1996.
  14. Курицкий, Б. Поиск оптимальных решений средствами Excel 7.0. Санкт-Петербург: BHV — Санкт-Петербург, 1997.
  15. Лесин, В. В., Лисовец, Ю. П. Основы методов оптимизации. Москва: Изд-во МАИ, 1995.
  16. Летова, Т. А., Пантелеев, А. В. Экстремум функций в примерах и задачах. Москва: Изд-во МАИ, 1998.
  17. Моисеев, Н. Н., Иванилов, Ю. П., Столярова, Е. М. Методы оптимизации. Москва: Наука, 1978. Стр. 325.
  18. Пробитюк, A. Excel 7.0 в бюро. Киев: BHV, 1996.
  19. Пшеничный, Б. И., Данилин, Ю. М. Численные методы в экстремальных задачах. Москва: Наука, 1975.
  20. Федоров, В. В. Численные методы максимина. Москва: Наука, 1979.
  21. Химмельбау, Д. Прикладное нелинейное программирование. Москва: Мир, 1975.

Похожие записи