|
|
О программе |
|
|
|
|
Скачать |
|
|
|
|
|
|
Разное |
|
|
|
Обратная связь |
|
|
|
|
|
Описание
pCouriers - незавершенный проект по оптимальному
распределению заказов между несколькими курьерами.
Есть множество фирм и интернет-магазинов, продающих небольшие товары с доставкой их
заказчикам. Однако, когда число курьеров больше двух, становится
трудно правильно распределить заказы между курьерами так, чтобы каждый из
них потратил возможно меньшее время на доставку, и чтобы при этом все клиенты
остались довольны. В настоящее время мной пишется программа, реализующая данную идею.
Сейчас в программе реализована расчётная часть,
но не хватает интерфейса. Работа над интерфейсом ведётся.
Предварительный вид представлен ниже. Заходите чаще, и увидите изменения в интерфейсе:

Предполагается в ближайшее время сделать следующее:
- На первой закладке создаётся список, куда курьеры должны съездить. Место
может быть выбрано на схеме метро, или выбрано из базы постоянных клиентов.
Также при выборе станции метро будет отображаться список ближайших клиентов.
Также при желании записывается адрес, и указывается примерное время,
которое потратит курьер на этот заказ вне метро. Товар можно выбрать как
из справочника товаров, так и вписать его название вручную. Каждому заказу
может быть проставлено время, когда его нужно доставить.
- Отдельно есть справочник клиентов - наименование, контактная информация,
ближайшая (-ие) станция метро, сколько добираться от метро, время работы,
описание и, возможно, схема проезда.
- На страничке "Курьеры" можно вести список курьеров, а также указывать
особые условия: сегодня Иванов не пришёл, а Петров придёт в 12-00 и
должен закончить в 16-00. Сергеев не может везти товары общим весом
более 10кг.
- Можно вести список товаров. Наименование, вес.
- На вкладке "Расчёт" происходит итоговая обработка запроса, рассчитывается
путь для каждого из курьеров. Можно посмотреть разные варианты распределения,
которые предлагает программа. А также предполагается сделать возможность
вручную менять порядок и распределение заказов. Здесь же можно будет
распечатать/экспортировать результат.
- Возможно, будет сделан журнал - сохранение результатов по датам.
Если есть ещё какие-нибудь пожелания по проекту - пишите.
В настоящее время в программе реализовано следующее:
- Ввод и вывод данных - через текстовые файлы.
- Количество курьеров и заказов неограничено.
- Курьеры указывают не только время своей работы (а оно может быть разным),
но и место жительства. Программа попытается учесть это обстоятельство,
чтобы курьер закончил работу поближе к дому.
- Для расчёта программа пользуется генетическим алгоритмом.
На практике это означает, что, запустив программу несколько раз,
Вы получите разные результаты. Но можно быть уверенным,
что по оптимальности они будут более или менее одинаковыми
(в тестовом примере, см. ниже, разброс времени составлял около 10 минут).
Вид программы до расчёта

Комментарии к рисунку:
- Крестом обозначены заказы, не вписавшиеся во временные рамки,
т.е. либо просроченные, либо по окончании рабочего дня курьера.
- По вертикали обозначено время суток, прямоугольники - это время,
потраченное на конкретного клиента, включая время проезда до соответствующей
станции метро, и время на поверхности и у клиента.
- Цвет прямоугольника - цвет линии метро.
Вид программы после расчёта

Комментарии к последнему рисунку:
- У четырех курьеров задано время работы с 8-30 до 23-59, у пятого - 10-30 - 12-30
- Один из заказчиков указал время получения 18-00, невыгодное ни одному из курьеров.
В решении это обстоятельство учтено, и курьер "Сидоров" отрабатывает из-за этого несколько
меньшее суммарное время.
- Время данного расчёта на P4-2500 - порядка 1 минуты.
Чего пока нет:
- нет распечатки результата
- все настройки делаются только через ini-файлы
- нет различия между станциями с одинаковыми названиями
- нет критерия, в каких случаях товар можно отвезти на следующий день
- время расчёта можно бы ограничить, например, не больше 10 сек.
Данная разработка не предполагается к свободному распространению.
Если кого-нибудь заинтересовала данная информация, и/или есть предложения по доработке - пишите Boris[]pMetro.su.
|