---
metadata:
  - name: generator
    content: Diplodoc Platform v5.19.6
alternate:
  - https://docs.routeq.com/doc/en/vrp/properties-of-vehicles.md
  - https://docs.routeq.com/doc/tr/vrp/properties-of-vehicles.md
title: RouteQ – taşıt öznitelikleri
---
> **Documentation Index:** Fetch the complete configuration index at https://docs.routeq.com/doc/tr/llms.txt


# Araç nitelikleri

RouteQ’de siparişlerin teslimatı hem sıradan araçlarla hem de yaya olarak veya toplu taşıma araçlarıyla seyahat eden kuryeler tarafından gerçekleştirilebilir. Araç ve kurye ortak bir dizi özelliği paylaşır.

`vehicles` sorgu alanı araç veya kuryeyi tanımlamak için kullanılır.

## Araç veya kurye tanımlayıcısı {#vehicle-id}

Bir araç veya kuryenin zorunlu bir niteliği, `id`’de ayarlanan benzersiz bir sayısal veya dize tanımlayıcısıdır. Tanımlayıcı tek bir hizmet talebi içinde benzersiz olmalıdır. İzleme sistemi’ne aktarıldığında, bu tanımlayıcı kurye kullanıcı girişi olarak kullanılacaktır.

Ek olarak, hesap sisteminizden aracın veya kuryenin sayısal veya dizgi tanımlayıcısını `ref` alanına girebilir ve kurye ile Takip üzerinden iletişime geçmek için onun cep telefonu numarasını `phone` alanına girebilirsiniz.


## Taşıma şekli {#routing-mode}

Varsayılan değer rotalar oluşturulurken, kuryenin teslimat için bir binek araç (2,5 tondan az taşıma kapasitesi) kullandığı öngörülür. Gönderilerin yürüyerek, kamyonla veya toplu taşıma araçlarıyla teslimatı `vehicle.routing_mode` parametresi kullanılarak gösterilebilir. Tüm kuryeler teslimatları aynı şekilde yapıyorsa, `options.routing_mode` yönlendirme seçeneği kullanılabilir.


{% note info "Not" %}

`vehicle.routing_mode` parametresi `options.routing_mode`’den daha yüksek bir önceliğe sahiptir.

{% endnote %}


Olası değerler:

- `driving` – varsayılan yöntem, 2,5 tondan daha az taşıma kapasitesine sahip araçlar için rotalama;

- `truck` – varsayılan olarak – 2,5 ton üstü taşıma kapasitesine sahip kamyonlar için rotalama. Ek parametreler [araç özellikleri](#vehicle-properties) bölümünde belirtilebilir. Bu taşıma şeklini kullanarak planlama yaparken, Moskova için [kamyon kasası](https://www.mos.ru/dt/function/gruzovaia-logistika/gruzovoi-karkas/) dahil olmak üzere kamyon trafiğini kısıtlayan yol işaretleri dikkate alınır;

- `walking` – yaya profiline sahip bir rota. Rotada sadece yayanın yürüyebileceği yollar kullanılır;

- `transit` – toplu taşıma araçlarını kullanarak ve otobüs durağından teslimat noktasına yürüyerek hareketi öngörülen rota.


**Örnek 1**

Aşağıdaki örnekte tüm kuryeler için `transit` taşıma şekli kullanılmaktadır. Sonuç olarak, kuryeler teslimatları toplu taşıma araçlarında yapıyor ve siparişler onlar için en uygun şekilde dağıtılmıştır.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/661a368a-4bbef1ec-404d289f-8b4e2ed7) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/661a368a-4bbef1ec-404d289f-8b4e2ed7) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#661a368a-4bbef1ec-404d289f-8b4e2ed7)


{% note info "Not" %}

Oluşturulan rotalarda, kat edilen mesafe yalnızca kuryenin yürüdüğü mesafeler için gösterilmektedir. Toplu taşımada kat edilen mesafeler optimizasyon için dikkate alınır ancak metriklerde raporlanmaz.

{% endnote %}


**Örnek 2**

Aşağıdaki örnekte bir kurye için `transit` ve başka bir kurye için de `driving` taşıma şekli kullanılmaktadır. Siparişler kuryelere tahsis edilir, böylece araç toplu taşıma duraklarından veya birbirlerinden daha uzak noktalara teslimat yapar.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/5912648d-7656a2d8-ed0cf21a-f888da5) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/5912648d-7656a2d8-ed0cf21a-f888da5) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#5912648d-7656a2d8-ed0cf21a-f888da5)


## Araç veya kurye kapasitesi  {#vehicle-capacity}

RouteQ, bir aracın/kuryenin tek bir rotada taşıyabileceği maksimum ağırlığı veya gönderi miktarını belirlemek için araç kapasitesi tanımını destekler.

Araç veya kuryenin kapasitesini tanımlamak için `capacity` alanını kullanın (seçeneklerden birini belirtmek yeterlidir):

- `capacity.units` – paket sayısı (palet, kutu, fıçı).

- `capacity.weight_kg` – kilogram cinsinden ağırlık veya hacimsel ağırlık.

- `capacity.volume` – metreküp cinsinden ölçülen ve ölçümlerin çarpımı olarak verilen hacim:

    - `capacity.volume.width_m` – metre cinsinden genişlik.

    - `capacity.volume.depth_m` – metre cinsinden derinlik.

    - `capacity.volume.height_m` – metre cinsinden yükseklik.

    Ölçümler bilinmiyorsa, bir alanda hacim değerini ayarlayın ve diğer alanlarda 1 belirtin veya `capacity.volume_cbm` kullanın.

- `capacity.volume_cbm` – metreküp olarak verilen hacim.


Bir aracın hem metrik boyutları hem de hacmi belirtilmişse, bu durumda `capacity.volume` boyutları tanımlar ve `capacity.volume_cbm` kapasitesini tanımlar.



{% note info "Not" %}

Siparişlerin ağırlığı kilogram veya hacimsel ağırlık olarak belirtilmişse, araç kapasitesinin de aynı birimlerde belirtilmesi gerektiğini lütfen unutmayın. Benzer şekilde, siparişlerin ağırlığı paket sayısı olarak verilmişse, araç kapasitesi tanımı her bir araçtaki maksimum paket sayısını içermelidir.

{% endnote %}


Buna ek olarak, maksimum araç yükünün, belirtilen taşıma kapasitesinin bir yüzdesi olarak belirlenmesi mümkündür. Bunun için `limits` sorgu alanı kullanılır:

- `limits.volume_perc` – `capacity.volume.width_m` * `capacity.volume.depth_m` * `capacity.volume.height_m`’de ayarlanan değerin yüzdesi.

- `limits.weight_perc` – `capacity.weight_kg`’de ayarlanan değerin yüzdesi.

- `limits.units_perc` – `capacity.units`’de ayarlanan değerin yüzdesi.


Ayarlanan değere göre aşırı yükleme olasılığını belirtmek için 100’den büyük bir değer belirtin. Örneğin sipariş boyutu tahminindeki olası yanlışlıklar için bir yük kapasitesi marjı bırakmak için 100’den küçük bir değer belirtin. Örneğin, 110 değeri %10 aşırı yüke izin verirken, 90 değeri belirtilen kapasitenin %90’ı kadar maksimum yüke izin verir.

