Расчет проблемы маршрутизации транспортных средств (Solve Vehicle Routing Problem) (Network Analyst)

Уровень лицензии:BasicStandardAdvanced

Резюме

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

ПримечаниеПримечание:

Инструменты Создать слой задачи выбора маршрута транспорта (Make Vehicle Routing Problem Layer) и Решить задачу выбора маршрута транспорта (Solve Vehicle Routing Problem) похожи, но предназначены для различных целей. Используйте инструмент Решить задачу выбора маршрута транспорта (Solve Vehicle Routing Problem) при настройке сервиса геообработки; это упростит процесс настройки. В противном случае используйте инструмент Создать слой задачи выбора маршрута транспорта (Make Vehicle Routing Problem Layer).

Для создания сервиса геообработки VRP с использованием инструмента Решить задачу выбора слоя маршрута транспорта (Solve Vehicle Routing Problem Layer) вам необходимо настроить один инструмент и опубликовать его как сервис. Иначе вам необходимо создать модель при помощи Создать слой задачи выбора маршрута транспорта (Make Vehicle Routing Problem Layer), правильно подключить ее к различным другим инструментам и опубликовать модель для создания сервиса.

См. Обзор примеров сервисов геообработки ArcGIS Network Analyst для получения информации об учебных данных для настройки примера сервиса геообработки VRP.

Использование

Синтаксис

SolveVehicleRoutingProblem_na (orders, depots, routes, breaks, time_units, distance_units, network_dataset, output_workspace_location, output_unassigned_stops_name, output_stops_name, output_routes_name, output_directions_name, {default_date}, {uturn_policy}, {time_window_factor}, {spatially_cluster_routes}, {route_zones}, {route_renewals}, {order_pairs}, {excess_transit_factor}, {point_barriers}, {line_barriers}, {polygon_barriers}, {time_attribute}, {distance_attribute}, {use_hierarchy_in_analysis}, {restrictions}, {attribute_parameter_values}, {maximum_snap_tolerance}, {exclude_restricted_portions_of_the_network}, {feature_locator_where_clause}, {populate_route_lines}, {route_line_simplification_tolerance}, {populate_directions}, {directions_language}, {directions_style_name}, {save_output_layer}, {service_capabilities})
ПараметрОбъяснениеТип данных
orders

Порядки, в которых анализ VRP должен посетить маршруты. Порядок может отображать поставку (например, доставку мебели), сбор у клиента (например, пассажиров автобусом экспресс-маршрута в аэропорт) или другой тип обслуживания или осмотра (например, подрезка деревьев или осмотр строения).

Набор объектов заказа имеет связанную таблицу атрибутов. Ниже приведены поля в таблице атрибутов с описанием.

ObjectID:

Управляемое системой поле ID.

Shape:

Поле геометрии, указывающее на географическое положение объекта сетевого анализа.

Имя:

Имя заказа. Имя должно быть уникальным. Если для имени оставлено значение NULL, оно будет автоматически создано во время расчета.

ServiceTime:

Данное свойство определяет время, которое будет проведено в сетевом положении при достижении его маршрутом; это означает, что оно хранит в себе значение импеданса для сетевого положения. Нулевое значение или значение NULL указывают, что сетевое положение не требует времени обслуживания.

Единица измерения для значения данного поля указывается параметром Единицы поля времени (Time Field Units) (time_units для Python).

TimeWindowStart1:

Время начала и конца первого временного окна для сетевого положения. Это поле может содержать значение NULL; значение NULL показывает отсутствие времени начала.

ПримечаниеПримечание:
  • Временное окно только указывает, когда транспортное средство может прибыть по заказу, но не указывает, когда должно закончиться время обслуживания. Чтобы учесть время обслуживания и выехать до окончания временного окна, вычтите значение ServiceTime из поля TimeWindowEnd1.

  • Поля временных окон могут содержать значение только времени или даты и времени. Если поле времени, такое как TimeWindowStart1, имеет значение только времени (например, 8:00 AM), дата предполагается равной дате, указанной свойством Дата по умолчанию (Default Date) слоя анализа. Использование даты и времени (например, 7/11/2010 8:00 AM) позволяет указывать временные окна, охватывающие несколько дней.

  • Если используются данные трафика, поля времени суток для нового сетевого положения всегда соответствуют тому же часовому поясу, что и ребро, на котором располагается это положение.

TimeWindowEnd1:

Время окончания первого окна для сетевого положения. Это поле может содержать значение NULL; значение NULL показывает отсутствие времени окончания.

TimeWindowStart2:

Время начала и конца второго временного окна для сетевого положения. Это поле может содержать значение NULL; значение NULL показывает отсутствие второго временного окна.

Если первое временное окно содержит NULL, как указано в полях TimeWindowStart1 и TimeWindowEnd1, то второе временное окно также должно иметь значения NULL.

Если оба временных окна непустые, то они не могут перекрываться. Кроме того, второе временное окно должно следовать за первым.

TimeWindowEnd2:

Время окончания второго временного окна для сетевого положения. Это поле может содержать значение NULL.

Когда TimeWindowStart2 и TimeWindowEnd2 оба имеют значение NULL, то второе временное окно отсутствует.

Когда TimeWindowStart2 не NULL, а TimeWindowEnd2 – NULL, то имеется второе временное окно со временем начала, но без времени окончания. Это корректная ситуация.

MaxViolationTime1:

Временное окно считается нарушенным, если прибытие происходит после окончания временного окна. В данном поле указывается максимальное допустимое время нарушения для первого временного окна заказа. Оно может содержать нуль, но не может содержать отрицательные значения. Нулевое значение показывает, что нарушение временного окна в первом временном окне заказа не допустимо; то есть первое временное окно является жестким. С другой стороны, значение NULL показывает, что для допустимого превышения времени предел отсутствует. Ненулевое значение показывает максимальную величину опоздания; например маршрут может прибыть на точку заказа в течении 30 минут после окончания первого временного окна.

Единица измерения для значения данного поля указывается параметром Единицы поля времени (Time Field Units) (time_units для Python).

Превышение временного окна может отслеживаться и взвешиваться механизмом решения. По этой причине вы можете указать механизму решения VRP следующие подходы:

  • Минимизировать общее превышение времени вне зависимости от увеличения стоимости проезда для автопарка.
  • Найти решение, уравновешивающее общее превышение времени и стоимость проезда.
  • Игнорировать общее превышение времени; вместо этого минимизировать стоимость проезда для автопарка.

Назначая уровень важности параметру Значимость превышения временного окна (Time Window Violation Importance) (time_window_factor для Python) вы фактически выбираете один из этих трех подходов. Однако в любом случае механизм расчета приведет к ошибке, если будет превышено значение, заданное для свойства MaxViolationTime1.

MaxViolationTime2:

Максимальное допустимое время нарушения для второго временного окна заказа. Данное поле аналогично полю MaxViolationTime1.

DeliveryQuantities:

Размер доставки. Вы можете указать размер в любом формате, например, масса, объем или количество. Вы даже можете указать несколько размеров, например масса и объем.

Введите количества поставки без указания единиц. Например, если необходимо выполнить доставку объекта массой 300 фунтов по заказу, введите 300. Вам необходимо запомнить, что данное значение приведено в фунтах.

При отслеживании множественных размеров, разделяйте их числовые значения пробелами. Например, если вы записываете массу и объем поставки в 2 000 фунтов и 100 кубических футов, введите 2000 100. И снова вам необходимо запомнить, что данные значения приведены в фунтах и кубических футах. Вам также необходимо запомнить последовательность введенных значений и соответствующие им единицы измерения.

Убедитесь, что аналогичным образом указаны Емкости (Capacities) для Маршрутов (Routes), DeliveryQuantities и PickupQuantities для Заказов (Orders); это означает, что данные значения должны быть указаны в тех же единицах и, если вы используете несколько размеров, то данные размеры должны быть приведены в той же последовательности для всех параметров. Таким образом, если вы указали массу в фунтах, а затем объем в кубических футах для DeliveryQuantities, то емкости ваших маршрутов и количества сборов заказов необходимо указать аналогичным образом: массу в фунтах, объем в кубических футах. При смешении единиц измерения или изменении их последовательности вы получите нежелательные результаты без предварительного уведомления об этом.

Пустая строка или значение NULL соответствует нулю для всех размеров. Если строка содержит недостаточное число значений относительно числа отслеживаемых характеристик емкости или размеров, то оставшиеся значения интерпретируются, как равные нулю. Количество элементов поставки не может быть отрицательными.

PickupQuantities:

Размер сбора. Вы можете указать размер в любом формате, например, масса, объем или количество. Вы даже можете указать несколько размеров, например масса и объем. При этом вы не можете использовать отрицательные значения. Данное поле аналогично полю DeliveryQuantities для Заказов (Orders).

