Линейное программирование маршрута транспорта

Нужна помощь для линейного программирования задачи маршрутизации транспортных средств. В задаче маршрутизации транспортного средства (VRP) транспортное средство будет обслуживать набор узлов, так что общие транспортные расходы сведены к минимуму. Моя переменная решения: Xij = 1, если узел j посещается после узла i. Параметр dij - это расстояние между узлами i и j. Итак, модель выглядит следующим образом:

введите описание изображения здесь

обратите внимание, что транспортное средство начинает тур со склада (узел номер 0) и, наконец, возвращается на склад (ограничения 11 и 12). Все узлы должны быть посещены (ограничение 13), и при входе в узел он должен покинуть этот узел (ограничение 14). Но когда я решаю это в cplex для большого количества узлов, иногда решение оказывается недействительным из-за таких циклов:

введите описание изображения здесь

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


person Hossein Beheshti Fakher    schedule 16.05.2018    source источник
comment
Вам нужны так называемые ограничения исключения субтура   -  person Erwin Kalvelagen    schedule 17.05.2018


Ответы (4)


Как упоминал @Erwin, вам нужно добавить ограничения исключения субтура. Вкратце:

  1. Решать проблему.
  2. Проанализируйте решение. Если нет субтур, то решение оптимальное. В противном случае добавьте ограничения на подгруппы, которые у вас есть в исходной задаче (в вашем примере, x_01 + x_12 + x_20 ‹= 2 и x_34 + x_45 + x_53‹ = 2). Перейти к 1.
person Philippe Olivier    schedule 16.05.2018

Хотя это старый вопрос, в ответе @alex есть одна важная деталь, на которую нужно обратить внимание. Исключение субтура (SE) в его ссылка реализуются" на лету "с помощью ленивого обратного вызова ограничения. Это важно иметь в виду, поскольку в более крупных примерах создание всех ограничений SE может оказаться невозможным, и их лучше оценивать лениво.

person EhsanK    schedule 05.04.2019

В CPLEX_Studio128\opl\examples\opl\models\TravelingSalesmanProblem вы можете найти небольшой пример того, что вам нужно, а именно исключение субтура.

person Alex Fleischer    schedule 17.05.2018

Спасибо за ответы. Я нашел формулу Таккера для исключения субтура, которая работает хорошо.

Ui-Uj+nXij<=n-1.
person Hossein Beheshti Fakher    schedule 18.05.2018