Araç kapasitesi (`limits` dahil) ihlal edilmeyecek katı bir sınırdır. Araç yüklemesi hesaplanırken teslim alınacak ve teslim edilecek siparişler dikkate alınır. Daha fazla bilgi için lütfen [Teslim alma ve teslimat](https://docs.routeq.com/doc/tr/vrp/properties-of-orders.md#pickup-and-delivery) bölümüne bakın.


{% note info "Not" %}

Aracın kapasitesi aracılığıyla, içine girmesi gereken sipariş sayısını dolaylı olarak kontrol edebilirsiniz. Örneğin, her siparişin hacmini 1 birim olarak belirlerseniz (gerçek sipariş boyutundan bağımsız olarak) ve araç kapasitesi 10 birimse, planlama sırasında her araca 10’dan fazla sipariş girmeyecektir.

{% endnote %}


**Örnek**

1,5 tonluk (Araç 1) ve 3 tonluk (Araç 2) iki araç ve 1 tonluk, 1,2 tonluk ve 1,4 tonluk üç teslimat siparişi verilmiştir.

Rota optimizasyonunda, 1,2 ton ağırlığındaki bir sipariş Araç 1’e, 1 ve 1,4 ton ağırlığındaki iki sipariş ise Araç 2’ye yerleştirilecektir.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/e308c400-e8e3e199-e4982daa-203dc31) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/e308c400-e8e3e199-e4982daa-203dc31) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#e308c400-e8e3e199-e4982daa-203dc31)


### Kullanıcı tarafından tanımlı kapasite birimleri  {#capacity-custom-units}

[Kullanıcı tanımlı ölçü birimi](https://docs.routeq.com/doc/tr/vrp/properties-of-orders.md#custom-units)’ne göre taşıma aracının kapasitesi.

Kullanıcı ölçü birimi iki parametre ile belirtilir:

- `capacity.custom.<seri numarası>.name` – kullanıcı ölçü biriminin adı;

- `capacity.custom.<seri numarası>.size` – kullanıcı ölçü birimine göre aracın kapasitesi.


Varsayılan değer, kapasite `capacity.custom.<seri numarası>.size` parametresi ile sınırlı değildir.

Birden fazla kullanıcı ölçü birimi belirtilebilir ve bunlara istediğiniz adı verebilirsiniz.


{% note alert "Uyarı" %}

Araç üzerindeki özel ölçü biriminin adı [sipariş için belirtilen](https://docs.routeq.com/doc/tr/vrp/properties-of-orders.md#custom-units) ile eşleşmelidir.

Siparişler için kullanıcı tarafından tanımlı kapasite birimleri belirtilmişse veya bazı araçlar için açıkça belirtilmiş ancak diğerleri için belirtilmemişse, belirtilmedikleri araçlar için özel birimlere göre kapasite sınırsız olarak kabul edilir.

{% endnote %}


Kullanıcı parametresi `price` (sipariş tutarı) için Excel dosya sayfalarını doldurma örneği:

{% list tabs %}

- Orders

  Sipariş tutarı

  #|
  ||`shipment_size.custom.0.name` | `shipment_size.custom.0.size`||
  ||`price` | 100||
  |#

- Vehicles

  Siparişlerin toplam tutarı

  #|
  ||`capacity.custom.0.name` | `capacity.custom.0.size`||
  ||`price` | 1000||
  |#

{% endlist %}

**Örnek 1**

Bu örnekte, gönderi birimlerinin ağırlığı, hacmi ve sayısı belirtilmiştir. Ayrıca sırasıyla `location.shipment_size.custom` ve `vehicle.capacity.custom` parametrelerini kullanarak taşınan siparişlerin toplam tutarı üzerinden sipariş tutarı ve araç başına limiti ayarlanmıştır.

Ağırlık, hacim ve paket sayısına göre kullanımları küçük olmasına rağmen, her biri 1 sipariş taşıyan 2 araç olduğu görülüyor, bunun nedeni bu siparişlerin tutarının araç için belirlenen limite yakın olmasıdır.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/3fe69cbc-20f9a319-3b43374a-7d8def6a) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/3fe69cbc-20f9a319-3b43374a-7d8def6a) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#3fe69cbc-20f9a319-3b43374a-7d8def6a)

**Örnek 2**

Bu örnekte Örnek 1 ile aynı veriler kullanılmaktadır, ancak ek olarak bir kuryenin taşıyabileceği maksimum sipariş sayısı belirtilmiştir. Limit `location.shipment_size.custom.1` ve `vehicle.capacity.custom.1` parametreleri kullanılarak tanımlanır. Her araç artık en fazla 5 sipariş taşıyabilir.

Üç araçtaki sipariş sayısının değiştiği görülüyor. Artık 1 siparişi yalnızca 1 araba taşıyor ve toplam tutar limiti nedeniyle siparişler artık eklenemiyor. Geri kalan araçlarda toplam tutar açısından maksimum kullanım elde edildi fakat sipariş sayısındaki sınırlamaya uyumak da mümkün oldu.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/c9b6b1ab-96f9ef28-8ae9e7db-29daf4c5) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/c9b6b1ab-96f9ef28-8ae9e7db-29daf4c5) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#c9b6b1ab-96f9ef28-8ae9e7db-29daf4c5)


## Araç için minimum sipariş ağırlığı  {#min-stop-weight}

Ağır bir kamyonun hafif bir siparişi şehrin diğer tarafına götürmesini önlemek için `min_stop_weight` parametresini kullanın. Bu parametre ile aracın bir noktaya teslim edeceği minimum toplam ağırlığı belirleyebilirsiniz. Farklı tonajlı araçlarla yük taşımacılığının planlanması durumunda geçerlidir.

Yumuşak kısıtlama: algoritma onu ihlal edebilir. Cezalar aşağıdaki alanlarda belirlenir:

- `penalty.min_stop_weight.fixed` – bir noktadaki tüm siparişlerin minimum toplam ağırlığının ihlali için ceza (varsayılan 1000);

- `penalty.min_stop_weight.kg` – bir noktaya teslim edilen siparişlerin toplam ağırlığındaki her eksik kilogram için ceza (varsayılan 50).


**Örnek 1**

1500 ve 10000 kg taşıma kapasitesine sahip iki araç 100, 500, 900 ve 9000 kg ağırlığındaki siparişleri teslim ediyor. Büyük araca hem hafif hem de ağır siparişler düşer.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/c825b917-64fa2110-a15c993-611c12a4) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/c825b917-64fa2110-a15c993-611c12a4) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#c825b917-64fa2110-a15c993-611c12a4)

**Örnek 2**

10000 kg taşıma kapasitesine sahip bir araç için `min_stop_weight` parametresi 1000 değeriyle belirtilir. Sonuç olarak, büyük otomobil yalnızca 9000 kg’lık bir sipariş alıyor.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/ca15628-2b66ccb-4cee5e59-5042d01a) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/ca15628-2b66ccb-4cee5e59-5042d01a) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#ca15628-2b66ccb-4cee5e59-5042d01a)


## Araç özellikleri  {#vehicle-properties}

Araç özellikleri `vehicle.specs` alanından ayarlanabilir. Aşağıdaki parametreleri içerebilir:

- `width` – aracın metre cinsinden genişliği;

- `height` – aracın metre cinsinden yüksekliği;

- `length` – aracın metre cinsinden uzunluğu;

- `max_weight` – aracın ton cinsinden maksimum ağırlığı;

- `max_weight_kg` – aracın kilogram cinsinden maksimum ağırlığı (planlama işlemleri sırasında tona yuvarlanır).



{% note info "Not" %}

Eğer planlama çalışmasında eş zamanlı olarak `vehicle.specs.max_weight` ve `vehicle.specs.max_weight_kg` parametreleri verilmişse, bu durumda çözümde `vehicle.specs.max_weight` kullanılacaktır.

{% endnote %}


Listelenen tüm özellikler için minimum değer 0’dır.


{% note alert "Uyarı" %}

