Эффективное транспортное планирование с использованием R: решение транспортных задач с помощью линейного программирования
Транспортная задача — известная оптимизационная задача в области исследования операций. Он включает в себя определение оптимального способа транспортировки товаров от источников (например, заводов, складов и т. д.) до пунктов назначения (например, розничных магазинов, клиентов и т. д.) при минимизации общей стоимости транспортировки. Проблема возникает во многих практических приложениях, таких как управление цепочками поставок, логистика и планирование распределения.
Транспортную задачу можно представить в виде модели линейного программирования (ЛП), целью которой является минимизация общей стоимости транспортировки с учетом ограничений спроса и предложения. Модель LP может быть решена с использованием различных методов, включая симплексный алгоритм, метод внутренних точек и алгоритмы сетевого потока.
Транспортная задача имеет несколько вариаций, таких как несбалансированная транспортная задача, когда общее предложение не равно общему спросу, и транспортная задача с пропускной способностью, когда пропускная способность транспортной сети ограничена. Проблема также может быть расширена, чтобы включить другие факторы, такие как временные окна, несколько продуктов и несколько видов транспорта.
В этой статье мы обсудим основы транспортной задачи, ее ЛП-формулировку и различные методы решения. Мы также рассмотрим некоторые реальные примеры и приложения транспортной задачи и ее вариантов.
Рассмотрим сценарий, в котором есть 6 потребителей и 4 поставщика товара, расположенных в разных местах. Стоимость транспортировки между каждым поставщиком и потребителем представлена матрицей.
lpSolve
— это пакет R, предоставляющий набор функций для решения задач линейного и смешанно-целочисленного программирования, включая транспортную задачу. Пакет позволяет пользователям задавать ограничения задачи, целевую функцию и другие параметры оптимизации, а затем получать оптимальное решение с помощью LP-решателя.
Описание кода:
row.signs <- rep("<=", 4)
: Эта строка устанавливает знаки неравенства/равенства для ограничений поставщика как «меньше или равно», поскольку это проблема минимизации. Функцияrep()
используется для повторения одного и того же знака для всех 4 поставщиков.row.rhs <- c(1560, 3500, 5000, 2500)
: Эта строка устанавливает правые коэффициенты для ограничений поставщика. Эти значения представляют собой максимальные возможности каждого поставщика по поставке товара.col.signs <- rep(">=", 6)
: эта строка устанавливает знаки неравенства/равенства для потребительских ограничений как «больше или равно», поскольку это проблема минимизации. Функцияrep()
используется для повторения одного и того же знака для всех 6 потребителей.col.rhs <- c(2000, 4000, 1500, 2000, 1000, 2060)
: Эта строка устанавливает правые коэффициенты для потребительских ограничений. Эти значения представляют минимальные потребности каждого потребителя в товаре.lp.transport(costs, "min", row.signs, row.rhs, col.signs, col.rhs)
: Эта строка вычисляет оптимальное решение транспортной задачи, вызывая функциюlp.transport()
и передавая матрицу затрат и информацию об ограничениях.lp.transport(costs, "min", row.signs, row.rhs, col.signs, col.rhs)$solution
: Эта строка извлекает окончательные значения переменных решения (т. е. количества товаров, транспортируемых от каждого поставщика к каждому потребителю) из объекта решения, возвращаемого функциейlp.transport()
.
Спасибо за чтение, следуйте за мной, чтобы узнать больше