ПримечаниеПримечание:
В случае поездки для замены, заказ может иметь количество как поставки, так и сбора.

Revenue:

Доход, создаваемый в случае включения заказа в решение. Это поле может содержать значение NULL; значение NULL соответствует нулевой прибыли, но не может быть отрицательным.

Прибыль включается в оптимизацию значения целевой функции, но не является частью операционных затрат на решение. Это означает, что поле TotalCost в классе маршрута никогда не включает в выходное значение прибыль; при этом прибыль имеет относительно важную роль при обслуживании заказов.

SpecialtyNames:

Строка, разделенная пробелами и содержащая имена специальных требований, необходимых для заказа. Значение NULL показывает, что маршрут не имеет специальных требований.

Синтаксис всех специальных требований, указанных в классах Заказы (Orders) и Маршруты (Routes), должен полностью совпадать для того, чтобы механизм расчета VRP мог совместить их.

Для иллюстрации того, что такое специальные требования, и как они работают, предположим, что у компании по уходу за газонами и подрезанию деревьев имеется часть заказов, которые требуют применения автоподъёмника с люлькой для обрезки высоких деревьев. Компания введет BucketTruck в поле SpecialtyNames для данных заказов, чтобы указать на наличие специального требования. Поле SpecialtyNames останется пустым (NULL) для остальных заказов. Аналогичным образом, компания введет BucketTruck в поле SpecialtyNames маршрутов, выполняемых грузовиками со гидравлическими стрелами-манипуляторами. Для остальных маршрутов данное поле останется пустым (NULL). Во время расчета механизм расчета задачи о выборе маршрута транспортного средства (VRM) назначит заказы без специального требования любому маршруту, но при этом он назначит заказы с требованием к подъемнику с люлькой тем маршрутам, на которых оно имеется.

AssignmentRule:

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

  • Исключить (Exclude) (0) – заказ будет исключен из последующего решения.
  • Сохранить маршрут и соответствующий порядок следования (Preserve route and relative sequence) (1) – механизм расчета должен всегда назначать заказ для предварительно назначенного маршрута и в предварительно назначенной относительной последовательности во время решения. Если правило назначения нельзя учесть, то это приведет к нарушению заказа.

    При помощи данной настройки поддерживается только относительная последовательность, а не абсолютная. Для иллюстрации данного утверждения представим два заказа: A и B. Они имеют последовательные значения 2 и 3, соответственно. Если вы зададите для их поля AssignmentRule значения Сохранить маршрут и соответствующий порядок следования (Preserve route and relative sequence), то фактические значения последовательности A и B могут изменяться после решения, так как другие заказы, перерывы и посещения станций все еще могут быть перед ними, между или после A и B. Однако B не может следовать до A.

  • Сохранить маршрут (Preserve route) (2) – механизм расчета должен всегда назначать заказ для предварительно назначенного маршрута во время расчета. Действительная последовательность также должна быть задана, даже несмотря на то, что последовательность может сохраняться или нет. Если заказы не могут быть назначены для указанного маршрута, то это приведет к нарушению заказа.
  • Замещение (Override) (3) – механизм расчета пытается сохранить маршрут и предварительно назначенную последовательность для заказа во время расчета. Однако новый маршрут и/или последовательность заказа может быть назначена, если это поможет сократить общее значение объективной функции. Это значение выбрано по умолчанию.

Это поле не может содержать значение NULL.

CurbApproach:

Свойство CurbApproach указывает направление, со стороны которого транспортное средство может прибыть и в котором отправиться из сетевого положения. Можно выбрать четыре варианта (их кодированные значения показаны в скобках):

  • С любой стороны (Either side of vehicle) (0) – Транспортное средство может прибывать и отправляться от сетевого положения в любом направлении. Развороты допустимы. Вам необходимо выбрать данную настройку в том случае, если транспортное средство может сделать разворот на остановке или если оно может съехать на проезжую часть или в место для стоянки и развернуться.
  • Справа по направлению движения (Right side of vehicle) (1) – При подъезде транспортного средства к сетевому положению и отправлению от него, бордюр должен находиться с правой стороны транспортного средства. Разворот запрещен.
  • Слева по направлению движения (Left side of vehicle) (2) – При подъезде транспортного средства к сетевому положению и отправлении от него, бордюр должен находиться с левой стороны транспортного средства. Разворот запрещен.
  • Без разворота (No U-Turn) (3) – При подъезде транспортного средства к сетевому положению бордюр может располагаться с любой стороны транспортного средства. Но при отправлении транспортное средство не должно выполнять разворот.

RouteName:

Имя маршрута, для которого назначен заказ.

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

После вычисления, если заказ присвоен маршруту, то поле RouteName будет содержать имя маршрута, которому был назначен заказ.

Sequence:

Обозначает последовательность заказа на маршруте.

Являясь входным, данное поле используется для указания относительной последовательности для заказа на маршруте. Данное поле может содержать значение NULL, показывающее, что заказ может быть размещен в любой точке маршрута. Значение NULL может иметь место только при значении NULL в RouteName.

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

После расчета в поле Последовательность (Sequence) будут содержаться значения последовательности заказа для назначенного маршрута. Выходные значения последовательности для маршрута едины для посещений станций, заказов и перерывов; начинаются с 1 (на начальной станции); и являются последовательными. Таким образом, минимальным возможным выходным значением последовательности для заказа на маршруте является 2, это обусловлено тем, что маршрут всегда начинается со станции.

Feature Set
depots

Станция – это место, откуда отправляется транспортное средство в начале рабочего дня и куда возвращается по его окончании. Транспортные средства загружаются (при доставке) или разгружаются (при сборе) на станциях в начале маршрута. В некоторых случаях станция может также служить местом пополнения загрузки, в котором транспортное средство может разгружаться или догружаться и продолжать выполнять доставку и сбор. У станции есть значения времени открытия и закрытия, определяемые жестким временным окном. Транспортные средства не могут прибывать на станцию за пределами этого временного окна.

Набор объектов станций имеет связанную таблицу атрибутов. Ниже приведены поля в таблице атрибутов с описанием.

ObjectID:

Управляемое системой поле ID.

Shape:

Поле геометрии, указывающее на географическое положение объекта сетевого анализа.

Имя:

Имя станции. Поля StartDepotName и EndDepotName набора записей Маршруты (Routes) ссылаются на указанные здесь имена. На них также ссылаются наборы записей Обновления маршрутов (Route Renewals) при их использовании.

Имена станций нечувствительны к реестру и должны быть непустыми и уникальными.

TimeWindowStart1:

Время начала и конца первого временного окна для сетевого положения. Это поле может содержать значение NULL; значение NULL показывает отсутствие времени начала.

ПримечаниеПримечание:
  • Поля временных окон могут содержать только значение времени или даты и времени. Если поле времени имеет значение только времени (например, 8:00), дата предполагается равной дате, указанной свойством Дата по умолчанию (Default Date) слоя анализа. Использование значений даты и времени (например, 11.7.2010, 8:00) позволяет вам задавать временные окна, охватывающие несколько дней.

  • Если используются данные трафика, поля времени суток для нового сетевого положения всегда соответствуют тому же часовому поясу, что и ребро, на котором располагается это положение.

TimeWindowEnd1:

Время окончания первого окна для сетевого положения. Это поле может содержать значение NULL; значение NULL показывает отсутствие времени окончания.

TimeWindowStart2:

Время начала и конца второго временного окна для сетевого положения. Это поле может содержать значение NULL; значение NULL показывает отсутствие второго временного окна.

Если первое временное окно содержит NULL, как указано в полях TimeWindowStart1 и TimeWindowEnd1, то второе временное окно также должно иметь значения NULL.

Если оба временных окна непустые, то они не могут перекрываться. Кроме того, второе временное окно должно следовать за первым.

TimeWindowEnd2:

Время окончания второго временного окна для сетевого положения. Это поле может содержать значение NULL.

Когда TimeWindowStart2 и TimeWindowEnd2 оба имеют значение NULL, то второе временное окно отсутствует.

Когда TimeWindowStart2 не NULL, а TimeWindowEnd2 – NULL, то имеется второе временное окно со временем начала, но без времени окончания. Это корректная ситуация.

CurbApproach:

Свойство CurbApproach указывает направление, со стороны которого транспортное средство может прибыть и в котором отправиться из сетевого положения. Можно выбрать четыре варианта (их кодированные значения показаны в скобках):

  • С любой стороны (Either side of vehicle) (0) – Транспортное средство может прибывать и отправляться от сетевого положения в любом направлении. Развороты допустимы. Вам необходимо выбрать данную настройку в том случае, если транспортное средство может сделать разворот на остановке или если оно может съехать на проезжую часть или в место для стоянки и развернуться.
  • Справа по направлению движения (Right side of vehicle) (1) – При подъезде транспортного средства к сетевому положению и отправлению от него, бордюр должен находиться с правой стороны транспортного средства. Разворот запрещен.
  • Слева по направлению движения (Left side of vehicle) (2) – При подъезде транспортного средства к сетевому положению и отправлении от него, бордюр должен находиться с левой стороны транспортного средства. Разворот запрещен.
  • Без разворота (No U-Turn) (3) – При подъезде транспортного средства к сетевому положению бордюр может располагаться с любой стороны транспортного средства. Но при отправлении транспортное средство не должно выполнять разворот.

Направление:

Направление, в котором движется точка. Единицами измерения являются градусы, которые отсчитываются по часовой стрелке от истинного севера. Данное поле используется совместно с полем BearingTol.

Данные направления обычно отправляются автоматически с мобильного устройства, оснащенного GPS-приемником. Попробуйте включить данные направления, если вы загружаете движущийся заказ, например пешехода или транспортное средство.

Использование данного поля обеспечивает защиту от добавления положений на неверные ребра, что может произойти, например, когда транспортное средство расположено недалеко от перекрестка или эстакады. Направление также позволяет Network Analyst определять, на какой стороне улицы расположена точка.

Дополнительные сведения см. в разделе Направление (Bearing) и BearingTol.

BearingTol:

Значение допуска направления создает диапазон приемлемых значений направления при расположении подвижных точек на ребре с помощью поля Направление (Bearing). Если значение из поля Направление (Bearing) находится в пределах допустимых значений, созданных на основании допуска направления на ребре, точка может быть добавлена, как сетевое положение; в противном случае происходит анализ ближайшей точки следующего ближайшего ребра.

Единицами измерения являются градусы, значение по умолчанию равно 30. Значения должны быть больше нуля и меньше 180.

Значение, равное 30, означает, что когда Network Analyst предпринимает попытку добавить сетевое положение на ребро, диапазон допустимых значений направления создается в пределах 15º с каждой стороны ребра (слева и справа), в обоих оцифрованных направлениях ребра.

Дополнительные сведения см. в разделе Направление (Bearing) и BearingTol.

NavLatency:

Данное поле используется при расчете только, если для Направления (Bearing) и BearingTol также введены значения; при этом ввод значения NavLatency является необязательным, даже если для Направления (Bearing) и BearingTol заданы значения. NavLatency определяет время, которое должно пройти от момента передачи GPS информации от движущегося транспортного средства на сервер, а также момент, когда обработанный маршрут получен устройством навигации транспортного средства. Единицы времени NavLatency аналогичны единицам сетевого атрибута стоимости, параметра Атрибут времени (Time Attribute).

Feature Set
routes

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

Маршрут может учитывать время начала и окончания обслуживания на станции, фиксированное или гибкое время начала, операционные затраты на основании времени и на основании расстояния, различные ограничения по рабочему дню водителя и т. д.

Набор записей маршрута имеет несколько атрибутов. Ниже приведены поля в таблице атрибутов с описанием.

Имя:

Название маршрута. Имя должно быть уникальным.

Network Analyst создает уникальное имя во время расчета, если значение поля – NULL. Таким образом, ввод значения в большинстве случаев является необязательным. Однако вам необходимо ввести имя, если анализ содержит перерывы, обновления маршрута, зоны маршрутов или заказы, которые были предварительно назначены для маршрута, так как имя маршрута в данном случае используется как внешний ключ. Обратите внимание, что имена маршрутов чувствительны к регистру.

StartDepotName:

Имя начальной станции маршрута. Это поле является внешним ключом для поля Имя (Name) в классе Станции (Depots).

Если значение StartDepotName равно нулю, то маршрут начинается с первого назначенного заказа. Исключение начальной станции полезно в том случае, если начальное положение транспортного средства неизвестно или неважно для вашей задачи. При этом, если значение StartDepotName равно нулю, то EndDepotName не может быть равно нулю.

Если маршрут выполняет доставку и StartDepotName равен нулю, то предполагается, что груз загружен в транспортное средство на виртуальной станции перед началом маршрута. Для маршрута без обновления заказы маршрутов (с ненулевыми значениями DeliveryQuantities в классе Заказы (Orders)) загружаются на начальной станции или виртуальной станции. Для маршрута с обновлениями, на начальной или виртуальной станции выполняется загрузка только тех заказов маршрутов, которые выполняются до первого обновления.

EndDepotName:

Имя конечной станции маршрута. Это поле является внешним ключом для поля Имя (Name) в класса Станции (Depots).

StartDepotServiceTime:

Время обслуживания на начальной станции. Может использоваться для моделирования времени, затраченного на загрузку транспортного средства. Это поле может содержать значение NULL; значение NULL соответствует нулевому времени обслуживания.

Единица измерения для значения данного поля указывается параметром Единицы поля времени (Time Field Units) (time_units для Python).

ПримечаниеПримечание:

Время обслуживания на начальной и конечной станции является фиксированным (определяется значениями полей StartDepotServiceTime и EndDepotServiceTime) и не учитывает фактическую загрузку для маршрута. Например, время, затраченное на загрузку транспортного средства на начальной станции, может зависеть от размера заказов. Таким образом, время на обслуживание на станции может быть равно времени, соответствующему полной загрузке грузовика, его средней загрузке или другому времени на ваш выбор.

EndDepotServiceTime:

Время обслуживания на конечной станции. Может использоваться для моделирования времени, затраченного на разгрузку транспортного средства. Это поле может содержать значение NULL; значение NULL соответствует нулевому времени обслуживания.

Единица измерения для значения данного поля указывается параметром Единицы поля времени (Time Field Units) (time_units для Python).

ПримечаниеПримечание:

Время обслуживания на начальной и конечной станции является фиксированным (определяется значениями полей StartDepotServiceTime и EndDepotServiceTime) и не учитывает фактическую загрузку для маршрута. Например, время, затраченное на загрузку транспортного средства на начальной станции, может зависеть от размера заказов. Таким образом, время на обслуживание на станции может быть равно времени, соответствующему полной загрузке грузовика, его средней загрузке или другому времени на ваш выбор.

EarliestStartTime:

Наиболее ранее допустимое время начала маршрута. Используется механизмом решения в сочетании с временным окном для начальной станции, чтобы определить времена начала выполнимого маршрута.

Это поле не может содержать значения NULL и имеет по умолчанию значение только времени 8:00; значение по умолчанию интерпретируется как 8:00 утра даты, заданной параметром Дата по умолчанию (Default Date) (default_date для Python).

При использовании наборов сетевых данных с данными трафика, охватывающими несколько часовых поясов, часовой пояс для EarliestStartTime такой же, как и часовой пояс для ребра или соединения, на котором расположена начальная станция.

LatestStartTime:

Наиболее позднее допустимое время начала маршрута. Это поле не может содержать нулевые значения и имеет по умолчанию значение только времени 10:00; значение по умолчанию интерпретируется как 10:00 утра даты, заданной свойством Дата по умолчанию (Default Date) слоя анализа.

При использовании наборов сетевых данных с данными трафика, охватывающими несколько часовых поясов, часовой пояс для LatestStartTime такой же, как и часовой пояс для ребра или соединения, на котором расположена начальная станция.

ArriveDepartDelay:

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

Стоимость для этого свойства выводится между визитами по несовпадающим заказам, станциям и обновлениям маршрута. Например, если маршрут начинается со станции и посещает первый заказ, ко времени пути добавляется общая задержка прибытия/отправления. То же касается пути от первого заказа ко второму. Если второй и третий заказы совпадают, значение ArriveDepartDelay между ними не добавляется, поскольку транспортному средству не нужно перемещаться. Если маршрут следует к пункту обновления загрузки, значение снова добавляется ко времени в пути.

Хотя транспортному средству необходимо замедляться и останавливаться на перерыв, а после него ускоряться, механизм расчета задачи выбора маршрута транспорта не может добавлять значение ArriveDepartDelay для перерывов. Это значит, что при выезде с заказа, остановке на перерыв и продолжении движения к следующему заказу, задержка прибытия/отправления добавляется только один раз, а не два.

Для иллюстрации данного утверждения предположим, что имеются пять совпадающих заказов в одном небоскребе, которые обслуживаются тремя разными маршрутами. Это значит, что нужно добавить три задержки прибытия/отправления; то есть трем водителям необходимо раздельно найти места для парковки и войти в одно и то же здание. Однако если заказы могут быть обслужены всего одним маршрутом, парковаться и входить в здание необходимо только одному водителю – и возникает только одна задержка прибытия/отправления. Поскольку механизм расчета задачи выбора маршрута транспорта пытается минимизировать затраты, он попробует ограничить задержки прибытия/отправления и поэтому выберет вариант с одним маршрутом. (Обратите внимание, что при наличии других ограничений – специальных требований, временных окон или емкости – могут понадобиться несколько маршрутов.)