Bu parametreler yalnızca [kamyonlar](#routing-mode) (`routing_mode` = `truck`) için belirtilebilir.

{% endnote %}


Kamyon kapasitesini hesaplamak için 21 sınıf kullanılır, bunun için bkz. [spesifikasyon](#spec). Algoritma, her aracın boyutlarını ve taşıma kapasitesini dikkate alır ve tüm özellikleri araca eşit veya araçtan daha büyük olan spesifikasyondan en yakın sınıfı seçer. Aracın özelliklerinden en az birinin tanımlanan maksimum değerleri aşması halinde, araca `truck_N21` sınıfı atanır. Çözümde en fazla 5 sınıf kullanılabilir. Eğer planlama sırasında daha fazla sınıf varsa, küçük sınıflar çözümden eşit olarak çıkarılır ve araçlar kalanlardan en yakın büyük sınıfı alır.

Çözümde hangi sınıfların kullanıldığını görmek için `matrix_statistics` API yanıt dizisine bakılabilir.

#### Sınıf özellikleri

#|
||**Sınıf** | **Araç yüksekliği, m** | **Araç genişliği, m** | **Araç uzunluğu, m** | **Maksimum araç ağırlığı, ton**||
||`truck_N1` | 0 | 0 | 0 | 0||
||`truck_N2` | 1.5 | 0 | 0 | 0||
||`truck_N3` | 2 | 0 | 0 | 0||
||`truck_N4` | 2 | 2 | 3.2 | 3.5||
||`truck_N5` | 2.2 | 2.1 | 4 | 0||
||`truck_N6` | 2.2 | 2.1 | 4 | 3.5||
||`truck_N7` | 2.4 | 2.6 | 4 | 5||
||`truck_N8` | 2.4 | 2.6 | 8 | 8||
||`truck_N9` | 2.5 | 0 | 0 | 0||
||`truck_N10` | 2.5 | 2.2 | 6.5 | 3.5||
||`truck_N11` | 2.7 | 2.6 | 8 | 10||
||`truck_N12` | 2.7 | 2.6 | 8 | 14.5||
||`truck_N13` | 3 | 2.6 | 8 | 10||
||`truck_N14` | 3 | 2.6 | 8 | 14.5||
||`truck_N15` | 3 | 2.6 | 10 | 20||
||`truck_N16` | 3.2 | 2.6 | 9 | 12||
||`truck_N17` | 3.9 | 2.6 | 10 | 22||
||`truck_N18` | 3.9 | 2.6 | 10 | 25||
||`truck_N19` | 4 | 2.6 | 15 | 30||
||`truck_N20` | 4 | 2.6 | 20 | 35||
||`truck_N21` | 4 | 2.6 | 20 | 40||
|#

Araç özellikleri kaydı `options.enable_vehicle_classes` seçeneği ile etkinleştirilir. Varsayılan değer `enable_vehicle_classes` = `true` – bu durumda algoritma araçları özelliklerine göre sınıflandırır. Özelliklerinin kaydı `enable_vehicle_classes` = `false` ayarı ile devre dışı bırakılabilir.

**Örnek 1.1**

Bir kamyon ve bir binek otomobil olmak üzere iki araç 10 siparişi teslim ediyor. 2 adres, araçlar için 2,5 metre yükseklik sınırlaması olan Cherkizovskaya geçidinin yanında yer almaktadır. Bu adresler arasındaki en kısa yol buradan geçer.

Algoritma 2 rota oluşturacaktır, çünkü kamyon karşıya geçemeyecek kadar yüksektir. Yakınında bulunan siparişler, kısıtlayıcı özellikleri olmayan bir binek aracı taşıyacaktır. Kamyonun yüksekliği `specs.height` = 3 olduğundan, [spesifikasyon](#spec)’a göre ona `truck_N13` sınıfı atanır.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/e8e62106-544fad8e-4d3f945d-1602c27) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/e8e62106-544fad8e-4d3f945d-1602c27) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#e8e62106-544fad8e-4d3f945d-1602c27)

**Örnek 1.2**

Planlamaya, örnek 1.1’de olduğu gibi aynı siparişler ve araçlar dahildir, ancak `vehicle.specs` kamyonu özellikleri belirtilmemiştir, bu nedenle kamyona herhangi bir sınıf atanmamıştır.

Algoritma herhangi bir geçiş kısıtlaması bulamaz ve kamyonun geçit üzerinden izleyeceği yolu planlar.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/e1d4472f-ee6ee007-ededed48-b58f1912) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/e1d4472f-ee6ee007-ededed48-b58f1912) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#e1d4472f-ee6ee007-ededed48-b58f1912)

**Örnek 2.1**

Kurye, MKAD dışında kalan 2 siparişi teslim etmelidir. Sipariş noktaları birbirinin zıttı yöndedir. Aracın maksimum ağırlığı `specs.max_weight` belirtilmemiştir, bu nedenle algoritma MKAD boyunca hareketi kısıtlama olmaksızın hesaplar. Özelliklerin `vehicle.specs` eksikliği nedeniyle kamyona herhangi bir sınıf atanmamıştır.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/feb0c4a-ac630b8f-ce7922b2-4bb64e98) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/feb0c4a-ac630b8f-ce7922b2-4bb64e98) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#feb0c4a-ac630b8f-ce7922b2-4bb64e98)

**Örnek 2.2**

Her şey örnek 2.1’de olduğu gibi, ancak bu sefer araç için `specs.max_weight` = 12 olarak belirtilmiştir. [Spesifikasyona](#spec) göre, kamyona `truck_N12` sınıfı atanmıştır. Algoritma, araç MKAD boyunca hareket edemediği için kilometreyi 3,5 kat daha fazla planladı.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/1a3a85c8-15aac27-2e11ed0f-edf5c9ef) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/1a3a85c8-15aac27-2e11ed0f-edf5c9ef) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#1a3a85c8-15aac27-2e11ed0f-edf5c9ef)

**Örnek 2.3**

Her şey örnek 2.2’de olduğu gibi, ancak `max_weight` yerine `max_weight_kg` parametresi kullanılmıştır ve değer kg cinsinden belirtilmiştir. Kamyona aynı `truck_N12` sınıfı atanmıştır. Algoritma aynı şekilde, araç MKAD’da gidemeyeceği için etrafından dolaşacağı bir rota planladı.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/f4b21f2d-c2aa38b4-cb81c887-6eeaca3d) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/f4b21f2d-c2aa38b4-cb81c887-6eeaca3d) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#f4b21f2d-c2aa38b4-cb81c887-6eeaca3d)

## Araç etiketleri  {#tags}

RouteQ sorgusunda bir araç veya kuryeyi tanımlarken, siparişlerle uyumluluk kuralları (veya etiketler) atayabilirsiniz.

Uyumluluk kuralları, bir aracın belirli bir siparişi yerine getirmek için gerekli özel donanıma sahip olması durumunda gerekli olabilir – örneğin, gıda taşımak için ısı yalıtımlı bir kapalı kasa araç.

Araç ve sipariş uyumluluk kuralları (araç etiketleri) aşağıdaki alanlarda ayarlanır:

- `vehicle.tags` alanı – siparişin öngördüğü özelliklerle **kısmen örtüşebilen** aracın özellikleri.

- `vehicle.excluded_tags` alanı – sipariş öngördüğü özelliklerle **eşleşmemesi** gereken araç özellikleri.


