Задача коммивояжера в реальных условиях

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Задача коммивояжера в реальных условиях

Сообщение hclubmk » 04.09.2011 (Вс) 22:09

Доброго времени суток. Вопрос связан с практическим применением задачи коммивояжера. Маршрут доставки товара на торговые точки рассчитываю с помощью Yandex-map API. Если нет никаких дополнительных условий, маршрут просчитывается достаточно просто.
Расположение контрольных точек:
Изображение
Проложенный маршрут:
Изображение
Рассчитываю время прибытия в каждую из точек маршрута, полное время прохождения маршрута, полное и промежуточные (от точки к точке) расстояния.
Но в реальных условиях достаточно часто, некий клиент (а порой и несколько) из некоторой точки может попросить делать доставку в указанное время. Например: точка № 20 заказала доставку на указанное время. Прибыв в точку №9, нужно "ломать" маршрут и чтобы успеть, отправляться в точку №20. Далее - из точки № 20, продолжать движение по ранее проложенному маршруту, т.е. в точку №10. Но это бред, и классическое решение для данного случая не подходит. Вопрос стоит в том, каким образом строить маршрут? Или каким образом изменить "классический" вариант, чтобы не было "глубоких" провалов?
Если объяснил сумбурно – детали уточню.
Научились ли Вы радоваться трудностям?

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Задача коммивояжера в реальных условиях

Сообщение FireFenix » 04.09.2011 (Вс) 23:59

а если 2 клиента попросили доставить с разницей в 1 минуту?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Задача коммивояжера в реальных условиях

Сообщение Antonariy » 05.09.2011 (Пн) 0:04

При таких условиях один маршрут разбивается на несколько, чтобы несколько курьеров успели везде вовремя. Или клиенту объясняется, что в это время он товар получить не может. А в идеале, закрывая глаза на пример FireFenix и всякие форс-мажоры отнимающие время, маршрут строится так, чтобы к часу X и точке Y было пройдено максимально возможное количество точек, не зависящих от времени прохождения. Но для этого нужно всегда знать время, которое потребуется для перемещения из одной произвольной точи в другую произвольную точку.
Лучший способ понять что-то самому — объяснить это другому.

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Re: Задача коммивояжера в реальных условиях

Сообщение 1Steps » 05.09.2011 (Пн) 4:11

Первое.
Нужно приучать клиента к своим правилам, а не к тому, что он хочет.

Второе.
Как сказал Antonariy, маршрутов должно быть несколько.

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

Машина выезжающая на свой район везет весь товар. Она едет по маршруту и сначала доставляет срочный товар(допустим с 9:00 до 12:00), несмотря на то, что она проезжает мимо адреса, в который можно доставить товар отмеченный стандартной доставкой. После того, как срочный товар доставлен, машина начинает доставлять стандартный товар. Далее, если есть пикап товара, начинается пикап, но только строго по определенному времени. Допустим с 18:00 до 21:00.
Удалена за ненадобностью.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Задача коммивояжера в реальных условиях

Сообщение Proxy » 05.09.2011 (Пн) 11:20

Для расчёта необходимо ещё как минимум располагать временем проезда из каждой точки в каждую другую точку (и желательно по времени), расстояние по городу уходит на второй план. Совсем идеальный вариант — это учёт пробок (которые тот же яндекс тоже сообщает). И во избежание нереальных условий доставки (одному исполнителю 2 заявки на 1 время) клиенту предлагают временные окна не произвольно, а из учёта уже имеющихся заявок (просто как надевать диски на шпиль). По крайней мере так было везде, где я работал (разговор примерно так складывается "добрый день, вы оставляли заявку, Вас устроит приезд специалиста завтра в первую половину дня?" и далее клиент называет конкретный час).
В общем в первую очередь нужно озадачиться способом анализа времени проезда из точки в точку, а далее уже можно дорабатывать какой-либо из алгоритмов (я бы работал с принятием решений (точно не помню название), довольно прост и разумен, там всё сводится как обычно к поиску минимальной стоимости, но он довольно универсален).
Сама же задача коммивояжёра для реальных условий не применима, если мне не изменяет память, то там одной из целей было не попасть дважды в одну точку, даже если стоимость выходит ниже. Да и вообще как-то не очень разумно смотрится одна матрица смежности для реальных условий, тут вообще с ГИС бы поработать, тут даже проезд из точки в точку не единственный (где утром 10 минут — там вечером час. Каждый перекрёсток сама по себе точка, но проезд через каждый перекрёсток — не цель, если проезд через 2 пути занимает равное время, то нужно ехать по кратчайшему по географическому расстоянию и т.д, как-то так).
1Steps писал(а):Если взять опыт местных компаний, сразу будет заметно как они работают.
Есть способ доставки, срочный и стандартный(соответсвенно и цена).