Единица измерения для значения данного поля указывается параметром Единицы поля времени (Time Field Units) (time_units для Python).

Capacities:

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

Введите вместимости без указания единиц. Например, для транспортного средства, способного перевезти не более 40 000 фунтов, необходимо ввести 40000. Вам надо запомнить, что данное значение приведено в фунтах.

При отслеживании множественных размеров, разделяйте их числовые значения пробелами. Например, для записи максимального веса и максимального объема транспортного средства, равных 40 000 фунтов и 2 000 кубических футов, в качестве параметра Вместимость (Capacities) следует задать значение 40000 2000. И снова вам необходимо запомнить единицы измерения. Вам также нужно помнить последовательность введенных значений и соответствующие им единицы измерения (в данном случае фунты, а затем кубические футы).

Запомнить единицы измерения и их последовательность важно по нескольким причинам: во-первых, для возможности интерпретации информации в будущем, во-вторых для правильного ввода значений полей DeliveryQuantities и PickupQuantities для Заказы (Orders). Для конкретизации второго пункта помните, что механизм решения VRP одновременно ссылается на Capacities, DeliveryQuantities и PickupQuantities для того, чтобы маршрут не стал перегруженным. Так как единицы измерения не могут быть введены в поле, Network Analyst не может выполнить преобразование, поэтому вам необходимо вводить значения для трех полей с использованием аналогичных единиц измерения и в той же последовательности, чтобы обеспечить правильность интерпретации значений. При смешении единиц измерения или изменении последовательности этих трех полей вы получите нежелательные результаты без уведомления об этом. Таким образом, необходимо задать стандарт ввода единиц измерения и определенную последовательность и постоянно использовать ее при вводе значений для этих трех полей.

Пустая строка или значение NULL соответствует нулю для всех значений. Значения емкости не могут быть отрицательными.

Если строка Вместимость (Capacities) содержит недостаточное число значений относительно полей DeliveryQuantities или PickupQuantities заказов, то оставшиеся значения интерпретируются как равные нулю.

ВниманиеВнимание:

Механизм расчета VRP только выполняет простой двоичный тест для определения превышения емкостей. Если значением емкости маршрута выше или равно общей вместимости, то механизм расчета VRP предположит, что груз помещается в транспортное средство. Это может быть неверно, в зависимости от фактической формы груза и транспортного средства. Например, механизм расчета VRP позволяет вам вместить сферу объемом 1 000-кубических футов в грузовик вместимостью 1 000 кубических футов и шириной 8 футов. В действительности, сфера имеет диаметр 12,6 футов и ее нельзя вместить в грузовик шириной 8 футов.

FixedCost:

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

CostPerUnitTime:

Примененная денежная стоимость – на единицу времени работы – для общей продолжительности маршрута, включая значения времени в пути, а также времени обслуживания и ожидания на заказах, станциях и в перерывах. Это поле не может содержать значение NULL и имеет значение по умолчанию, равное 1,0.

Единица измерения для значения данного поля указывается параметром Единицы поля времени (Time Field Units) (time_units для Python).

CostPerUnitDistance:

Примененная денежная стоимость – на единицу пройденного расстояния – для длины маршрута (общее пройденное расстояние). Это поле может содержать значения NULL; значение NULL соответствует нулевой стоимости.

Единица измерения для значения данного поля указывается параметром Единицы поля расстояния (Distance Field Units) (distance_units для Python).

OvertimeStartTime:

Продолжительность регулярного времени работы перед началом вычисления сверхурочных. Это поле может содержать значения NULL; значение NULL соответствует отсутствию сверхурочных.

Единица измерения для значения данного поля указывается параметром Единицы поля времени (Time Field Units) (time_units для Python).

Например, если водителю выплачиваются сверхурочные, если общая длительность маршрута превышает восемь часов, значение OvertimeStartTime указывается равным 480 (8 часов * 60 минут/час), при этом свойству Единицы поля расстояния (Distance Field Units) задано значение Минуты (Minutes).

CostPerUnitOvertime:

Денежная стоимость для единицы времени сверхурочной работы. Это поле может содержать значения NULL; значение NULL соответствует равенству значений CostPerUnitOvertime и CostPerUnitTime.

MaxOrderCount:

Максимальное допустимое число заказов на маршруте. Это поле не может содержать значения NULL и имеет значение по умолчанию, равное 30.

MaxTotalTime:

Максимально допустимая продолжительность маршрута. Продолжительность (длительность) маршрута включает в себя значения времени в пути, а также времени обслуживания и ожидания на заказах, на станциях и в перерывах. Это поле может содержать значения NULL; значение NULL соответствует отсутствию ограничений по продолжительности маршрута.

Единица измерения для значения данного поля указывается параметром Единицы поля времени (Time Field Units) (time_units для Python).

MaxTotalTravelTime:

Максимально допустимое время в пути для маршрута. Данное время в пути содержит только время, затраченное на движение по сети, и не включает в себя время обслуживания или ожидания.

Это поле может содержать значения NULL; значение NULL соответствует отсутствию ограничений по максимально допустимому времени передвижения по маршруту. Значение данного поля не может быть выше значения поля MaxTotalTime.

Единица измерения для значения данного поля указывается параметром Единицы поля времени (Time Field Units) (time_units для Python).

MaxTotalDistance:

Максимально допустимое расстояние движения для маршрута.

Единица измерения для значения данного поля указывается параметром Единицы поля расстояния (Distance Field Units) (distance_units для Python).

Это поле может содержать значения NULL; значение NULL соответствует отсутствию ограничений по максимально допустимому расстоянию для маршрута.

SpecialtyNames:

Строка, разделенная пробелами и содержащая имена специальных требований, поддерживаемых маршрутом. Нулевое значение указывает, что маршрут не поддерживает никаких специальных требований.

Это поле является внешним ключом для поля SpecialtyNames в классе заказов.

Для иллюстрации того, что такое специальные требования, и как они работают, предположим, что у компании по уходу за газонами и подрезанию деревьев имеется часть заказов, которые требуют применения автоподъёмника с люлькой для обрезки высоких деревьев. Компания введет BucketTruck в поле SpecialtyNames для данных заказов, чтобы указать на наличие специального требования. Поле SpecialtyNames останется пустым (NULL) для остальных заказов. Аналогичным образом, компания введет BucketTruck в поле SpecialtyNames маршрутов, выполняемых грузовиками со гидравлическими стрелами-манипуляторами. Для остальных маршрутов данное поле останется пустым (NULL). Во время расчета механизм расчета задачи о выборе маршрута транспортного средства (VRM) назначит заказы без специального требования любому маршруту, но при этом он назначит заказы с требованием к подъемнику с люлькой тем маршрутам, на которых оно имеется.

AssignmentRule:

Определяет, может ли маршрут быть использован для решения задачи. Это поле ограничено доменом значений; возможные значения:

  • Включить (Include) – Маршрут включен в решение. Это значение выбрано по умолчанию.
  • Исключить (Exclude) – Маршрут исключен из решения.

Record Set
breaks

Оставшиеся периоды или перерывы для маршрутов в заданной задаче нахождения маршрута транспорта. Перерыв связан ровно с одним маршрутом и может быть взят после выполнения заказа, на пути к заказу или перед обслуживанием заказа. У него есть время начала и длительность, которые могут оплачиваться или не оплачиваться водителю. Имеется три способа установки начала перерыва: при помощи временного окна, максимального времени в пути или максимального времени работы.

Набор записей перерыва имеет связанные атрибуты. Ниже приведены поля в таблице атрибутов с описанием.

ObjectID:

Управляемое системой поле ID.

RouteName:

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

Данное поле является внешним ключом для поля Имя (Name) в классе Маршруты (Routes) и не может содержать значение NULL.

Precedence:

Значения приоритета (Precedence) определяют последовательность перерывов для заданного маршрута. Перерывы со значением приоритета 1 происходят до перерывов со значением 2 и т. д.

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

ServiceTime:

Продолжительность перерыва. Это поле может содержать значения NULL; значение NULL соответствует отсутствию времени обслуживания.

Единица измерения для значения данного поля указывается параметром Единицы поля времени (Time Field Units) (time_units для Python).

TimeWindowStart:

Время начала временного окна перерыва.

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

Если данное поле имеет значение, то MaxTravelTimeBetweenBreaks и MaxCumulWorkTime должны быть пустыми (null); более того, все остальные перерывы в слое анализа должны иметь значения NULL для параметров MaxTravelTimeBetweenBreaks и MaxCumulWorkTime.