[Sipariş etiketlerini belirlemek](https://docs.routeq.com/doc/tr/vrp/properties-of-orders.md#order-vehicle-compatibility) için `location.required_tags` sorgu alanı kullanılır.


{% note alert "Uyarı" %}

Sipariş etiketleri, siparişin gerektirdiği araç özelliklerini tanımlar ve araç etiketleri, belirli bir aracın farklı siparişlerle uyumluluğuna ilişkin fiili kuralları tanımlar.

{% endnote %}


Araç etiketleri satırlar veya düzenli ifadeler olarak tanımlanabilir. Satırlarda etiketler virgülle ayrılmış olarak listelenebilir. Bu durumda, listelenen araç etiketlerinden en az biri sipariş etiketi ile eşleşiyorsa veya siparişin etiketi yoksa araç siparişi teslim edebilecektir. Düzenli ifadeler, araçlar ve siparişler arasında daha karmaşık mantık ve uyumluluk kurallarını tanımlamanın bir yoludur.

RouteQ düzenli ifade sözdizimini kullanır [POSIX Extended](https://en.wikibooks.org/wiki/Regular_Expressions/POSIX-Extended_Regular_Expressions#Table_of_metacharacters). Düzenli ifadeleri test etmek için [Regex101](https://regex101.com) hizmeti kullanılabilir.

Gerçek örneklerini kullanarak etiketlerin nasıl uygulanabileceğine bir göz atalım.

**Örnek 1**

Bir nakliye şirketinin küçük miktarlarda yiyecek ve içecek teslimatı yaptığı bir senaryo düşünün. Bazı gıda maddelerinin kesinlikle ısı yalıtımlı kamyonlarla teslim edilmesi gerekmektedir. Aynı zamanda, tüm içecekler ve gıda grubundan bazı ürünler buzdolapsız olarak teslim edilebilir. Buna ek olarak, bazı müşteriler yalnızca araçlarda bir su kasası varsa gönderi kabul edebilmektedir.

Bu tür sipariş kısıtlamalarını tanımlamak için, `location.required_tags` alanında aşağıdaki etiketleri belirteceğiz:

- `TAIL_LIFT` – araç su kasası ile donatılmışsa boşaltılabilecek siparişler için.

- `ISOTHERMAL_TRUCK` – sıcaklık kontrollü taşıma gerektiren malları içeren siparişler için.

- `NORMAL_TRUCK` – özel taşıma koşullarına sahip malları olmayan siparişler için.


Araçların yeteneklerini tanımlamak için `vehicle.tags` alanında aşağıdaki etiketleri kullanırız:

- `TAIL_LIFT` – su kasası ile donatılmış araçlar için.

- `ISOTHERMAL_TRUCK` – ısı yalıtımlı kasa ile donatılmış araçlar için.

- `NORMAL_TRUCK` – ısı yalıtımlu kasası olmayan geleneksel araçlar için.



{% note info "Not" %}

Aracın gerçek konfigürasyonuna bağlı olarak bir veya daha fazla etiketi olabilir veya hiç olmayabilir. Aynı kural sipariş etiketleri için de geçerlidir.

{% endnote %}


[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/e230325e-cfb17d41-1fdcbd2d-b89f7a85) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/e230325e-cfb17d41-1fdcbd2d-b89f7a85) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#e230325e-cfb17d41-1fdcbd2d-b89f7a85)

**Örnek 2**

Boşaltma bölgelerinin farklı yükseklikleri nedeniyle bazı siparişlerin bir araç için gövde yüksekliği sınırı olduğu bir senaryo değerlendirelim.

Örneğin, 2 metre, 2,3 metre ve 2,5 metre gövde yüksekliği sınırı olan siparişler vardır. Bu durumda, uygun etiketlere sahip olmalıdırlar: `Max_200`, `Max_230`, `Max_250`.

Araçlarda etiketlerin daha karmaşık bir şekilde basılması gerekir, çünkü 2 metre yüksekliğe kadar olan bir araç her siparişi teslim edebilirken, 2,8 metre yüksekliğindeki bir araç tüm siparişleri teslim edemez. Yani yalnızca `tags` kullanılırsa, aracın yüksekliği durumunda:

- 2 metreye kadar – sahada `vehicle.tags` tüm değerler yer alacaktır `Max_200`, `Max_230`, `Max_250`;

- 2 ila 2,3 metre arasında – `vehicle.tags` alanında `Max_230`, `Max_250` değerlerini içerecektir;

- 2,3 ila 2,5 metre arasında – `vehicle.tags` alanında `Max_250` değeri olacaktır;

- 2,5 metreden fazla – `vehicle.tags` alanı boş olacaktır.


[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/d6eb81fd-ecfc5d6f-5566b73d-6e04bf6b) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/d6eb81fd-ecfc5d6f-5566b73d-6e04bf6b) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#d6eb81fd-ecfc5d6f-5566b73d-6e04bf6b)

**Örnek 3**

Bazı siparişlerin belirli bir taşıma kapasitesine sahip araçların gelişine ilişkin bir sınırı olduğu bir senaryo düşünün (uygun araçlardan herhangi biri uygun olduğunda bir VEYA koşulu yürürlüktedir).

Örneğin, farklı yük taşıma kapasitelerine sahip araçlar vardır: 1, 3, 9 ve 15 ton. Bu özellikleri `vehicle.tags` etiketlerini kullanarak sabitleyelim. Siparişleri tanımlarken bu etiketlerin birleştirilmesi gerekeceğinden, bunları düzenli ifadeler kullanarak ayarlayalım: `.*##1TON##.*``.*##3TON##.*`, `.*##9TON##.*` ve `.*##15TON##.*` (`.*` – “herhangi bir alt dize” anlamına gelir).

Bazı siparişler için araç kapasitesi sınırı 1 ila 15 ton, 3 ila 9 ton ve 1 ila 3 tondur. Bu kısıtlama, eşleşen tüm makinelerin etiketlerini içeren düzenli ifadeli bir dize ile bir sipariş için ayarlanır. Yani, `location.required_tags` alanında gerekli yük kapasitesi durumunda aşağıdaki düzenli ifadeler yer alacaktır:

- 1 ila 15 ton – `##1TON##3TON##9TON##15TON##`;
- 3 ila 9 ton – `##3TON##9TON##`;
- 1 ila 3 ton – `##1TON##3TON##`.


{% note info "Not" %}

Örnek 2’de, aracın listelenen tüm etiketlere sahip olması gerektiğinden (koşul VE), sipariş etiketleri basit sıralama ile belirtilmiştir. Örnek 3’te, aracın sipariş etiketlerinden en az birine (VEYA koşulu) sahip olması gerekmektedir; bu, düzenli ifadeler kullanılarak veya VEYA koşullarının her olası kombinasyonu için ayrı etiketler oluşturularak sağlanabilir.

{% endnote %}


[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/b9d33701-784684be-2fdb780-ded6ad79) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/b9d33701-784684be-2fdb780-ded6ad79) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#b9d33701-784684be-2fdb780-ded6ad79)


### İsteğe bağlı etiketler {#optional-tags}

Bazen planlamanın, belirli siparişler için hangi araçların kullanılmasının (veya kullanılmamasının) istendiğini dikkate alması gerekir. Örneğin, VIP siparişleri özel eğitimli kuryelere teslim ettirmek daha iyidir.

