Я новичок в оптимизации маршрутов и был бы признателен за вашу помощь в решении следующих бизнес-требований с использованием jsprit. Я получил несколько отзывов от Стефана Шредера, который помог мне изучить некоторые основы jsprit. Сначала я объясню бизнес-требования, а затем задам несколько вопросов.
Цель состоит в том, чтобы составить список работ по техническому обслуживанию, которые необходимо выполнить в течение месяца. Ежедневный график необходимо будет составлять на весь месяц. Цель здесь - выполнять максимальное количество работ в день.
- В регионе по 4 депо.
- В каждом регионе около 70 складов, всего 300 складов.
- Известны расстояния между каждым складом и складами в этом регионе.
- В каждом регионе есть 3-4 машины разных типов, всего 12 машин.
- Транспортные средства в пределах региона могут обслуживать склады только в этом регионе.
- Транспортные средства в пределах региона имеют одну и ту же начальную точку, которая является конечной точкой.
- Транспортные средства не имеют требований к вместимости, пикапу или доставке.
- Транспортные средства используются только для перевозки рабочих, которые будут выполнять работы по техническому обслуживанию.
- Известна средняя скорость каждого транспортного средства.
- Существует около 80 типов работ по техобслуживанию.
- Каждый тип работы занимает известное количество времени в минутах.
- Работы по техническому обслуживанию необязательно начинать в определенное время.
- Ежемесячно необходимо выполнять около 200 работ по техническому обслуживанию.
- Эти вакансии могут быть на любом складе
- На одном складе в один и тот же день или в разные дни может выполняться более одной работы.
- В течение дня работают 3 восьмичасовые смены. С 6:00 до 14:00, с 14:00 до 22:00 и с 22:00 до 6:00
- Автомобиль покидает склад депо в начале смены и посещает столько же складов в течение восьмичасовой смены.
- Транспортное средство должно ждать на складе, пока выполняется работа, прежде чем переехать на следующий склад или вернуться на склад депо.
Я понимаю, что техническое обслуживание можно определить как услугу в jsprit, и что время запуска / возврата может быть установлено для каждого транспортного средства. Кроме того, матрица затрат может использоваться для добавления времени и расстояния к взаимосвязи между транспортным средством и складами. У меня есть следующие вопросы:
- Каждое задание обслуживания необходимо определить как услугу, в результате в решающую программу VRP будет передано 200 сервисных объектов, верно?
- В VehicleTypeImpl есть методы addCapacityDimension (), setCostPerDistance () и setCostPerTime (). Что именно это такое и как они применяются в приведенном выше случае?
- В Service.Builder есть метод addSizeDimension (). Что оно делает?
- В costMatrixBuilder есть метод для добавления TransportDistance и TransportTime. Какие единицы используются этими методами и как их использовать?
- Для каждого депо необходимо определить координаты и передать их методу setStartLocationCoordinate () для каждого VehicleImpl. Это правильно?
- VehicleBuilder имеет setLatestArrival (double maxDuration); какая единица измерения здесь используется?
Я ценю любую помощь в решении вышеуказанного случая.
Спасибо Адам
РЕДАКТИРОВАТЬ1:
Несколько вопросов
A. Методы setEarliestStart () и setLatestArrival () принимают двойное значение, как я могу указать для этих методов самое раннее отправление и последнее прибытие в качестве фактической даты? Например, время начала - 14:00 28 ноября 2014 г., а время окончания - 22:00 того же дня.
Б. Есть ли способ указать время обслуживания в минутах?
C. Метод VehicleTypeImpl.Builder.setMaxVelocity (double inMeterPerSeconds) ожидает максимальной скорости. Есть ли способ указать среднюю скорость транспортного средства?
D. Все автомобили должны работать в три смены; Означает ли это, что мне придется определять одно и то же транспортное средство три раза, по одному для каждой смены с различным временем самого раннего отправления и самым поздним прибытием?
E. Поскольку задания могут выполняться в любое время в течение месяца, будет ли временное окно для каждого задания передаваться как начало и конец месяца методу Service.Builder.setTimeWindow ()?