Если маршрут имеет множество перерывов с перекрывающимися временными окнами, то во время решения будет возникать ошибка.

Поля временных окон в перерывах могут содержать значение только времени или даты и времени. Если поле времени, например TimeWindowStart, имеет значение только времени (например, 24:00), дата предполагается равной дате, указанной в параметре Дата по умолчанию (Default Date) (default_date for Python). Использование значений даты и времени (например, «7/11/2012 12:00 PM») позволяет указывать временные окна, охватывающие два и более дней. Это особенно полезно, если перерыв следует сделать в районе полуночи.

При использовании наборов сетевых данных с данными трафика, охватывающими несколько часовых поясов, часовой пояс для TimeWindowStart и TimeWindowEnd принимается таким же, как и часовой пояс для ребра или соединения, на котором расположена начальная станция.

TimeWindowEnd:

Время окончания временного окна перерыва.

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

Если данное поле имеет значение, то MaxTravelTimeBetweenBreaks и MaxCumulWorkTime должны быть пустыми (null); более того, все остальные перерывы в слое анализа должны иметь значения NULL для параметров MaxTravelTimeBetweenBreaks и MaxCumulWorkTime.

MaxViolationTime:

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

Нулевое значение указывает, что временное окно не может быть нарушено; то есть это окно является жестким. Ненулевое значение указывает максимальную величину опоздания: например, перерыв может начаться до 30 минут после окончания выделенного ему временного окна, но штраф за опоздание рассчитывается в соответствии с параметром Значимость превышения временного окна (Time Window Violation Importance) (time_window_factor для Python).

Это свойство может быть пустым (null); значение NULL в параметрах TimeWindowStart и TimeWindowEnd соответствует отсутствию ограничений по допустимому времени нарушения. Если для параметров MaxTravelTimeBetweenBreaks или MaxCumulWorkTime задано значение, то MaxViolationTime должен быть пустым (null).

Единица измерения для значения данного поля указывается параметром Единицы поля времени (Time Field Units) (time_units для Python).

MaxTravelTimeBetweenBreaks:

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

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

Это поле предназначено для ограничения длительности вождения транспортного средства человеком, прежде чем потребуется перерыв. Например, если для параметра Единицы поля времени (Time Field Units) (time_units для Python) анализа установлено значение Минуты (Minutes), а свойство MaxTravelTimeBetweenBreaks имеет значение 120, водитель получит перерыв через два часа вождения. Чтобы назначить второй перерыв еще через два часа вождения, свойству MaxTravelTimeBetweenBreaks второго перерыва следует присвоить значение 120.

Если данное поле имеет значение, то TimeWindowStart, TimeWindowEnd, MaxViolationTime и MaxCumulWorkTime должны быть пустыми (NULL) для успешного выполнения анализа.

Единица измерения для значения данного поля указывается параметром Единицы поля времени (Time Field Units) (time_units для Python).

MaxCumulWorkTime:

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

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

Это поле предназначено для ограничения длительность работы человека, прежде чем потребуется перерыв. Например, если для свойства Единицы поля времени (Time Field Units) (time_units для Python) установлено значение "Минуты" (Minutes), свойство MaxCumulWorkTime имеет значение 120, а ServiceTime – значение 15, водитель получит 15-минутный перерыв через два часа работы.

Продолжая рассматривать последний пример, предположим, что второй перерыв должен начаться через три часа работы. Для указания данного перерыва необходимо ввести значение 315 (пять часов и 15 минут) в параметр MaxCumulWorkTime второго перерыва. Данное значение включает в себя MaxCumulWorkTime и ServiceTime предыдущего перерыва, а также три дополнительных часа работы до второго перерыва. Во избежание перерывов с максимальным временем работы, помните, что они суммируют время работы от начала маршрута, а также, что время работы включает в себя время обслуживания на предварительно посещенных станциях, заказах и в перерывах.

Если данное поле имеет значение, то TimeWindowStart, TimeWindowEnd, MaxViolationTime и MaxTravelTimeBetweenBreaks должны быть пустыми (NULL) для успешного выполнения анализа.

Единица измерения для значения данного поля указывается параметром Единицы поля времени (Time Field Units) (time_units для Python).

IsPaid:

Булево значение, указывающее, будет ли перерыв оплачиваемым или нет. Значение Истина (True) определяет, что время, затраченное на перерыв, включается в расчет затрат маршрута и определение сверхурочных. Значение Ложь (False) определяет обратное. По умолчанию используется значение Истина (True).

Sequence:

Являясь входным, данное поле показывает последовательность перерыва на его маршруте. Это поле может содержать значения NULL. Значения входной последовательности являются положительными и уникальными для каждого маршрута (распределенного среди посещений станций, заказов и перерывов), но не обязаны начинаться с 1 или быть последовательными.

Механизм расчета изменяет поле последовательности. После решения данное поле содержит значение последовательности перерыва на его маршруте. Выходные значения последовательности для маршрута едины для посещений станций, заказов и перерывов; начинаются с 1 (на начальной станции); и являются последовательными.

Record Set
time_units

Единицы измерения времени для значений времени в анализе.

  • Секунды (Seconds)
  • Минуты (Minutes)
  • Часы (Hours)
  • Дни (Days)

Многие объекты и записи в анализе VRP содержат поля для записи значений времени, например ServiceTime для Заказов (Orders) и CostPerUnitTime для Маршрутов (Routes). Для сокращения требований по вводу данных эти значения не должны включать единицы. Вместо этого все значения на основании расстояния должны быть введены в одних единицах, данный параметр используется для указания единиц этих значений.

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

Данная единица времени не должна совпадать с единицей времени сетевого параметра Атрибут времени (Time Attribute) (time_attribute).

String
distance_units

Единицы измерения расстояния для всех полей на основании расстояния в анализе.

  • Мили
  • Километры
  • Футы
  • Ярды
  • Метры
  • Морские мили

Многие объекты и записи в анализе VRP содержат поля для записи значений расстояния, например, MaxTotalDistance и CostPerUnitDistance для Маршруты (Routes). Для сокращения требований по вводу данных эти значения не должны включать единицы. Вместо этого все значения на основании расстояния должны быть введены в одних единицах, данный параметр используется для указания единиц этих значений.

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

Данная единица расстояния не должна совпадать с единицей расстояния сетевого параметра Атрибут расстояния (Distance Attribute) (distance_attribute).

String
network_dataset

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

Network Dataset Layer
output_workspace_location

База геоданных ArcSDE, файловая база геоданных или виртуальная рабочая область, в которой создаются выходные классы пространственных объектов. Рабочая область должна существовать. Выходная рабочая область по умолчанию находится в памяти компьютера.

Workspace
output_unassigned_stops_name

Имя выходного класса пространственных объектов, которое будет содержать недостижимые станции или не назначенные заказы.

String
output_stops_name

Имя класса пространственных объектов, которое будет содержать остановки, посещаемые маршрутами. Данный класс пространственных объектов включает остановки на станциях, в местах заказа и в перерывах.

String
output_routes_name

Имя класса пространственных объектов, которое будет содержать маршруты анализа.

String
output_directions_name

Имя класса пространственных объектов, которое будет содержать направления для маршрутов.

String
default_date
(дополнительно)

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

Date
uturn_policy
(дополнительно)

Правила разворота на соединениях. При разрешении U-образных разворотов неявно предполагается, что механизм расчета может развернуться на соединении и продолжить движение по той же улице в обратную сторону. Учитывая, что соединения представляют собой пересечения улиц и тупики, различные транспортные средства могут разворачиваться на некоторых соединениях, но не на всех – это зависит от того, является ли соединение перекрестком или тупиком. Для соответствия, параметр правил разворотов в неявном виде указывает количество ребер, участвующих в соединении, что представляет собой валентность соединения. Ниже приведены допустимые значения для данного параметра; каждое из них сопровождается описанием значения в терминах валентности соединения.

  • ALLOW_UTURNSРазвороты разрешены в соединениях с любым количеством смежных ребер. Это значение выбрано по умолчанию.
  • NO_UTURNSРазвороты запрещены во всех соединениях, вне зависимости от их валентности. Обратите внимание, что, даже при выборе этого параметра, развороты все же разрешены в сетевых положениях. Чтобы запретить развороты и в положениях сети, можно задать индивидуальное свойство положения CurbApproach.
  • ALLOW_DEAD_ENDS_ONLYРазвороты запрещены во всех соединениях, кроме тех, у которых имеется только одно смежное ребро (тупик).
  • ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLYРазвороты запрещены в соединениях с ровно двумя смежными ребрами, но разрешены на перекрестках (в соединениях с тремя смежными ребрами или более) и в тупиках (соединениях с ровно одним смежным ребром). Зачастую сети имеют избыточные соединения в середине сегмента дороги. Этот вариант позволяет предотвратить развороты транспортных средств в подобных точках.
