Приоритезация посещений поблизости с атрибутами перехода,Приоритезация посещений поблизости с атрибутами перехода

В этом примере показано, как использовать атрибуты перехода для определения приоритета маршрутов, на которых погрузка и доставка поблизости выполняются одним и тем же транспортным средством в одном временном блоке. Дополнительные сведения об атрибутах перехода см. в разделе Модель бизнес-логики с атрибутами перехода .

В этом примере:

  • Доставка грузов A, B и C осуществляется близко друг к другу по одной и той же дороге.
  • Дополнительные поставки будут в дальнейшем.
  • Доставка не имеет определенных сроков доставки.
  • Независимо от графика посещения, транспортному средству необходимо проехать по этой дороге дважды: один раз утром по пути из депо и один раз вечером по пути обратно.
  • Общее расстояние путешествия и продолжительность маршрута всегда одинаковы, независимо от того, когда выполняются A, B и C.

Example with deliveries of shipments on the same road. There are three
shipments A, B, and C on the road from the depot towards other shipments. A is
1000m from the depot, B is 50 meters further away from the depot, and C is 30
meters further in the same direction. There are other shipments 1000m far from
C.

В этой ситуации и для запроса, в котором используются только стоимость часа и стоимость километра, оптимизированный маршрут может обрабатывать A и B утром, а C — вечером, а стоимость решения будет такой же, как если бы все три обрабатываются одновременно.

Стоимость за километр с порогом

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

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

Чтобы настроить затраты, вы добавляете новую запись в ShipmentModel.transition_attributes со следующими свойствами:

{
  "model": {
    "transitionAttributes": [
      {
        "excluded_dst_tag": "UNUSED_TAG",
        "excluded_src_tag": "UNUSED_TAG",
        "distanceLimit": {
          "softMaxMeters": 100,
          "costPerKilometerBelowSoftMax": 50,
          "costPerKilometerAboveSoftMax": 1,
        }
      }
    ]
  }
}

Тег #unused_tag# не должен использоваться какими-либо грузами или транспортными средствами, чтобы соответствовать всем возможным переходам. Дополнительную информацию см. в разделе «Как сопоставить все запросы на посещение» .

Как работает высокая стоимость ниже порога

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

Решение 1: Выполните A, B по дороге туда, C на обратном пути.

В этом решении поставки разбиваются на два пересечения этой дороги. Два из них доставляются при первом обходе, а оставшийся — при втором. Есть 5 переходов:

Переход Расстояние Ниже порога Выше порога
Расстояние Расходы Расстояние Расходы
депо →А 1000 м 100 м 5 900 м 0,9
А→Б 50 м 50 м 2,5 0 м 0
Б→другое 1030 м 100 м 5 930 м 0,93
другое→С 1000 м 100 м 5 900 м 0,9
C→депо 1080 м 100 м 5 980 м 0,98
Общий 450 м 22,5 3710 м 3,71

Общая стоимость рассчитывается как сумма двух затрат на километр:

  • стоимость километра ниже порога (50), умноженная на общее пройденное расстояние ниже порога (450 м = 0,45 км),
  • стоимость километра сверх порогового значения (1), умноженная на общее пройденное расстояние сверх порогового значения (3710 м = 3,71 км).

Таким образом, общая стоимость составит 0,45 * 50 + 3,71 * 1 = 22,5 + 3,71 = 26,21.

Решение 2: Выполните A, B, C по дороге туда, ничего на обратном пути.

В этом решении, в отличие от решения 1, все три груза доставляются «группой» за один проход дороги. На другом обходе транспортное средство вообще не останавливается. Опять же, переходов 5, но их длина и состав различны:

Переход Расстояние Ниже порога Выше порога
Расстояние Расходы Расстояние Расходы
депо →А 1000 м 100 м 5 900 м 0,9
А → Б 50 м 50 м 2,5 0 м 0
Б→С 30 м 30 м 1,5 0 м 0
C→другое 1000 м 100 м 5 900 м 0,9
другое→депо 2080 м 100 м 5 1980 м 1,98
Общий 380 м 19 3780 м 3,78

Используя те же вычисления, что и в решении 1, общая стоимость составит 0,38 * 50 + 3,78 * 1 = 19 + 3,78 = 22,78, а выполнение всех посещений за один временной блок обходится дешевле, чем выполнение их в двух группах. Вы можете усилить этот эффект, увеличив DistanceLimit.cost_per_kilometer_below_soft_max .

Почему низкая стоимость километра ниже порога не работает

Поскольку вы предпочитаете короткие переходы длинным переходам, у вас может возникнуть соблазн установить высокую стоимость за километр для длинных переходов и сохранить низкую стоимость за километр для коротких переходов. Но на самом деле это имеет обратный эффект: поскольку первые 100 метров перехода являются самыми дешевыми, оптимизатор использует эти «дешевые» счетчики с наибольшим эффектом, отдавая предпочтение переходам, длина которых близка или превышает 100 метров.

Вы можете увидеть этот эффект на двух примерах решений. Если поменять местами стоимость километра ниже и выше порога, стоимость маршрута изменится:

Высокая стоимость выше порога Высокая стоимость ниже порога
Решение 1 Решение 2 Решение 1 Решение 2
КМ ниже порога 0,45 0,38 0,45 0,38
Стоимость за километр ниже порога 1.00 1.00 50.00 50.00
КМ выше порога 3,71 3,78 3,71 3,78
Стоимость за километр сверх порогового значения 50.00 50.00 1.00 1.00
Общая стоимость 185,95 189,38 26.21 22,78

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