У нас чаще иное: работнику выдают "разбег" (разбегайка — список заявок) и работник сам крутится как хочет. Кто-то из клиентов пожелал конкретное время, к кому-то нужно предварительно позвонить (в примечаниях указано за сколько, на цену не сказывается). Обычно на одного исполнителя вешают 1-2 кампуса, но бывают и исключения (с 10 до 11 в одном краю города, с 11 до 12 в другом и т.п). Как-то справляются работники сами. Пришёл на работу пораньше — схватил самый удачный разбег, опоздал — бегай по всему городу и работай с повторками (самые неадекватные клиенты, палата номер шесть). Список формирует ИС, однако её главная задача — удовлетворить клиента, а не сделать работникам комфортно (так же как на шпиль одевают цветные диски — так в реальном времени по ходу появления заявок онные помещаются в списки. Только при наличии 2 и более свободных исполнителей заявка вешается на находящегося до этого момента ближе).
Follow the white rabbit.

hclubmk
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 19.06.2009 (Пт) 14:23
Откуда: От-туда

Re: Задача коммивояжера в реальных условиях

Сообщение hclubmk » 05.09.2011 (Пн) 12:11

Нужно понимать, что определенное время доставки - вовсе не прихоть клиента. Есть обстоятельства прямо или косвенно обязывающие привязываться ко времени. Например, может быть режимный въезд автотранспорта на территорию. Время может указываться точно, но скорее, указывается некоторый интервал, в который должна быть произведена доставка - варианты
а) с 9: 15 до 10: 15;
б) до 10: 00;
в) после 17: 00.
Antonariy писал(а):маршрут строится так, чтобы к часу X и точке Y было пройдено максимально возможное количество точек, не зависящих от времени прохождения. Но для этого нужно всегда знать время, которое потребуется для перемещения из одной произвольной точи в другую произвольную точку.

Время перемещения из точки в точку я знаю - строится матрица смежности расстояний и времени перемещений посредством сервисов Яндекс. Хотелось бы остановиться на алгоритме "определения максимального количества точек".
Научились ли Вы радоваться трудностям?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Задача коммивояжера в реальных условиях

Сообщение Antonariy » 05.09.2011 (Пн) 14:45

hclubmk писал(а):Хотелось бы остановиться на алгоритме "определения максимального количества точек".
В первом приближении это та же задача коммивояжера, но с ограничением по времени. Строим маршрут до тех пор, пока время прохождения от текущей точки до точки Y не выбивается за ограничения. Однако маршрут будет неоптимальным, если Y находится слишком близко или слишком далеко от стартовой позиции. В общем, ждем знатоков матана, к которым я не отношусь :)
Лучший способ понять что-то самому — объяснить это другому.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 05.09.2011 (Пн) 19:53

Поделить на части примерно по 10 точек, для каждой из частей применить перебор, затем хитро помёрджить.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Задача коммивояжера в реальных условиях

Сообщение Proxy » 06.09.2011 (Вт) 8:46

Qwertiy писал(а):Поделить на части примерно по 10 точек, для каждой из частей применить перебор, затем хитро помёрджить.

Критерий отбора точек в группы по 10?
Follow the white rabbit.

Zenitchik
Постоялец
Постоялец
 
Сообщения: 369
Зарегистрирован: 21.12.2006 (Чт) 14:48

Re: Задача коммивояжера в реальных условиях

Сообщение Zenitchik » 06.09.2011 (Вт) 9:15

Можно попробовать генетический алгоритм. Интересная, наверно, задача :D
Знание английского языка - затрудняет понимание кода

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Задача коммивояжера в реальных условиях

Сообщение Proxy » 06.09.2011 (Вт) 9:22

Zenitchik писал(а):Можно попробовать генетический алгоритм. Интересная, наверно, задача :D

Избыточное усложнение задачи.
Follow the white rabbit.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 06.09.2011 (Вт) 13:35

Proxy писал(а):Критерий отбора точек в группы по 10?

Зависит от способа объединения, который я не придумал :)
Как вариант, время или расположение.

PS: Тут есть решение задачи комивояжёра нейронными сетями. Возможно, пригодится.


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 43

    TopList  
cron