ПодсказкаПодсказка:

При необходимости более точного определения правил разворотов, рассмотрите возможность добавления оценки задержек на универсальных поворотах к атрибуту сетевой стоимости или настройки его параметров, если таковой существует, а также обратите особое внимание на конфигурацию обратных поворотов. Кроме того, ознакомьтесь с заданным свойством CurbApproach для ваших сетевых положений.

String
time_window_factor
(дополнительно)

Определяет ранги значения для временных окон. Имеется три параметра, которые описаны ниже.

  • Низкий (Low)Устанавливает более высокую значимость для сокращения времени в пути и меньшее – для прибытия на остановки в указанное время. Этот параметр также можно использовать при накоплении отставания в обработке заказов. Для обработки как можно большего количества заказов в день и сокращения отставания можно выбрать Низкий (Low) несмотря на то, что клиенты могут испытывать неудобства из-за позднего прибытия транспортных средств.
  • Medium (средний)Это значение выбрано по умолчанию. Соблюдается баланс между сокращением времени в пути и соблюдением временных окон при прибытии.
  • ВысокийУстанавливает более высокую значимость для прибытия на остановки в указанное время и менее высокую – для сокращения времени в пути. Организации, выполняющие доставки, критичные ко времени или озабоченные обслуживанием клиента должны выбрать значение Высокий (High).
String
spatially_cluster_routes
(дополнительно)
  • CLUSTER Для всех маршрутов автоматически создаются основные динамические точки, а заказы, назначенные для отдельного маршрута, делятся на кластеры. Деление заказов на кластеры приводит к сохранению маршрутов в небольших областях и сокращает частоту пересечения линий различных маршрутов; при этом, деление на кластеры также приводит к увеличению общего времени в пути.
  • NO_CLUSTER Основные динамические точки не создаются. Выберите данный параметр, если указаны зоны маршрута.
Boolean
route_zones
(дополнительно)

Очерчивает рабочие территории для заданных маршрутов. Зона маршрута – это полигональный пространственный объект, который используется для ограничения маршрутов обслуживанием только тех заказов, которые находятся в пределах указанной области или вблизи нее. Вот несколько примеров, когда зоны маршрутов могут быть полезны:

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

Набор объектов зон маршрутов имеет связанную таблицу атрибутов. Ниже приведены поля в таблице атрибутов с описанием.

ObjectID:

Управляемое системой поле ID.

Shape:

Поле геометрии, указывающее на географическое положение объекта сетевого анализа.

RouteName:

Название маршрута, для которого применяется данная зона. Зона маршрута может иметь не более одного связанного маршрута. Это поле не может содержать значения NULL и является внешним ключом для поля Имя (Name) в классе слоя Маршруты (Routes).

IsHardZone:

Двоичное значение, определяющее гибкую или жесткую зону маршрута. Значение Истина (True) определяет жесткую зону; это означает, что заказ, выходящий за пределы полигона зоны маршрута, не может быть назначен этому маршруту. По умолчанию используется значение Истина (True) (1). Значение Ложь (False) (0) определяет, что такие заказы все еще могут быть назначены, но стоимость обслуживания заказа взвешена на основании функции евклидова расстояния от зоны маршрута. Обычно это означает что, по мере увеличения расстояния по прямой от гибкой зоны до заказа вероятность того, что заказ будет присвоен маршруту, уменьшается.

Feature Set
route_renewals
(дополнительно)

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

Обновления маршрутов могут использоваться для моделирования сценариев, в которых транспортное средство набирает полный объем доставляемых грузов на начальной станции, обслуживает заказы, возвращается на станцию для новой загрузки и продолжает обслуживать дальнейшие заказы. Например, при доставке газа пропана транспортное средство может осуществить несколько доставок до тех пор, пока его резервуар не будет почти или полностью опустошен, посетить пункт дозаправки и осуществлять дальнейшую доставку.

Вот несколько правил и вариантов выбора, которые также следует учитывать при работе с исходными точками маршрутов:

  • Пункт догрузки/выгрузки (место пополнения загрузки) может отличаться от начальной и конечной станций.
  • На каждом маршруте может быть одно или несколько предустановленных мест пополнения загрузки.
  • Место пополнения загрузки может использоваться на одном маршруте несколько раз.
  • В некоторых случаях при наличии нескольких потенциальных мест пополнения загрузки для маршрута механизмом расчета выбирается ближайшее доступное из них.

Набор записей обновлений маршрута имеет связанные атрибуты. Ниже приведены поля в таблице атрибутов с описанием.

ObjectID:

Управляемое системой поле ID.

DepotName:

Имя станции, в которой происходит такое обновление. Это поле не может содержать значение NULL и является внешним ключом для поля Имя (Name) в классе слоя Станции (Depots).

RouteName:

Название маршрута, к которому применяется данное обновление. Это поле не может содержать значение NULL и является внешним ключом для поля Имя (Name) в классе слоя Маршруты (Routes).

ServiceTime:

Время обслуживания для обновления. Это поле может содержать значение NULL; значение NULL соответствует нулевому времени обслуживания.

Единица измерения для значения данного поля устанавливается свойством Единицы поля времени (Time Field Units) слоя анализа.

ПримечаниеПримечание:

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

Record Set
order_pairs
(дополнительно)

Пары заказов сбора и доставки, которые обслуживаются на одном маршруте.

Иногда необходимо, чтобы сбор и доставка по заказам производились совместно. Например, курьерской компании может потребоваться маршрут для сбора посылки с высоким приоритетом от одного заказчика и доставки ее другому без возврата на станцию или сортировочную станцию с целью сокращения времени доставки. Эти связанные заказы могут назначаться одному и тому же маршруту с соответствующей последовательностью при помощи спаренных заказов. Более того, могут существовать ограничения продолжительности хранения посылки в транспортном средстве; например, посылка может содержать образец крови, который должен быть перевезен из офиса врача в лабораторию в течение двух часов.

Набор записей пар заказов имеет связанные атрибуты. Ниже приведены поля в таблице атрибутов с описанием.

ObjectID:

Управляемое системой поле ID.

FirstOrderName:

Имя первого заказа в паре. Это поле является внешним ключом для поля Имя (Name) в слое пространственных объектов Заказы (Orders).

SecondOrderName:

Имя второго заказа в паре. Это поле является внешним ключом для поля Имя (Name) в слое пространственных объектов Заказы (Orders).

Первый заказ в паре должен быть заказом сбора, это означает, что значение поля DeliveryQuantities для него пустое (NULL). Второй заказ в паре должен быть заказом доставки, это означает, что значение поля PickupQuantities для него пустое (NULL). Количество, которое собирается в первом заказе, должно соответствовать количеству, поставляемому во втором заказе. В отдельном случае оба заказа могут иметь нулевые количества для сценариев, в которых емкости не используются.

ПримечаниеПримечание:

Заказы не загружаются и не разгружаются в станциях.

MaxTransitTime:

Максимальное время нахождения в пути для пары. Время нахождения в пути представляет собой продолжительность от времени отправления для первого заказа до времени прибытия на точку второго заказа. Это ограничение влияет на время в транспортном средстве, или время поездки, между двумя заказами. Когда транспортное средство перевозит людей или скоропортящиеся продукты, то время в пути, обычно, меньше времени для транспортного средства, перевозящего посылки или продукты, которые долго хранятся. Это поле может содержать значения NULL; значение NULL соответствует отсутствию ограничений по времени поездки.

Единица измерения для значения данного поля устанавливается свойством Единицы поля времени (Time Field Units) слоя анализа.

Механизмом расчета может отслеживаться и учитываться лишнее время в пути (измеряемое с учетом непосредственного времени в пути между парами заказов). По этой причине можно задать для механизма решения задачи выбора маршрута транспорта один из трех подходов: (1) минимизировать общее лишнее время в пути, независимо от увеличения стоимости пути для парка; (2) найти баланс между общим временем нарушений и стоимостью пути; (3) игнорировать общее лишнее время в пути и вместо этого минимизировать стоимость пути для парка. Назначая уровень значимости для параметра Значимость избыточного времени нахождения в пути (Excess Transit Time Importance) (excess_transit_factor для Python), вы фактически выбираете один из этих трех подходов. Независимо от уровня значимости, механизм расчета всегда будет приводить к ошибке при превышении значения свойства MaxTransitTime.

Record Set
excess_transit_factor
(дополнительно)

