OptimizeToursResponse

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

JSON-представление
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "requestLabel": string,
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "validationErrors": [
    {
      object (OptimizeToursValidationError)
    }
  ],
  "metrics": {
    object (Metrics)
  }
}
Поля
routes[]

object ( ShipmentRoute )

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

requestLabel

string

Копия OptimizeToursRequest.label , если в запросе была указана метка.

skippedShipments[]

object ( SkippedShipment )

Список всех отправлений пропущен.

validationErrors[]

object ( OptimizeToursValidationError )

Список всех ошибок валидации, которые нам удалось обнаружить самостоятельно. См. объяснение «НЕСКОЛЬКО ОШИБОК» для сообщения OptimizeToursValidationError . Вместо ошибок будут выдаваться предупреждения в случае, если solvingMode имеет значение DEFAULT_SOLVE .

metrics

object ( Metrics )

Показатели продолжительности, расстояния и использования для этого решения.

Оптимизетурсвалидатионеррор

Описывает ошибку или предупреждение, возникающее при проверке OptimizeToursRequest .

JSON-представление
{
  "code": integer,
  "displayName": string,
  "fields": [
    {
      object (FieldReference)
    }
  ],
  "errorMessage": string,
  "offendingValues": string
}
Поля
code

integer

Ошибка проверки определяется парой ( code , displayName ), которая всегда присутствует.

Поля, следующие за этим разделом, предоставляют дополнительную информацию об ошибке.

НЕСКОЛЬКО ОШИБОК : при наличии нескольких ошибок процесс проверки пытается вывести несколько из них. Как и компилятор, это несовершенный процесс. Некоторые ошибки проверки будут «фатальными», то есть они останавливают весь процесс проверки. Это относится, среди прочего, к ошибкам displayName="UNSPECIFIED" . Некоторые ошибки могут привести к тому, что процесс проверки пропустит другие ошибки.

СТАБИЛЬНОСТЬ : code и displayName должны быть очень стабильными. Но со временем могут появиться новые коды и отображаемые имена, что может привести к тому, что данный (недействительный) запрос выдаст другую пару ( code , displayName ), поскольку новая ошибка скрыла старую. Например, см. «НЕСКОЛЬКО ОШИБОК».

displayName

string

Отображаемое имя ошибки.

fields[]

object ( FieldReference )

Контекст ошибки может включать 0, 1 (в большинстве случаев) или более полей. Например, обращение к транспортному средству № 4 и первому забору груза № 2 можно выполнить следующим образом:

fields { name: "vehicles" index: 4}
fields { name: "shipments" index: 2 subField {name: "pickups" index: 0} }

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

errorMessage

string

Читаемая человеком строка, описывающая ошибку. Между code и errorMessage существует соотношение 1:1 (когда code != "UNSPECIFIED").

СТАБИЛЬНОСТЬ : Нестабильно: сообщение об ошибке, связанное с данным code может со временем измениться (надеюсь, чтобы это прояснить). Вместо этого полагайтесь на displayName и code .

offendingValues

string

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

ПолеReference

Указывает контекст для ошибки проверки. FieldReference всегда ссылается на данное поле в этом файле и имеет одну и ту же иерархическую структуру. Например, мы можем указать элемент №2 в startTimeWindows транспортного средства №5, используя:

name: "vehicles" index: 5 subField { name: "endTimeWindows" index: 2 }

Однако мы опускаем объекты верхнего уровня, такие как OptimizeToursRequest или ShipmentModel чтобы не перегружать сообщение.

JSON-представление
{
  "name": string,
  "subField": {
    object (FieldReference)
  },

  // Union field index_or_key can be only one of the following:
  "index": integer,
  "key": string
  // End of list of possible types for union field index_or_key.
}
Поля
name

string

Имя поля, например, «транспортные средства».

subField

object ( FieldReference )

Рекурсивно вложенное подполе, если необходимо.

Поле объединения index_or_key .

index_or_key может быть только одним из следующих:

index

integer

Индекс поля, если оно повторяется.

key

string

Ключ, если поле является картой.

Метрики

Общие показатели, агрегированные по всем маршрутам.

JSON-представление
{
  "aggregatedRouteMetrics": {
    object (AggregatedMetrics)
  },
  "skippedMandatoryShipmentCount": integer,
  "usedVehicleCount": integer,
  "earliestVehicleStartTime": string,
  "latestVehicleEndTime": string,
  "costs": {
    string: number,
    ...
  },
  "totalCost": number
}
Поля
aggregatedRouteMetrics

object ( AggregatedMetrics )

Агрегировано по маршрутам. Каждая метрика представляет собой сумму (или максимум для загрузок) по всем одноименным полям ShipmentRoute.metrics .

skippedMandatoryShipmentCount

integer

Количество пропущенных обязательных отправок.

usedVehicleCount

integer

Количество используемых автомобилей. Примечание. Если маршрут транспортного средства пуст и Vehicle.used_if_route_is_empty имеет значение true, транспортное средство считается использованным.

earliestVehicleStartTime

string ( Timestamp format)

Самое раннее время начала подержанного автомобиля, вычисляемое как минимальное для всех подержанных автомобилей ShipmentRoute.vehicle_start_time .

Временная метка в формате RFC3339 UTC «Зулу» с наносекундным разрешением и до девяти дробных цифр. Примеры: "2014-10-02T15:01:23Z" и "2014-10-02T15:01:23.045123456Z" .

latestVehicleEndTime

string ( Timestamp format)

Самое позднее время окончания для подержанного автомобиля, вычисляемое как максимальное для всех подержанных автомобилей ShipmentRoute.vehicle_end_time .

Временная метка в формате RFC3339 UTC «Зулу» с наносекундным разрешением и до девяти дробных цифр. Примеры: "2014-10-02T15:01:23Z" и "2014-10-02T15:01:23.045123456Z" .

costs

map (key: string, value: number)

Стоимость решения с разбивкой по полям запроса, связанным со стоимостью. Ключи — это пути прототипов относительно входных данных OptimizeToursRequest, например «model.shipments.pickups.cost», а значения — это общая стоимость, сгенерированная соответствующим полем стоимости, агрегированная по всему решению. Другими словами, затраты["model.shipments.pickups.cost"] — это сумма всех затрат на самовывоз в рамках решения. Здесь подробно представлены все затраты, определенные в модели, за исключением затрат, связанных с TransitionAttributes, которые по состоянию на 2022/01 г. сообщаются только в агрегированном виде.

totalCost

number

Полная стоимость решения. Сумма всех значений на карте затрат.