Bu tür isteğe bağlı gereksinimler için, isteğe bağlı etiketler öngörülmekte ve bunlar `location.optional_tags` alanında sıralanmaktadır. Belirlenen bir tercihin karşılanamaması durumunda (örneğin ağırlık veya teslimat süresi kısıtlamaları nedeniyle) bu tercihin ihlal edilmesine izin verilebilir. İsteğe bağlı etiketlerin [araç gerekli özellikleri](https://docs.routeq.com/doc/tr/vrp/properties-of-orders.md#order-vehicle-compatibility)’nden farkı budur.


{% note info "Not" %}

Araçların belirli bir bölgede kullanılması isteniyorsa (ancak zorunlu değilse), bunlar için [isteğe bağlı coğrafi bölgeler](#optional-geozones) ayarlayın.

{% endnote %}


Tercih önceliği `location.optional_tags.value` etiketinin ağırlığı kullanılarak ayarlanır. Değeri pozitif ya da negatif olabilir. Planlama sırasında, isteğe bağlı etiket, siparişin yürütüldüğü [aracın etiketleri](#tags) ile karşılaştırılır. Eğer `location.optional_tags`’den etiket listedeki araç etiketiyle eşleşiyorsa:

- `vehicle.tags`, bu durumda `value` rota ücretinden düşülür;

- `vehicle.excluded_tags`, bu durumda `value` rota ücretine eklenir.


İsteğe bağlı etiketleri rota ücretine ekleyen değer `result.routes.metrics.total_optional_tags_cost` alanına döndürülür (negatif olabilir).

**Örnek**

Bazıları aşağıdaki isteğe bağlı etiketlere sahip 10 siparişin teslim edilmesi gerekiyor:

- `vip` – 6 siparişte, farklı noktalardaki etiket ağırlığı 100 ila 350 arasında değişmektedir;
- `morning` – 3 siparişte, etiket ağırlığı tüm noktalarda aynıdır, 500.

Araçlardan birinin `vip` ve `morning` etiketleri `vehicle.excluded_tags` alanında tanımlanmıştır. Bu nedenle, bu kuryeye `vip` etiketli siparişlerin yanı sıra rotanın geç başlama zamanı nedeniyle `morning` etiketli siparişlerin atanmamasının daha iyi olduğu belirtilmektedir.

Sonuç olarak, çoğu durumda gereklilikler ihlal edilmemiştir: altı vip siparişinden beşi `vip` etiketi kısıtlaması olmaksızın kurye ile teslim edilmiştir, `morning` etiketine göre ihlal yoktur.

Ancak bir vip sipariş, kapasite sınırlamaları nedeniyle `vip`’de `excluded_tags` ile etiketlenmiş bir araç için planlanmıştı. Bu rotanın `total_optional_tags_cost` alanına 100 değeri döndürür: “istenmeyen” bir aracın kullanılması ücreti 100 birim artırmıştır. En düşük ağırlığı `location.optional_tags.value` olan sipariş için tercih ihlal edilmiştir.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/73585f15-46c8bf76-7f29b288-11ea4cc5) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/73585f15-46c8bf76-7f29b288-11ea4cc5) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#73585f15-46c8bf76-7f29b288-11ea4cc5)


## Araçtaki siparişlerin uyumsuzluğu {#incompatible-load-types}

Siparişler uyumsuz tiplere sahip olabilir, bunlar aşağıdaki parametreler kullanılarak belirtilir:

- `options.incompatible_load_types` – tüm araçlar için aynı şekilde sipariş uyumsuzluğunu ayarlar. Ayrıntılar için [Sipariş uyumsuzluğu](https://docs.routeq.com/doc/tr/vrp/properties-of-orders.md#order-incompatibility) bölümüne bakın.

- `vehicle.incompatible_load_types` – belirli bir araç için siparişlerin uyumsuzluğunu belirtir, yani aracın özelliklerini dikkate almanızı sağlar.

- `vehicle.onboard_incompatible_load_types` – `false` (varsayılan) olarak ayarlandığında, sipariş uyumsuzluğu tüm sefer için geçerlidir; `true` olarak ayarlandığında ise, yalnızca siparişler araçtayken geçerlidir.


{% note info "Not" %}

`vehicle.incompatible_load_types` parametresi daha yüksek bir önceliğe sahiptir ve belirli bir araç için `options.incompatible_load_types` parametrelerini yeniden belirler.

{% endnote %}


Örneğin, süt ve dondurmanın taşınması farklı sıcaklık rejimleri gerektirir. Aracın bir bölmesi varsa, ya süt ya da dondurma taşıyacaktır. Aracın farklı sıcaklık aralıklarına sahip iki bölmesi varsa, süt ve dondurmayı aynı anda farklı bölmelerde taşıyabilir. Bu durumda, tek bölmeli araçlar için `vehicle.incompatible_load_types` sipariş uyumsuzluğunu belirtmek yeterlidir. İki bölmeli araçlar için bu parametreye gerek yoktur ve genel olarak siparişler için `options.incompatible_load_types` uyumsuz tiplerin belirtilmesine de gerek yoktur.

Sipariş uyumsuzluğu araç özellikleri dışındaki nedenlerden kaynaklanıyorsa, `vehicle.onboard_incompatible_load_types` = `true` parametresini kullanın. Örneğin, rakiplerin siparişlerini aynı anda taşımak mümkün değilse, kurye depoya gitmeden her şirketin siparişlerini ayrı ayrı alacak ve teslim edecektir. Bu, kilometre ve rota süresini azaltacaktır.

**Örnek 1**

Teslimat aşağıdaki sipariş tipleri ile 4 adresten oluşmaktadır:

- sipariş 1 (`id` = 1) – `flowers`;

- sipariş 2 (`id` = 2) – `flowers`;

- sipariş 3 (`id` = 3) – `flowers`, `sweets`;

- sipariş 4 (`id` = 4) – `flowers`, `ice-cream`.


Bununla birlikte `flowers` ve `sweets` aynı araçta teslimat için uyumsuzdur. Ayrıca, araç 2’de `flowers` ve `ice-cream`’nin aynı anda teslimatı yasaktır, ancak `flowers` ve `sweets`’nin teslimatına izin verilmektedir. Bu durumda çözüm, ilk araçta 2 ve 4 numaralı siparişlerin, ikinci araçta ise 1 ve 3 numaralı siparişlerin teslim edilmesini içerecektir.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/8765e2cd-678cb47e-4fc406b5-800f68ab) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/8765e2cd-678cb47e-4fc406b5-800f68ab) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#8765e2cd-678cb47e-4fc406b5-800f68ab)

**Örnek 2.1**

Farklı şirketlerin 3 siparişinin alınması ve teslim edilmesi gerekiyor. 1 ve 2, 2 ve 3 numaralı siparişler rakip firmalara ait olduğu için birlikte teslim edilememektedir.

Planlama, kuryenin 1 ve 3 numaralı siparişleri alıp teslim etmesi ve ardından yeni bir seferde 2 numaralı siparişi yüklemek ve teslim etmek için depoya dönmesiyle sonuçlanır.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/9bf3f6eb-7466d76b-ccbadb4f-26f22569) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/9bf3f6eb-7466d76b-ccbadb4f-26f22569) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#9bf3f6eb-7466d76b-ccbadb4f-26f22569)

**Örnek 2.2**

Örnek 2.1’deki ile aynıdır, ancak `vehicle.onboard_incompatible_load_types` = `true`.

Planlama, kuryenin 2 numaralı siparişi alıp teslim etmesi ve ardından depoya gitmeden 1 ve 3 numaralı siparişleri alıp teslim etmesiyle sonuçlanır. Kat edilen mesafe ve rota süresi azaldı.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/80c40f62-e822f1fa-316934db-fb13fe31) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/80c40f62-e822f1fa-316934db-fb13fe31) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#80c40f62-e822f1fa-316934db-fb13fe31)


## Coğrafi çitler {#geozones}

Araçlar için teslimat bölgesi kısıtlamaları belirlenebilir. Aracın siparişleri teslim edebileceği bölgeler `vehicles.allowed_zones` parametresi tarafından ayarlanır:

- araç, `allowed_zones` parametresinde belirtilen herhangi bir bölgedeki siparişleri yerine getirebilir;

- herhangi bir erişim bölgesi ayarlanmamışsa, araç siparişleri kısıtlama olmaksızın yerine getirebilir;

- tüm araçların erişilebilirlik bölgeleri varsa ve sipariş noktası bunlardan herhangi birine denk gelmiyorsa bir sipariş yerine getirilemez.


Teslimat için yasaklanmış bölgeler `vehicle.forbidden_zones` parametresi ile belirtilir. Araç, `forbidden_zones` parametresinde belirtilen bölgelerden hiçbirine sipariş teslim edemez.


{% note info "Not" %}

Sipariş izin verilen ve yasak bölgelerin kesiştiği alanda bulunuyorsa, teslim edilemez, `forbidden_zones` parametresi `allowed_zones`’den daha yüksek bir önceliğe sahiptir.

{% endnote %}

{% include [geozones-orders-in-geofences](_includes/orders-in-geofences-7f09dc7085cf.md) %}


**Örnek**

