Перейти к основному содержимому

Транспортные средства

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

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

Стартовый и конечный узлы

При добавлении транспортного средства задаются:

  • стартовый узел — узел, в котором маршрут начинается;
  • конечный узел — узел, в котором маршрут заканчивается.

Эти узлы должны быть заранее добавлены в построитель. Транспортное средство ссылается на них по индексу узла (целое число с 0).

Транспортные средства, как и узлы, добавляются через построитель параметров модели:

Построитель = О2
.Модели()
.МодельМаршрутизации()
.СоздатьПостроительПараметровМодели();

ИндексДепо = Построитель.ДобавитьУзел("Депо");
ИндексКлиента1 = Построитель.ДобавитьУзел("Клиент1");

Построитель.ДобавитьТранспортноеСредство(ИндексДепо, ИндексДепо, "ТС1");

Метод возвращает индекс добавленного транспортного средства (целое число с 0).

В зависимости от того, как соотносятся стартовый и конечный узлы, моделируются разные прикладные сценарии.

Одно депо

Все транспортные средства стартуют и финишируют в одном и том же узле — классический VRP:

Депо = Построитель.ДобавитьУзел("Депо");
// ... другие узлы ...

Построитель.ДобавитьТранспортноеСредство(Депо, Депо, "ТС1");
Построитель.ДобавитьТранспортноеСредство(Депо, Депо, "ТС2");

Мульти-депо

Транспортные средства стартуют и финишируют в разных депо:

ДепоСевер = Построитель.ДобавитьУзел("Депо_Север");
ДепоЮг = Построитель.ДобавитьУзел("Депо_Юг");
// ... клиенты ...

Построитель.ДобавитьТранспортноеСредство(ДепоСевер, ДепоСевер, "ТС1");
Построитель.ДобавитьТранспортноеСредство(ДепоЮг, ДепоЮг, "ТС2");

Открытые маршруты

Стартовый и конечный узлы одного транспортного средства различаются — например, водитель стартует с базы и заканчивает день дома:

База = Построитель.ДобавитьУзел("База");
Дом = Построитель.ДобавитьУзел("Дом_водителя");

Построитель.ДобавитьТранспортноеСредство(База, Дом, "ТС1");

Фиксированная стоимость использования

Фиксированная стоимость — постоянная плата, которая добавляется к общей стоимости один раз, если транспортное средство задействовано в решении (его маршрут содержит хотя бы один узел, отличный от стартового и конечного).

Устанавливается после создания модели через менеджер целевой функции:

ТС = Модель.ТранспортныеСредства().Получить("ТС1");

Модель.ЦелеваяФункция().УстановитьФиксированнуюСтоимость(ТС, 1000);

Фиксированная стоимость — инструмент, через который решатель балансирует количество задействованных транспортных средств. Чем она выше, тем больше у решателя стимул разместить как можно больше клиентов на одном маршруте, а не дробить их между несколькими ТС. Подробнее — на странице Целевая функция.

Индексация и имена

Транспортным средствам, как и узлам, присваивается порядковый номер с 0. Имя — пользовательское или автогенерируемое (_0, _1, ...).

После вызова Построитель.СоздатьМодель() состав ТС зафиксирован: менеджер Модель.ТранспортныеСредства() поддерживает только чтение.

Обращение к транспортному средству

ТС = Модель.ТранспортныеСредства().Получить(0); // по номеру
ТС = Модель.ТранспортныеСредства().Получить("ТС1"); // по имени

Количество = Модель.ТранспортныеСредства().Количество();

Полный перечень методов

Полный набор методов менеджера транспортных средств — в разделе Программный интерфейс — Транспортные средства.