Уровни важности сокращения лишнего времени в пути для пар заказов. Избыточное время в пути – это затрачиваемое сверх необходимого время для перемещения от одного вызова к другому. Избыточное время в пути может быть вызвано перерывами в работе водителя или движением к промежуточным заказам и станциям. Ниже представлены три значения, из которых можно сделать выбор.

  • Низкий (Low)Программа расчета пытается найти решение, минимизирующее общие затраты, независимо от избыточного времени в пути. Этот параметр обычно используется курьерской службой. Поскольку курьерская служба перевозит грузы, а не людей, ей не нужно особенно заботиться о времени в пути. Значение Low (Низкий) позволяет курьерской службе обрабатывать два вызова в должной очередности с минимальными общими затратами.
  • Medium (средний)Это установка по умолчанию. Программа расчета будет стремиться найти компромиссное решение с одновременным сокращением избыточного времени и обеспечением минимальных общих затрат.
  • ВысокийМеханизм расчета пытается найти решение, минимизирующее избыточное время в пути между парными заказами за счет увеличения общей стоимости перемещения. Имеет смысл использовать этот параметр при необходимости перевозки людей между парами заказов и вы хотите сократить их время в пути. Эта опция подходит для такси.
String
point_barriers
(дополнительно)

Определяет точечные барьеры, которые разделены на два типа: ограничения и дополнительной стоимости. Они временно ограничивают прохождение по сети или добавляют импеданс к точкам сети. Точечные барьеры задаются набором объектов, а значения атрибута, которые вы указываете для точечных объектов, определяют, являются ли они ограничениями или барьерами дополнительной стоимости. Ниже приведены поля в таблице атрибутов и их описания.

ObjectID:

Управляемое системой поле ID.

Shape:

Поле геометрии, показывающее географическое положение объекта сетевого анализа.

Name:

Имя барьера.

BarrierType:

Указывает, ограничивает ли барьер перемещение полностью или добавляет стоимость при прохождении через него. Существует две опции:

  • Ограничение (Restriction) (0) – запрещает прохождение через барьер. Это значение используется по умолчанию.
  • Дополнительная стоимость (Added Cost) (2) – прохождение через барьер увеличивает сетевую стоимость на значение, указанное в полях Additional_Time и AdditionalDistance.

Additional_Time:

Если для параметра BarrierType задана дополнительная стоимость, то значение поля Additional_Time показывает, сколько времени будет добавлено к маршруту при его прохождении через барьер.

Единица измерения для значения данного поля задается свойством Единицы поля времени (Time Field Units) для слоя анализа.

Additional_Distance:

Если для параметра BarrierType задана дополнительная стоимость, то значение поля Additional_Distance показывает величину импеданса, добавляемого к маршруту при его прохождении через барьер.

Единица измерения для значения данного поля указывается параметром Единицы поля расстояния (Distance Field Units).

Feature Set
line_barriers
(дополнительно)

Определяет линейные барьеры, которые временно ограничивают прохождение через них. Линейные барьеры определяются набором объектов. Ниже приведены поля в таблице атрибутов с описанием.

ObjectID:

Управляемое системой поле ID.

Shape:

Поле геометрии, показывающее географическое положение объекта сетевого анализа.

Name:

Имя барьера.

Feature Set
polygon_barriers
(дополнительно)

Определяет полигональные барьеры, которые разделены на два типа: ограничения и полигональные барьеры масштабированной стоимости. Они временно ограничивают перемещение или масштабируют импеданс в покрываемых ими частях сети. Полигональные барьеры задаются набором объектов, а значения атрибута, которые вы указываете для полигональных объектов, определяют, являются ли они ограничениями или барьерами дополнительной стоимости. Ниже приведены поля в таблице атрибутов с описанием.

ObjectID:

Управляемое системой поле ID.

Shape:

Поле геометрии, показывающее географическое положение объекта сетевого анализа.

Name:

Имя барьера.

BarrierType:

Указывает, ограничивает ли барьер перемещение полностью или масштабирует стоимость прохождения через него. Существует две опции:

  • Ограничение (Restriction) (0) – запрещает прохождение через любую часть барьера. Это значение используется по умолчанию.
  • Масштабированная стоимость (Scaled Cost) (1) – масштабирует импеданс для расположенных снизу ребер путем их умножения на значение свойства Attr_[Impedance]. Если ребра частично покрыты барьером, то импеданс распределяется и умножается.

Scaled_Time:

Основанные на времени значения импеданса для ребер, расположенных под барьером, умножаются на значение, введенное в данное поле. Данное поле используется только в том случае, если барьер имеет тип масштабируемой стоимости.

Scaled_Distance:

Основанные на расстоянии значения импеданса для ребер, расположенных под барьером, умножаются на значение, введенное в данное поле. Данное поле используется только в том случае, если барьер имеет тип масштабируемой стоимости.

Feature Set
time_attribute
(дополнительно)

Определяет сетевой атрибут стоимости, используемый для определения времени прохождения по элементам сети.

String
distance_attribute
(дополнительно)

Определяет сетевой атрибут стоимости, используемый для определения расстояния по элементам сети.

String
use_hierarchy_in_analysis
(дополнительно)
  • USE_HIERARCHY Для анализа используется атрибут иерархии. Применение иерархии приводит к предпочтению при расчете ребер высшего порядка по сравнению с ребрами низшего порядка. Расчеты с иерархией выполняются быстрее, и они могут использоваться для моделирования предпочтений водителя, который скорее выберет для проезда автостраду, нежели местную дорогу – даже если это приведет к увеличению длины пути. Данная опция доступна, если входной набор сетевых данных имеет атрибут иерархии.
  • NO_HIERARCHYДля анализа атрибут иерархии не используется. Расчет без применения иерархии дает точный маршрут для набора сетевых данных.

Параметр не используется, если атрибут иерархии не задан для набора сетевых данных, используемого для выполнения анализа. В таких случаях используйте в качестве значения параметра "#".

Boolean
restrictions
(дополнительно)

Определяет, какие сетевые атрибуты ограничения будут учитываться во время решения.

String
attribute_parameter_values
(дополнительно)

Определяет значения параметра для атрибутов сети, имеющих параметры. Набор записей имеет два столбца, которые используются вместе для уникальной идентификации параметров, а также другой столбец, который определяет значение параметра.

Набор записей значений параметра атрибута имеет связанные атрибуты. Ниже приведены поля в таблице атрибутов с описанием.

ObjectID:

Управляемое системой поле ID.

AttributeName:

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

ParameterName:

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

ParameterValue:

Значение, которое вы хотите задать для параметра атрибута. Если значение не указано, для параметра атрибута устанавливается значение NULL.

Record Set
maximum_snap_tolerance
(дополнительно)

Максимальный допуск замыкания представляет собой самое дальнее расстояние, которое использует Network Analyst для поиска расположения или повторного расположения точки на сети. Выполняется поиск подходящих ребер или соединений, далее выполняется замыкание точки на ближайший объект. Если подходящее положение не было найдено в пределах максимального допуска замыкания, то объект обозначается, как неразмещенный.

Linear unit
exclude_restricted_portions_of_the_network
(дополнительно)
  • EXCLUDEУказывает, что сетевые местоположения размещаются только на доступных участках сети. Это предотвратит размещение сетевых положений на элементах, которых нельзя достичь из-за ограничений или барьеров. Чтобы получить ожидаемые результаты, перед добавлением сетевых местоположений с использованием этого параметра, убедитесь в том, что в слой сетевого анализа уже добавлены все ограничивающие барьеры. Этот параметр не применяется при добавлении объектов барьеров. В таких случаях используйте в качестве значения параметра "#".
  • INCLUDEУказывает, что сетевые местоположения размещаются на всех элементах сети. Сетевые местоположения, добавляемые с использованием этого параметра, могут оказаться недоступными во время расчета, если они размещены на ограниченных элементах.
Boolean
feature_locator_where_clause
[[dataset_name, SQL_Query],...]
(дополнительно)

Выражение SQL используется для выбора поднабора объектов источника, ограничивающего сетевые элементы, на которых могут быть расположены заказы и станции. Например, для того чтобы заказы и станции не располагались на шоссе с ограниченным доступом, напишите выражение SQL, исключающее такие источники объектов. (Обратите внимание, что другие объекты сетевого анализа, например барьеры, игнорируют локатор объекта с выражением WHERE во время загрузки.)

Более подробно о синтаксисе SQL и о том, как он различается между источниками данных, см.: Литература по SQL для выражений запросов, используемых в ArcGIS.

Value Table
populate_route_lines
(дополнительно)
  • NO_ROUTE_LINESДля выходных маршрутов геометрия не создается. Вы также не сможете создавать направления движения, если линии маршрута не создаются.
  • ROUTE_LINESПолученные маршруты будут иметь точную форму лежащих ниже источников сети.
Boolean
route_line_simplification_tolerance
(дополнительно)

Определяет степень упрощения геометрии маршрута.