Örnekte, 4 sipariş ve 2 araç vardır, [arayüzde ayarlanmıştır](https://docs.routeq.com/doc/tr/vrp/geozones.md) 4 coğrafi bölge. Siparişlerin coğrafi bölgelere aidiyeti koordinatlara göre otomatik olarak belirlenir:

- Sipariş 1 – aynı anda `zone1` ve `zone2` bölgelerinde;

- Sipariş 2 – `zone1` bölgesinde;

- Sipariş 3 – aynı anda `zone2` ve `zone3` bölgelerinde;

- Sipariş 4 – `zone4` bölgesinde.


Araçlar için coğrafi bölge erişilebilirliği belirlenmiştir:

#|
||`vehicle.allowed_zones` | `vehicle.forbidden_zones`||
||**Araç 1** | `zone1`, `zone2` | `zone3`||
||**Araç 2** | Tanımlanmış bölge yok | `zone2`||
|#

Sonuç olarak, Araç 1 Sipariş 1 ve 2’yi, Araç 2 ise Sipariş 4’ü teslim eder. Sipariş 3 ise adresi her iki araç için de yasaklanmış bölgelerde olduğu için tahsis edilmemiştir.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/81174485-ee6b74a6-71f556d8-af74b5a2) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/81174485-ee6b74a6-71f556d8-af74b5a2) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#81174485-ee6b74a6-71f556d8-af74b5a2)


### İsteğe bağlı coğrafi bölgeler {#optional-geozones}

İsteğe bağlı coğrafi bölgeler, ziyaret için bir bonus veya ceza verilen siparişleri araçlar arasında dağıtmak için kullanılabilir. Her araca bu coğrafi bölgelerden bir veya daha fazlası atanabilir.

İsteğe bağlı coğrafi bölgeler, katı olmayan bir kısıtlamadır. Onların sayesinde ziyareti tercih edilen bölgeleri (öncelikli ve öncelikli olmayan bölgeler) ayarlamak için kullanılabilir.

İsteğe bağlı coğrafi bölgeler `vehicle.optional_zones` dizisi kullanılarak belirtilir:

- `optional_zones.N.zone` – coğrafi bölge adı;
- `optional_zones.N.value` – eğer parametrenin değeri 0’dan büyükse, araç belirtilen coğrafi bölgeyi ziyaret ettiği için bir bonus alır (bu parametrenin değeri rota ücretinden düşülür) ve 0’dan küçükse – bir ceza alır (değer rota ücretine eklenir).


**Örnek 1**

İki araçla 10 sipariş teslim edilmesi gerekiyor. Bir araç için `South` isteğe bağlı bir coğrafi bölge, diğeri için ise `North` isteğe bağlı coğrafi bölge ayarlanmıştır. Bu coğrafi bölgeleri ziyaret etmek için 1000 birim bonus belirlenmiştir. Sonuç olarak, araçlardan biri güneydeki, diğeri ise kuzeydeki siparişleri teslim ediyor. Sipariş 5 bir istisna olmuştur, `South` bölgesindeydi, ancak araç ile teslim edilmiştir `Courier north.`

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/ebf802c4-bf1f7953-ce5a6916-e7422d22) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/ebf802c4-bf1f7953-ce5a6916-e7422d22) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#ebf802c4-bf1f7953-ce5a6916-e7422d22)

**Örnek 2**

4 kuryenin 27 siparişi teslim etmesi gerekiyor. Kuryeler için şehir 4 isteğe bağlı coğrafi bölgeye ayrılmıştır: `Northwest`, `Northeast`, `Southwest` ve `Southeast`. Her kuryeye bonus alacağı bir öncelikli bölge, iki öncelikli olmayan bölge ve ceza alacağı bir bölge belirlenmiştir. Planlama, kuryeler siparişleri öncelikli bölgelerine teslim etmesiyle sonuçlanır. Araç kapasitesi sınırlamaları nedeniyle 18, 20 ve 23 numaralı siparişler istisna olmuştur.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/e196b471-43304e5a-d5ef5e2b-79b01475) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/e196b471-43304e5a-d5ef5e2b-79b01475) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#e196b471-43304e5a-d5ef5e2b-79b01475)


### Uyumsuz coğrafi bölgeler {#incompatible-geozones}

Farklı teslimat bölgelerine ait siparişlerin aynı kurye seferine verilmesini engellemek için coğrafi bölge uyumsuzluğu tanımlayabilirsiniz.

Bu tür bölgelerin listesi yalnızca tüm çözüm için değil, aynı zamanda belirli bir kurye için de `vehicles.incompatible_zones` parametresi ile ayarlanabilir. Kurye için tanımlanan uyumsuz bölgeler, global olarak tanımlanan bölgelere göre önceliklidir. Kuryenin `options.incompatible_zones` global kısıtlamaya tabi olmasını önlemek için, onun için `vehicles.incompatible_zones` alanında boş bir liste belirleyin.

**Örnek**

Üç kuryenin her biri şehrin farklı bölgelerine 4 sipariş teslim etmek zorundadır: kuzeybatı, güneybatı, kuzeydoğu ve güneydoğu. Bu alanlar planlama sırasında coğrafi bölgelerle tanımlanmıştır: `Northwest`, `Southwest`, `Northeast`, `Southeast`.

Coğrafi bölge uyumsuzluğu global olarak tanımlanmıştır: güney bölgeleri (`Southwest` ve `Southeast`) kuzey bölgeleri (`Northwest` ve `Northeast`) ile uyumsuzdur. İki kurye için bir de `vehicles.incompatible_zones` parametresi tanımlanmıştır: ilk kurye için boş bir liste içermekte ve ikinci kurye için ise batı bölgelerinin (`Northwest` ve `Southwest`) doğu bölgeleri ile uyumsuz olduğu tanımlanmıştır (`Northeast` ve `Southeast`).

Planlamanın bir sonucu olarak:

- ilk kurye `Courier 1` global uyumsuzluk kısıtlamasına tabi değildir ve ona farklı bölgelerden gelen 4 sipariş tek seferde atanır;
- ikinci kurye için, `vehicles.incompatible_zones` parametresinde tanımlanmış olan bölge uyumsuzluğu kısıtlamaları `Courier 2` çalışıyor: doğu bölgelerine giden siparişler bir sefere, batı bölgelerine giden siparişler ise diğerine düşer;
- üçüncü kurye `Courier 3` global kısıtlamalara tabidir: güney bölgelerine ve kuzey bölgelerine verilen siparişler farklı seferlere ayrılmıştır.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/af0b910e-359eb0cc-15ce774a-cb991aff) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/af0b910e-359eb0cc-15ce774a-cb991aff) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#af0b910e-359eb0cc-15ce774a-cb991aff)


## Aracın hareket süresinin düzeltilmesi  {#travel-time}

Yandex Haritalar trafik sıkışıklığı verileri ve talepte belirtilen hız, bir rota oluştururken aracın hızını hesaplamak için kullanılır. Bununla birlikte, kamyonların trafikte daha yavaş hareket ettiği ve bazı sürücülerin daha agresif araç kullandığı ve tahmin edilenden daha erken vardığı sıklıkla görülen bir durumdur.

Bu tür sapmaları telafi etmek için RouteQ’de, kesirli bir değer belirleyebileceğiniz `travel_time_multiplier` seçeneği var. Değeri 1 olduğunda hesaplama, beklenen ortalama hıza sahip araç için yapılacaktır. Daha küçük değerler için (örn. 0,8) hesaplama daha hızlı araçlar için, daha büyük değerler durumda ise (örn. 1,2) daha yavaş araçlar için yapılacaktır.


{% note info "Not" %}

`travel_time_multiplier` parametresi sadece aracın hızını etkiler. Teslimat noktasındaki hizmet süresi aynı kalır.

{% endnote %}


**Örnek 1**

Aşağıdaki örnekte, rota oluşturma talebi seyahat süresi düzeltilmeden gönderilmektedir. Sonuç olarak, araç teslimatı 4 saat 20 dakikada gerçekleştiriyor ve bunun 3 saat 40 dakikası noktalar arasında seyahat etmek için harcanıyor.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/8ffce446-a41192c2-601e0a48-c085fcaa) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/8ffce446-a41192c2-601e0a48-c085fcaa) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#8ffce446-a41192c2-601e0a48-c085fcaa)

**Örnek 2**

Örnek 1 ile aynıdır, ancak `travel_time_multiplier` parametresi 0,5’e eşit olarak eklenmiştir. Oluşturulan rotada kurye teslimatı 2 saat 25 dakikada gerçekleştiriyor, bunun 1 saat 45 dakikası noktalar arasında seyahat etmek için harcanıyor. Bununla birlikte park edilmesi ve malların aktarılması için harcanan süre değişmiyor.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/62529abd-c4800225-80979b92-65d9095) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/62529abd-c4800225-80979b92-65d9095) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#62529abd-c4800225-80979b92-65d9095)

**Örnek 3**

Örnek 1 ile aynıdır, ancak `travel_time_multiplier` parametresi 2’ye eşit olarak eklenmiştir. Oluşturulan rotada kurye teslimatı 7 saat 58 dakikada gerçekleştiriyor ve bunun 7 saat 18 dakikası noktalar arasında seyahat etmek için harcanıyor. Örnek 1’deki rotadan yaklaşık iki kat daha uzun sürer çünkü inşa edilen rotanın bir kısmı trafiğin yoğun olduğu saatlere denk gelir ve araç maksimum hızını kullanamaz. Park etme ve gönderilerin aktarılması için harcanan süre değişmez.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/c18f3069-5f149ce3-25105477-bf98b8a7) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/c18f3069-5f149ce3-25105477-bf98b8a7) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#c18f3069-5f149ce3-25105477-bf98b8a7)


## Hizmet süresinin düzeltilmesi  {#service-duration}

Kuryenin siparişi teslim ederken, teslim etmek için zaman ayırması gerekir. Buna park etme, asansör ile yukarı çıkma, kargonun teslimi ve evrak işleri dahildir. RouteQ’de bu, `service_duration` ve `shared_service_duration` alanları tarafından siparişlerde sağlanır. Ancak, bazı kuryeler gönderileri diğerlerinden daha hızlı teslim eder. Örneğin:

- Araçlar ve toplu taşıma araçlarını kullanan kuryeler için eş zamanlı planlama sırasında, toplu taşıma araçlarıyla seyahat eden kuryeler park etmek için zaman kaybetmez. Sonuç olarak, teslimat işlemleri için daha az zamana ihtiyaç duyarlar.

- Kuryeler farklı beceri seviyelerine sahip olabilirler. Deneyimli kuryeler genellikle siparişi teslim etmek için daha az zaman harcarlar.


Kuryelerin hizmet süreleri arasındaki farkı telafi etmek için RouteQ’de, belirli bir kuryenin hizmet süresini etkileyen `service_duration_multiplier` ve `shared_service_duration_multiplier` seçenekleri mevcuttur. 1 değeri söz konusu olduğunda, hizmet süresi `service_duration` veya `shared_service_duration` alanında belirtilenle aynı olacaktır, 1’den küçük değerlerde hizmet süresi daha kısa olacaktır ve 1’den büyük değerlerde hizmet süresi daha uzun olacaktır.


{% note info "Not" %}

`service_duration_multiplier` ve `shared_service_duration_multiplier` parametreleri ve yalnızca hizmet süresini etkiler. Noktalar arasındaki hareket süresi aynı kalıyor.

{% endnote %}


**Örnek 1**

Aşağıdaki örnekte, rota oluşturma isteği hizmet süresi düzeltilmeden gönderilmiştir.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/4d81c058-678049b4-80f8db40-26d3547b) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/4d81c058-678049b4-80f8db40-26d3547b) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#4d81c058-678049b4-80f8db40-26d3547b)

**Örnek 2**

Aşağıdaki örnekte, rota oluşturma için Örnek 1’dekiyle aynı istek gönderilmiştir, ancak parametre `service_duration_multiplier` değeri 0,5’tir. Hesaplamada siparişlerin hizmet süresi Örnek 1’e kıyasla yarısı kadar zaman alıyor.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/b8bf6da7-9a4fdb44-14bdd495-a02618ce) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/b8bf6da7-9a4fdb44-14bdd495-a02618ce) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#b8bf6da7-9a4fdb44-14bdd495-a02618ce)

**Örnek 3**

Aşağıdaki örnekte, rota oluşturma için Örnek 1’dekiyle aynı istek gönderilmiştir, ancak parametre `service_duration_multiplier` değeri 2’dir. Hizmet, örnek 1’dekinden iki kat daha uzun sürmektedir.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/6033c3f3-50fce541-199110ee-4047f8ae) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/6033c3f3-50fce541-199110ee-4047f8ae) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#6033c3f3-50fce541-199110ee-4047f8ae)


## Mümkün olan en kısa sürede teslimat {#as-soon-as-possible}

Optimum bir rota oluşturmak için algoritma, rota noktaları arasındaki beklemeyi en aza indirir. Ancak teslimatı daha erken bir zamana kaydırmanın yararlı olduğu zamanlar vardır. Örneğin:

- geç kalma riskini en aza indirmeniz gerekir;
- kurye gündüz saatlerinde daha rahat seyahat eder.

Siparişlerin mümkün olduğunca erken teslim edilmesini sağlamak için iki parametreden oluşan `penalty.arrival_after_start`’yi kullanın:

- `average_h` – zaman aralığının başlangıcından sonraki ortalama varış süresi için ceza miktarını ayarlar. Seçeneği kullanırken her zaman bu değerin belirtilmesi önerilir.
- `as_soon_as_possible` – rotaya mümkün olduğunca erken başlanıp başlanmayacağını belirler. Parametre `true` veya `false` (varsayılan) değerini alır. `average_h`’e ek olarak belirtilir.


{% note info "Not" %}

Algoritma, bir aracın başlangıç ve varış zamanlarını yalnızca depo için [esnek başlangıç zamanı](https://docs.routeq.com/doc/tr/vrp/properties-of-depot.md#depot-flexible-start-time) etkinleştirilmişse değiştirebilir.

{% endnote %}


Eğer `penalty.arrival_after_start` cezası kullanılmazsa, rota noktalar arasında minimum bekleme süresi ve depodan maksimum geç başlama süresi ile oluşturulacaktır.

![](_images/no-penalty.png)

Bir ceza kullanılırsa, algoritma kaliteyi düşürmüyorsa, daha erken başlayacak rotalar oluşturacaktır.

![](_images/with-penalty.png)

Rotanın mümkün olduğunca erken başlatılması isteniyorsa (bu ek bekleme süresine neden olsa bile), `penalty.arrival_after_start.as_soon_as_possible` = `true` belirtin.

![](_images/with-penalty-and-asap.png)

**Örnek 1**

Rota, farklı zaman aralıklarına sahip 4 siparişten oluşmaktadır. Sipariş 5 için zaman aralığının en erken başlangıcı 08.00’dir. Kurye depodan 11.02’de yola çıkıyor ve ilk sipariş için 11.40’ta varıyor. 5 numaralı sipariş 12.59’da teslim ediliyor.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/2cea7d21-47d905f-873eb01e-40c4d9cd) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/2cea7d21-47d905f-873eb01e-40c4d9cd) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#2cea7d21-47d905f-873eb01e-40c4d9cd)

**Örnek 2**

Örnek 1’deki aynı veriler kullanılıyor, ancak zaman aralığının başlangıcından sonraki ortalama varış süresi için `penalty.arrival_after_start.average_h` parametresi kullanılarak bir ceza atanmıştır. Bununla birlikte kurye depodan 06.59’da yola çıkar, 8 dakika bekler ve en erken siparişi (sipariş 5) 08.00’de teslim eder.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/1842ec79-101457b2-b4fa6bdf-5ce7648b) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/1842ec79-101457b2-b4fa6bdf-5ce7648b) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#1842ec79-101457b2-b4fa6bdf-5ce7648b)