При упрощении сохраняются важнейшие точки на маршруте, например, повороты и перекрестки, составляющую основную форму маршрута, а остальные точки удаляются. Указываемое вами расстояние упрощения является максимальным допустимым смещением упрощенной линии от исходной. Упрощение линии уменьшает количество вершин и приводит к сокращению времени отработки.

Linear unit
populate_directions
(дополнительно)
  • DIRECTIONSКласс пространственных объектов, указанный в параметре Выходное имя направлений (Output Directions Name), заполняется инструкциями для последовательных поворотов на каждом маршруте. Набор сетевых данных должен поддерживать направления движения; в противном случае во время расчетов направлений произойдет ошибка.
  • NO_DIRECTIONSНаправления не создаются.
Boolean
directions_language
(дополнительно)

Выберите язык для создания направлений движения. Список языков, доступных в раскрывающемся меню, зависит от установленных на компьютере языковых пакетов ArcGIS.

Следует заменить, что для публикации это инструмента как части сервиса на отдельном сервере ArcGIS необходимо установить на сервере соответствующие языковые пакеты. При отсутствии того или иного языкового пакета на компьютере соответствующий язык не отображается в списке. Однако вместо выбора языка можно указать его код.

String
directions_style_name
(дополнительно)

Имя стиля форматирования для направлений.

String
save_output_layer
(дополнительно)
  • NO_SAVE_OUTPUT_LAYERСлой сетевого анализа не включен в выходные данные.
  • SAVE_OUTPUT_LAYERВ выходные данные включен слой сетевого анализа результатов.

В любом случае возвращаются автономные таблицы и классы объектов. Администратор сервера может выбрать вывод слоя сетевого анализа, при этом настройка и результаты работы инструмента могут быть отлажены с использованием средств управления Network Analyst в среде ArcGIS for Desktop. Это намного упрощает процесс отладки.

В ArcGIS for Desktop выходным положением по умолчанию для слоя сетевого анализа является временная рабочая область на том же уровне, что и временная база данных. Это означает, что она хранится в виде одноуровневого объекта временной базы геоданных. Выходной слой сетевого анализа хранится в виде LYR-файла, имя которого начинается на _ags_gpna, а затем следует буквенно-числовое значение GUID.

Boolean
service_capabilities
[[String, {Long}],...]
(дополнительно)

Данное свойство помогает вам выполнять наиболее полную обработку при работе данного инструмента в качестве сервиса геообработки. Вы можете сделать это по двум причинам: первая, во избежание решения сервером задач, которые требуют больше ресурсов или времени на обработку, чем задано вами; вторая – для создания множественных серверов с различными возможностями VRP для поддержки бизнес-модели. Например, если у вас имеется бизнес-модель, привязанная к сервису, вы можете предоставить бесплатный VRP-сервис, который поддерживает расчет максимум пяти маршрутов, и второй сервис, платный, поддерживающий расчет более пяти маршрутов.

Помимо ограничения максимального количества маршрутов вы можете ограничить количество заказов или точечных барьеров, добавляемых в анализ. Другим способом управления размерами задачи является настройка максимального количества объектов, обычно объектов улиц, которые могут пересекаться линейными или полигональными барьерами. Последним способом является принудительное использование иерархического расчета, даже если пользователь не выбирает использование иерархии, когда заказы распространяются географически за пределы выбранного расстояния по прямой.

  • MAXIMUM POINT BARRIERSМаксимально возможное число точечных барьеров. В случае превышения этого значения возвращается ошибка. Значение NULL соответствует отсутствию ограничений.
  • MAXIMUM FEATURE INTERSECTING LINE BARRIERSМаксимальное количество объектов источника, которое может быть пересечено всеми линейными барьерами в анализе. В случае превышения этого значения возвращается ошибка. Значение NULL соответствует отсутствию ограничений.
  • MAXIMUM FEATURES INTERSECTING POLYGON BARRIERSМаксимальное количество объектов источника, которое может быть пересечено всеми полигональными барьерами в анализе. В случае превышения этого значения возвращается ошибка. Значение NULL соответствует отсутствию ограничений.
  • MAXIMUM ORDERSМаксимальное количество заказов, разрешенное в анализе. В случае превышения этого значения возвращается ошибка. Значение NULL соответствует отсутствию ограничений.
  • MAXIMUM ROUTESМаксимальное количество маршрутов, разрешенное в анализе. В случае превышения этого значения возвращается ошибка. Значение NULL соответствует отсутствию ограничений.
  • FORCE HIERARCHY BEYOND DISTANCEМаксимальное расстояние по прямой между заказами перед расчетом маршрута транспорта с использованием сетевой иерархии. Единицы для данного значения аналогичны единицам, указанным в параметре Единицы поля расстояния (Distance Field Units).Если сеть не имеет атрибута иерархии, то данное ограничение игнорируется. При выборе Использовать иерархию в анализе (Use Hierarchy in Analysis) иерархия используется всегда. Если параметр Использовать иерархию в анализе (Use Hierarchy in Analysis) не включен и данное ограничение имеет значение NULL, то иерархия принудительно не применяется.
Value Table

Пример кода

SolveVehicleRoutingProblem, пример 1 (окно Python)

Выполняйте инструмент только с использованием необходимых параметров.

import arcpy
orders = arcpy.FeatureSet()
orders.load("Stores")
depots = arcpy.FeatureSet()
depots.load("DistributionCenter")
routes = arcpy.RecordSet()
routes.load("RoutesTable")
arcpy.na.SolveVehicleRoutingProblem(orders, depots, routes, "","Minutes",
                                    "Miles", "Streets_ND")
SolveVehicleRoutingProblem, пример 2 (рабочий процесс)

В следующем автономном скрипте Python показано, как использовать инструмент SolveVehicleRoutingProblem для выполнения ряда заказов при помощи парка транспортных средств. При выборе инструмента SolveVehicleRoutingProblem вам необходимо просто вызвать один инструмент для решения всей задачи анализа, в отличие от инструмента MakeVehicleRoutingProblemLayer, которые требует выполнения нескольких инструментов из набора ArcGIS Network Analyst.

# Name: SolveVehicleRoutingProblem_Workflow.py
# Description: Find the best routes for a fleet of vehicles, which is operated 
#              by a distribution company, to deliver goods from a main 
#              distribution center to a set of grocery stores.
# Requirements: Network Analyst Extension 

#Import system modules
import arcpy
from arcpy import env
import datetime

try:
    #Check out the Network Analyst extension license
    arcpy.CheckOutExtension("Network")

    #Set environment settings
    env.workspace = "C:/data/SanFrancisco.gdb"
    env.overwriteOutput = True
    
    #Set local variables
    inNetworkDataset = "Transportation/Streets_ND"
    impedanceAttribute = "TravelTime"
    timeUnits = "Minutes"
    distanceUnits = "Miles"
    inOrders = "Analysis/Stores"
    inDepots = "Analysis/DistributionCenter"
    inRoutes = "RoutesTable"
    outGeodatabase = "C:\data\output\VRPOutputs.gdb"
    
    #Create two new feature sets and one record set with same schema as
    #Orders, Deopts and Routes parameter in Solve Vehicle Routing Problem tool.
    #Load the feature from the existing feature classes and table in the feature
    #set. Note that Solve Vehicle Routing Problem tool does not provide a way to
    #map field names between your input feature classes and table and the
    #feature set or record set parameters. To ensure that the attributes are
    #correctly transfered, the input feature classes and table must have same
    #field names as the feature sets and record sets.
    orders = arcpy.GetParameterValue("SolveVehicleRoutingProblem_na",0)    
    orders.load(inOrders)
    depots = arcpy.GetParameterValue("SolveVehicleRoutingProblem_na",1)    
    depots.load(inDepots)
    routes = arcpy.GetParameterValue("SolveVehicleRoutingProblem_na",2)    
    routes.load(inRoutes)
    
    #Call the SolveVRP tool and store the results in the result object
    result = arcpy.na.SolveVehicleRoutingProblem(orders,depots, routes,"",
                                                 timeUnits, distanceUnits,
                                                 inNetworkDataset, outGeodatabase,
                                                 populate_directions="DIRECTIONS")
    
    #print the solve status and output any warning messages from tool execution
    solveSucceeded = result.getOutput(0)
    print "Solve Succeeded: {0}".format(solveSucceeded)
    print "Messages from solver are printed below."
    print result.getMessages(1)
    
    print "Script completed successfully"

except Exception as e:
    # If an error occurred, print line number and error message
    import traceback, sys
    tb = sys.exc_info()[2]
    print "An error occured on line %i" % tb.tb_lineno
    print str(e)

Параметры среды

Связанные темы

Информация о лицензировании

ArcGIS for Desktop Basic: Требует Network Analyst
ArcGIS for Desktop Standard: Требует Network Analyst
ArcGIS for Desktop Advanced: Требует Network Analyst
9/11/2013