**Örnek 3**

Örnek 2’deki aynı veriler kullanılır, ancak ek olarak `penalty.arrival_after_start.as_soon_as_possible` = `true` parametresi belirlenmiştir. Bu durumda kurye depodan 06.00’da yola çıkar, 1 saat 7 dakika bekler ve en erken siparişi (sipariş 5) 08.00’de teslim eder.

[API isteği (JSON)](https://courier.yandex.ru/vrs/api/v1/log/request/bc05da83-830917ab-f0dacca5-c75ed309) ⋅ [API yanıtı](https://courier.yandex.ru/vrs/api/v1/result/bc05da83-830917ab-f0dacca5-c75ed309) ⋅ [Haritada aç](https://yandex.com/courier/mvrp-map#bc05da83-830917ab-f0dacca5-c75ed309)


## Eklentiler {#coupling}

Eklenti, treylerli bir kamyondur (çekici). Siparişler çekiciye ve treylere yüklenebilir ve bununla birlikte bir sipariş kısmen çekiciye ve kısmen de treylere yüklenebilir.

Treyleri tanımlamak için `trailer` nesnesini kullanın.

#|
||**Alan** | **Açıklama**||
||`trailer.сapacity` | Treyler kapasitesi, aşağıdaki alanlar tarafından tanımlanır:

- `weight_kg` – kilogram cinsinden kapasite;
- `units` – birim cinsinden kapasite.

Treylerin kapasitesine eklenir.||
||`trailer.capacity.custom` | Treylerde taşınabilecek kullanıcı birimi sayısı.

Kullanıcı birimlerdeki kapasiteler `"name": size` biçiminde belirtilir, burada:

 - `name` – kullanıcı biriminin adı (`additionalProperties` alanı yerine belirtilir);
 - `size` – aracın ilgili birimlerdeki kapasitesi negatif olmayan bir gerçek sayı olarak ifade edilir.

 Birimin adı sevkiyatlarda veya diğer araçlarda mevcutsa ancak bu araçta yoksa, kapasitenin sınırsız olduğu varsayılır.||
||`trailer.capacity.limits` | Treyler yükleme limiti, aşağıdaki alanlar tarafından tanımlanır:

 - `units_perc` – kullanıcı tanımlı birimlerde, treyler kapasitesinin yüzdesi olarak ifade edilir;
 - `volume_perc` – treyler hacminin bir yüzdesi olarak;
 - `weight_perc` – treylerde taşınan yükün izin verilen azami toplam ağırlığının yüzdesi olarak.||
||`trailer.capacity.volume` | Treylerin metrik boyutları aşağıdaki alanlar tarafından tanımlanır:

 - `depth_m`\* – derinlik;
 - `height_m`\* – yükseklik;
 - `width_m`\* – genişlik.

 Değerler metre cinsinden ifade edilmektedir.

 \* – Zorunlu parametre||
||`trailer.capacity.volume_cbm` | Metreküp cinsinden treyler hacmi.

Eğer treylerin hem metrik boyutları hem de hacmi varsa, `trailer.capacity.volume` boyutlarını ve `trailer.capacity.volume_cbm` kapasiteyi tanımlar.||
||`trailer.max_capacity_difference` | Treylerin ve çekicinin yükündeki maksimum fark aşağıdaki alanlar tarafından tanımlanır:

 - `units` – treylerde çekiciye göre kaç birim daha fazla mal olabilir;
 - `volume_cbm` – treyler yükünün çekici yükünden kaç metreküp daha büyük olabileceği;
 - `weight_kg` – treyler yükünün çekici yükünden kaç kilogram daha fazla olabileceği.

 Alanlardan herhangi biri eksikse, bu, üzerinde herhangi bir kısıtlama olmadığı anlamına gelir.

 Treyler ve çekici yükü arasındaki farka ilişkin fiziksel sınırlamalar vardır. Çekici boşsa ve treyler ağırsa, araç kontrol edilemez hale geliyor, eklenti hareket edemez.||
||`trailer.max_capacity_difference.custom` | Treyler ve çekici arasındaki yüklü kullanıcı birimi sayısında izin verilen maksimum fark.

Kullanıcı birimlerinde izin verilen fark `"name": size` biçiminde belirtilir:

 - `name` – kullanıcı biriminin adı (`additionalProperties` alanı yerine belirtilir);
 - `size` – aracın ilgili birimlerdeki kapasitesi negatif olmayan bir gerçek sayı olarak ifade edilir.

 Birimin adı sevkiyatlarda veya diğer araçlarda mevcutsa ancak bu araçta yoksa, herhangi bir kısıtlama yoktur.||
||`trailer.cost` | Treyler ücreti, aşağıdaki alanlar tarafından tanımlanır:

 - `fixed` – treylerin kullanımı için sabit bir ücret;
 - `hour` – treyler kullanım saati başına ücret;
 - `km` – kilometre başına ücret (yalnızca çekicinin treyler ile seyahat ettiği yolculuk bölümleri için eklenir);
 - `location` – varış noktası başına treyler kullanım ücreti;
 - `run` – depodan varış noktasına yolculuk başına ücret;
 - `tonne_km` – kilometre başına bir ton taşımanın ücreti.

 Treyler kullanılıyorsa çekici ücretine eklenir.||
||`trailer.decoupling_time_s` | Treylerin ayrılma süresi saniye cinsinden.

Yalnızca tipi `anchor` ve `parking` olan siparişler için (bkz. bölüm [Treyler kullanımı](https://docs.routeq.com/doc/tr/vrp/supported-use-cases.md#trailer)).||
||`trailer.coupling_time_s` | Saniye cinsinden römork bağlama süresi.

Yalnızca tipi `anchor` ve `parking` olan siparişler için (bkz. bölüm [Treyler kullanımı](https://docs.routeq.com/doc/tr/vrp/supported-use-cases.md#trailer)).||
||`trailer.rolling_cost` | Yüklerin treylerden çekiciye her aktarımı* için ceza.

\* Aktarım – siparişlerin treylerden çekiciye aktarılması (erişilemeyen yerlere teslim etmek için (bkz. [Treyler kullanımı](https://docs.routeq.com/doc/tr/vrp/supported-use-cases.md#trailer))).||
||`trailer.rolling_time` | Yükün treylerden çekiciye aktarım süresi, saniye cinsinden ayarlanır. Aşağıdaki alanlarda tanımlanabilir:

 - `fixed_time_s` – sabit zaman;
 - `s_per_kg` – kilogram yük başına boşaltma süresi;
 - `s_per_m3` – metreküp yük başına boşaltma süresi;
 - `s_per_unit` – birim yük başına boşaltma süresi.

 Birden fazla zaman türü belirtilmişse, en çok zaman alan zaman türü kullanılır. Herhangi bir tür belirtilmemişse, yalnızca sabit zaman kullanılır.

 Aktarım için treylerin önce bağlanması ve sonra çözülmesi gerektiğinden, aktarım süresine `coupling_time_s` ve `decoupling_time_s` eklenir.||
|#


Sorgudaki treyler tanımlama örneği:

```json
{
    "trailer": {
        "capacity": {
            "weight_kg": 10000,
            "units": 200
        },
        "max_capacity_difference": {
            "units": 10,
            "weight_kg": 0
        },
        "cost": {
            "fixed": 1000,
            "km": 10
        },
        "decoupling_time_s": 300,
        "coupling_time_s": 300,
        "rolling_time": {
            "fixed_time_s": 3000
        }
    }
}
```

Çekicinin treylerle kullanımı hakkında ayrıntılar için [Treyler kullanımı](https://docs.routeq.com/doc/tr/vrp/supported-use-cases.md#trailer) bölümüne bakın.

{% include [warehouse-feedback](_includes/feedback-b2774f1f09f5.md) %}
