ShipmentModel

Gönderim modeli, bir grup araç tarafından gerçekleştirilmesi gereken bir dizi gönderim içerir ve toplam maliyeti en aza indirir. Bu durumda toplam maliyet, toplamda şu olur:

  • araçları yönlendirme maliyeti (toplam süre başına maliyet, seyahat süresi başına maliyet ve tüm araçlar üzerindeki sabit maliyet).
  • sorumlu tutulamaz.
  • Gönderimlerin dünya genelindeki süresinin maliyeti
JSON gösterimi
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
Alanlar
shipments[]

object (Shipment)

Modelde yapılması gereken gönderim grubu.

vehicles[]

object (Vehicle)

Ziyaret gerçekleştirmek için kullanılabilecek araç grubu.

globalStartTime

string (Timestamp format)

Modelin genel başlangıç ve bitiş zamanı: Bu aralık dışındaki hiçbir zaman geçerli kabul edilemez.

Modelin zaman aralığı bir yıldan kısa olmalıdır.Diğer bir deyişle, globalEndTime ile globalStartTime arasında en fazla 31536. 000 saniye olmalıdır.

cost_per_*hour alanlarını kullanırken performansı artırmak için bu aralığı daha küçük bir aralığa ayarlamak isteyebilirsiniz (ör. tek bir günü modelliyorsanız genel zaman sınırlarını o güne ayarlamanız gerekir). Ayarlanmazsa varsayılan olarak 1 Ocak 1970, 00:00:00 (UTC) (ör. saniye: 0, nanosaniye: 0) kullanılır.

RFC3339 UTC "Zulu" biçiminde, nanosaniye çözünürlüğüne ve en fazla dokuz kesirli basamağa sahip bir zaman damgası. Örnekler: "2014-10-02T15:01:23Z" ve "2014-10-02T15:01:23.045123456Z".

globalEndTime

string (Timestamp format)

Ayarlanmazsa varsayılan olarak 1 Ocak 1971, 00:00:00 UTC (ör. saniye: 31536000, nanosaniye: 0) kullanılır.

Nanosaniye çözünürlüğüne sahip ve en fazla dokuz kesirli basamak içeren RFC3339 UTC "Zulu" biçiminde bir zaman damgası. Örnekler: "2014-10-02T15:01:23Z" ve "2014-10-02T15:01:23.045123456Z".

globalDurationCostPerHour

number

Genel planın "küresel süresi", tüm araçların en erken geçerli başlangıç zamanı ile en geç geçerli bitiş zamanı arasındaki farktır. Kullanıcılar, örneğin en kısa sürede iş tamamlama için optimizasyon yapmaya çalışmak üzere bu miktara saat başına bir maliyet atayabilir. Bu maliyet, Shipment.penalty_cost ile aynı birimde olmalıdır.

durationDistanceMatrices[]

object (DurationDistanceMatrix)

Modelde kullanılan süre ve mesafe matrislerini belirtir. Bu alan boşsa useGeodesicDistances alanının değerine bağlı olarak Google Haritalar veya jeodezik mesafeler kullanılır. Boş değilse useGeodesicDistances doğru olamaz ve durationDistanceMatrixSrcTags veya durationDistanceMatrixDstTags boş olamaz.

Kullanım örnekleri:

  • İki konum vardır: locA ve locB.
  • Rotasını locA adresinde başlatıp locA'da sonlandıran 1 araç.
  • locB adresinde 1 teslim alma ziyareti isteği.
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • Üç konum vardır: locA, locB ve locC.
  • Rotasını loA'da başlatıp locB'de sonlandıran "hızlı" matrisi kullanan 1 araç.
  • "slow" matrisini kullanarak rotasını locB'de başlatıp locB'de bitiren 1 araç.
  • Rotasını locB'de başlatıp locB'de sonlandıran "hızlı" matrisi kullanan 1 araç.
  • locC'de 1 teslim alma ziyaret isteği isteği.
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

Süre ve mesafe matrislerinin kaynaklarını tanımlayan etiketler; durationDistanceMatrices(i).rows(j), durationDistanceMatrixSrcTags(j) etiketine sahip ziyaretlerden i matrisindeki diğer ziyaretlere kadar olan süreleri ve mesafeleri tanımlar.

Etiketler VisitRequest.tags veya Vehicle.start_tags'a karşılık gelir. Belirli bir VisitRequest veya Vehicle, bu alandaki bir etiketle tam olarak eşleşmelidir. Vehicle etiketinin kaynak, hedef ve matris etiketlerinin aynı olabileceğini unutmayın. Benzer şekilde, VisitRequest etiketinin kaynak ve hedef etiketleri de aynı olabilir. Tüm etiketler farklı olmalıdır ve boş dize olamaz. Bu alan boş değilse durationDistanceMatrices boş olmamalıdır.

durationDistanceMatrixDstTags[]

string

Süre ve mesafe matrislerinin hedeflerini tanımlayan etiketler; durationDistanceMatrices(i).rows(j).durations(k) (resp. durationDistanceMatrices(i).rows(j).meters(k)), i matrisinde durationDistanceMatrixSrcTags(j) etiketine sahip ziyaretlerden durationDistanceMatrixDstTags(k) etiketine sahip ziyaretlere yapılan seyahatin süresini (veya mesafesini) tanımlar.

Etiketler VisitRequest.tags veya Vehicle.start_tags'a karşılık gelir. Belirli bir VisitRequest veya Vehicle, bu alandaki tam olarak bir etiketle eşleşmelidir. Bir Vehicle'nin kaynak, hedef ve matris etiketlerinin aynı olabileceğini unutmayın. Benzer şekilde, bir VisitRequest'nin kaynak ve hedef etiketleri de aynı olabilir. Tüm etiketler farklı olmalıdır ve boş dize olamaz. Bu alan boş değilse durationDistanceMatrices boş olmamalıdır.

transitionAttributes[]

object (TransitionAttributes)

Modele geçiş özellikleri eklendi.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

Uyumsuz shipment_types grupları (ShipmentTypeIncompatibility bölümüne bakın).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

shipmentType koşulları grupları (ShipmentTypeRequirement bölümüne bakın).

precedenceRules[]

object (PrecedenceRule)

Modelde uygulanması gereken öncelik kuralları kümesi.

maxActiveVehicles

integer

Maksimum etkin araç sayısını kısıtlar. Rotasında en az bir gönderim yapılan araçlar etkindir. Bu özellik, araçlardan daha az sürücünün bulunduğu ve araç filosunun heterojen olduğu durumlarda rota sayısını sınırlandırmak için kullanılabilir. Ardından optimizasyon, kullanılacak en iyi araç alt kümesini seçer. Tamamen olumlu olmalıdır.

Gönderim

Tek bir öğenin, teslim alma alanlarından birinden teslimatlarına kadar gönderilmesi. Gönderimin gerçekleştirilmiş olarak kabul edilmesi için benzersiz bir aracın, teslim alma konumlarından birini ziyaret etmesi (ve yedek kapasitelerini buna göre azaltması) ve daha sonra teslimat konumlarından birini ziyaret etmesi (ve yedek kapasitelerini buna göre yeniden artırması) gerekir.

JSON gösterimi
{
  "displayName": string,
  "pickups": [
    {
      object (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
Alanlar
displayName

string

Gönderinin kullanıcı tanımlı görünen adı. En fazla 63 karakter uzunluğunda olabilir ve UTF-8 karakterleri kullanabilir.

pickups[]

object (VisitRequest)

Gönderimle ilişkili teslim alma alternatifleri grubu. Belirtilmemişse aracın yalnızca teslimatlarla ilgili bir konumu ziyaret etmesi gerekir.

deliveries[]

object (VisitRequest)

Kargoyla ilişkili teslimat alternatifleri grubu. Belirtilmemişse aracın yalnızca teslim alma işlemleriyle ilgili bir konumu ziyaret etmesi gerekir.

loadDemands

map (key: string, value: object (Load))

Sevkiyatla ilgili gereklilikler (ör. ağırlık, hacim, palet sayısı vb.) Haritadaki anahtarlar, karşılık gelen yükün türünü (tercihen birimleri de içeren) açıklayan tanımlayıcılar olmalıdır. Örneğin: "weight_kg", "volume_gallons", "pallet_count" vb. Belirli bir anahtar haritada görünmüyorsa ilgili yük geçersiz olarak kabul edilir.

allowedVehicleIndices[]

integer

Bu gönderimi gerçekleştirebilecek araç grubu. Boşsa tüm araçlar tarafından gerçekleştirilebilir. Araçlar, ShipmentModel vehicles listesinde kendi indekslerine göre gösterilir.

costsPerVehicle[]

number

Bu gönderim her bir araç tarafından teslim edildiğinde tahakkuk eden maliyeti belirtir. Belirtilmişse ŞUNLARDAN BİRİNİ içermelidir:

  • costsPerVehicleIndices ile aynı sayıda öğe içermelidir. costsPerVehicle[i], modelin costsPerVehicleIndices[i] aracına karşılık gelir.
  • modeldeki araç sayısı kadar öğe olmalıdır. i. öğe, modelin i. aracına karşılık gelir.

Bu maliyetler, penaltyCost ile aynı birimde olmalı ve negatif olmamalıdır. Bu tür maliyetler yoksa bu alanı boş bırakın.

costsPerVehicleIndices[]

integer

costsPerVehicle özelliğinin geçerli olduğu araç dizinleri. Boş değilse costsPerVehicle ile aynı sayıda öğeye sahip olmalıdır. Araç dizini birden fazla kez belirtilemez. costsPerVehicleIndices hariç tutulan araçların maliyeti sıfırdır.

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

Teslim alma ile teslimat arasındaki en kısa yola kıyasla maksimum mutlak sapma süresini belirtir. Belirtilmişse negatif olmamalıdır ve kargo en azından bir teslim alma ve teslimat içermelidir.

Örneğin, seçilen teslim alma alternatifinden doğrudan seçilen teslimat alternatifine geçmek için en kısa süre bu olmalıdır. Ardından pickupToDeliveryAbsoluteDetourLimit ayarlandığında şu yaptırımlar uygulanır:

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

Aynı gönderimde hem göreli hem de mutlak sınırlar belirtilirse olası her teslim alma/teslimat çifti için daha kısıtlayıcı sınır kullanılır. 10/2017 itibarıyla, yalnızca seyahat süreleri araçlara bağlı olmadığında dolambaçlar desteklenir.

"s" ile biten, en fazla dokuz kesir basamağı içeren, saniye cinsinden süre. Örnek: "3.5s".

pickupToDeliveryTimeLimit

string (Duration format)

Bir gönderinin teslim alınma başlangıcından teslimat başlangıcına kadar geçen maksimum süreyi belirtir. Belirtiliyse pozitif olmalıdır ve gönderim en az bir teslim alma ve teslimat içermelidir. Bu, teslim alma ve teslimat için seçilen alternatiflere veya aracın hızına bağlı değildir. Bu, maksimum sapma kısıtlamalarıyla birlikte belirtilebilir: Çözüm her iki spesifikasyona da uyar.

En fazla dokuz kesirli basamak içeren ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

shipmentType

string

Bu gönderim için bir "tür" belirten boş olmayan dize. Bu özellik, shipment_types arasındaki uyumsuzlukları veya gereksinimleri tanımlamak için kullanılabilir (ShipmentModel için shipmentTypeIncompatibilities ve shipmentTypeRequirements bölümüne bakın).

Tek bir ziyaret için belirtilen visitTypes ile farklıdır: Aynı gönderime ait tüm teslim alma/teslim etme işlemleri aynı shipmentType değerini paylaşır.

label

string

Bu gönderim için bir etiket belirtir. Bu etiket, ilgili ShipmentRoute.Visit öğesinin shipmentLabel bölümünde yer alan yanıtta bildirilmiştir.

ignore

boolean

Doğruysa bu gönderimi atlayın ancak penaltyCost uygulamayın.

Modelde shipmentTypeRequirements varsa bir gönderim göz ardı edildiğinde doğrulama hatası oluşur.

injectedFirstSolutionRoutes veya injectedSolutionConstraint'te gerçekleştirilen bir gönderinin yoksayılmasına izin verilir; çözümleyici, ilgili teslim alma/teslim etme ziyaretlerini gerçekleştiren rotadan kaldırır. Yoksayılan gönderimlere referans veren precedenceRules de yoksayılır.

penaltyCost

number

Sevkiyat tamamlanmazsa bu ceza, rotaların toplam maliyetine eklenir. Teslim alma ve teslimat alternatiflerinden birinin ziyaret edilmesi durumunda kargo tamamlanmış olarak kabul edilir. Maliyet, modeldeki maliyetle ilgili diğer tüm alanlar için kullanılan birim içinde ifade edilebilir ve pozitif olmalıdır.

ÖNEMLİ: Bu ceza belirtilmezse sonsuz olarak kabul edilir. Yani gönderim tamamlanmalıdır.

pickupToDeliveryRelativeDetourLimit

number

Alıştan teslimata kadar olan en kısa yola kıyasla maksimum göreli ek süreyi belirtir. Belirtilmişse negatif olmamalıdır ve kargo en azından bir teslim alma ve teslimat içermelidir.

Örneğin, t, seçilen teslim alma alternatifinden doğrudan seçilen teslimat alternatifine gitmek için gereken en kısa süre olsun. Ardından pickupToDeliveryRelativeDetourLimit ayarı şunları zorunlu kılar:

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

Aynı gönderimde hem göreli hem de mutlak sınırlar belirtilirse olası her teslim alma/teslimat çifti için daha kısıtlayıcı sınır kullanılır. 2017/10 tarihi itibarıyla, yalnızca seyahat süreleri araçlara bağlı olmadığında rota değişikliği desteklenmektedir.

VisitRequest

Araç tarafından yapılabilecek bir ziyaret isteği: Aracın coğrafi konumu (veya iki tanesi aşağıya bakın), zaman aralıklarıyla gösterilen açılış ve kapanış zamanları ve hizmet süresi (ürünlerin teslim alınması veya teslim edilmesi için vardığı araç tarafından harcanan süre) belirtilmelidir.

JSON gösterimi
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string
}
Alanlar
arrivalLocation

object (LatLng)

Bu VisitRequest işlemini gerçekleştirirken aracın ulaştığı coğrafi konum. Gönderim modelinin süre mesafe matrisleri varsa arrivalLocation belirtilmemelidir.

arrivalWaypoint

object (Waypoint)

Bu VisitRequest işlemini gerçekleştirirken aracın ulaştığı yol noktası. Gönderi modelinde süre mesafe matrisleri varsa arrivalWaypoint belirtilmemelidir.

departureLocation

object (LatLng)

Bu VisitRequest tamamlandıktan sonra aracın kalkacağı coğrafi konum. arrivalLocation ile aynıysa atlanabilir. Gönderim modelinin süre mesafe matrisleri varsa departureLocation belirtilmemelidir.

departureWaypoint

object (Waypoint)

Aracın bu VisitRequest tamamlandıktan sonra kalkış noktası. arrivalWaypoint ile aynıysa atlanabilir. Gönderi modelinde süre mesafe matrisleri varsa departureWaypoint belirtilmemelidir.

tags[]

string

Ziyaret isteğine eklenen etiketleri belirtir. Boş veya yinelenen dizelere izin verilmez.

timeWindows[]

object (TimeWindow)

Ziyarete varış saatini sınırlayan zaman aralıkları. Bir aracın, varış zamanı aralığının dışında hareket edebileceğini unutmayın. Yani varış zamanı + sürenin bir zaman aralığında olması gerekmez. Araç TimeWindow.start_time'ten önce gelirse bekleme süresi yaşanabilir.

TimeWindow değerinin olmaması, aracın bu ziyareti istediği zaman gerçekleştirebileceği anlamına gelir.

Zaman aralıkları birbirinden ayrı olmalıdır. Yani hiçbir zaman aralığı diğeriyle örtüşmemeli veya bitişik olmamalıdır. Ayrıca zaman aralıkları artan düzende olmalıdır.

costPerHourAfterSoftEndTime ve softEndTime yalnızca tek bir zaman aralığı varsa ayarlanabilir.

duration

string (Duration format)

Ziyaret süresi, ör.varış ile kalkış arasında aracın harcadığı süre (olası bekleme süresine eklenir, bkz. timeWindows).

En fazla dokuz kesirli basamak içeren ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

cost

number

Araç rotasında bu ziyaret isteğini işleme alma maliyeti. Bu, bir gönderinin her alternatif teslim alma veya teslimat işlemi için farklı maliyetler ödemek amacıyla kullanılabilir. Bu maliyet, Shipment.penalty_cost ile aynı birimde olmalı ve negatif olmamalıdır.

loadDemands

map (key: string, value: object (Load))

Bu ziyaret isteğinin taleplerini yükleyin. Bu, Shipment.load_demands alanına benzer, ancak tüm Shipment yerine yalnızca bu VisitRequest için geçerlidir. Burada listelenen talepler, Shipment.load_demands içinde listelenen taleplere eklenir.

visitTypes[]

string

Ziyaretin türlerini belirtir. Bu süre, aracın bu ziyareti tamamlaması için gereken ek süreyi ayırmak amacıyla kullanılabilir (bkz. Vehicle.extra_visit_duration_for_visit_type).

Bir tür yalnızca bir kez görünebilir.

label

string

Bu VisitRequest için bir etiket belirtir. Bu etiket, yanıtta ilgili ShipmentRoute.Visit içinde visitLabel olarak raporlanır.

LatLng

Enlem/boylam çiftini temsil eden bir nesne. Bu değer, enlem derecelerini ve boylam derecelerini temsil eden bir çift çift olarak ifade edilir. Aksi belirtilmediği sürece bu nesne WGS84 standardına uygun olmalıdır. Değerler normalleştirilmiş aralıklar içinde olmalıdır.

JSON gösterimi
{
  "latitude": number,
  "longitude": number
}
Alanlar
latitude

number

Derece cinsinden enlem. [-90,0; +90,0] aralığında olmalıdır.

longitude

number

Derece cinsinden boylam. [-180.0, +180.0] aralığında olmalıdır.

Ara nokta

Bir ara noktayı kapsüller. Ara noktalar, ziyaret isteklerinin varış ve kalkış konumlarını ve araçların başlangıç ve bitiş konumlarını işaretler.

JSON gösterimi
{
  "sideOfRoad": boolean,

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
Alanlar
sideOfRoad

boolean

İsteğe bağlı. Bu ara noktanın konumunun, aracın yolun belirli bir tarafında durmasına yönelik bir tercih olduğunu belirtir. Bu değeri ayarlarsanız rota, aracın yolun ortasından konuma doğru eğimli olan tarafında durabilmesi için konumdan geçer. Bu seçenek "HAYIR" ulaşım modunda kullanılamaz.

Birlik alanı location_type. Bir konumu temsil etmenin farklı yolları. location_type yalnızca aşağıdakilerden biri olabilir:
location

object (Location)

İsteğe bağlı bir başlık da dahil olmak üzere coğrafi koordinatlar kullanılarak belirtilen bir nokta.

placeId

string

Dönüm noktasıyla ilişkili ÖY yer kimliği.

Konum

Bir konumu (coğrafi nokta ve isteğe bağlı başlık) kapsar.

JSON gösterimi
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
Alanlar
latLng

object (LatLng)

Referans noktasının coğrafi koordinatları.

heading

integer

Trafiğin akış yönüyle ilişkilendirilen pusula başlığı. Bu değer, teslim alma ve bırakma için kullanılacak yolun kenarını belirtmek için kullanılır. Başlık değerleri 0 ile 360 arasında olabilir. 0 değeri Kuzey yönüne, 90 ise teslim edilecek Doğu başlığını vb. belirtir.

TimeWindow

Zaman aralıkları, bir etkinliğin zamanını (ör. ziyaretin varış zamanı veya bir aracın başlangıç ve bitiş zamanı) kısıtlar.

startTime ve endTime sabit zaman aralığı sınırları, etkinliğin en erken ve en geç zamanını (startTime <= event_time <= endTime) uygular. Yumuşak zaman aralığı alt sınırı softStartTime, etkinliğin softStartTime'dan ne kadar süre önce gerçekleştiğiyle orantılı bir maliyete neden olarak etkinliğin softStartTime'te veya sonrasında gerçekleşmesi tercihini ifade eder. Geçici zaman aralığı üst sınırı (softEndTime), etkinliğin gerçekleşmesinden softEndTime sonra ne kadar süreyle orantılı bir maliyet oluşturarak etkinliğin softEndTime tarihinde veya öncesinde gerçekleşmesi tercihini ifade eder. startTime, endTime, softStartTime ve softEndTime, genel zaman sınırlarına (ShipmentModel.global_start_time ve ShipmentModel.global_end_time'e bakın) uymalı ve aşağıdakilere dikkat etmelidir:

  0 <= `startTime` <= `endTime` and
  0 <= `startTime` <= `softStartTime` and
  0 <= `softEndTime` <= `endTime`.
JSON gösterimi
{
  "startTime": string,
  "endTime": string,
  "softStartTime": string,
  "softEndTime": string,
  "costPerHourBeforeSoftStartTime": number,
  "costPerHourAfterSoftEndTime": number
}
Alanlar
startTime

string (Timestamp format)

Zor zaman aralığı başlangıç zamanı. Belirtilmemesi durumunda ShipmentModel.global_start_time olarak ayarlanır.

RFC3339 UTC "Zulu" biçiminde, nanosaniye çözünürlüğüne ve en fazla dokuz kesirli basamağa sahip bir zaman damgası. Örnekler: "2014-10-02T15:01:23Z" ve "2014-10-02T15:01:23.045123456Z".

endTime

string (Timestamp format)

Sabit zaman aralığının bitiş zamanı. Belirtilmemesi durumunda ShipmentModel.global_end_time olarak ayarlanır.

Nanosaniye çözünürlüğüne sahip ve en fazla dokuz kesirli basamak içeren RFC3339 UTC "Zulu" biçiminde bir zaman damgası. Örnekler: "2014-10-02T15:01:23Z" ve "2014-10-02T15:01:23.045123456Z".

softStartTime

string (Timestamp format)

Zaman aralığının yumuşak başlangıç zamanı.

RFC3339 UTC "Zulu" biçiminde, nanosaniye çözünürlüğüne ve en fazla dokuz kesirli basamağa sahip bir zaman damgası. Örnekler: "2014-10-02T15:01:23Z" ve "2014-10-02T15:01:23.045123456Z".

softEndTime

string (Timestamp format)

Zaman aralığının esnek bitiş zamanı.

Nanosaniye çözünürlüğüne sahip ve en fazla dokuz kesirli basamak içeren RFC3339 UTC "Zulu" biçiminde bir zaman damgası. Örnekler: "2014-10-02T15:01:23Z" ve "2014-10-02T15:01:23.045123456Z".

costPerHourBeforeSoftStartTime

number

Etkinlik, softStartTime'dan önce gerçekleşirse modeldeki diğer maliyetlere eklenen saat başına maliyet. Şu şekilde hesaplanır:

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

Bu maliyet pozitif olmalıdır ve alan yalnızca softStartTime ayarlanmışsa ayarlanabilir.

costPerHourAfterSoftEndTime

number

Etkinlik softEndTime tarihinden sonra gerçekleşirse modeldeki diğer maliyetlere eklenen saat başına maliyet. Aşağıdaki şekilde hesaplanır:

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

Bu maliyet pozitif olmalıdır ve alan yalnızca softEndTime ayarlanmışsa ayarlanabilir.

Araç

Gönderim sorunu olan bir aracı modeller. Gönderim sorunu çözüldüğünde bu araç için startLocation ile başlayıp endLocation itibarıyla biten bir rota oluşturulur. Rota, bir ziyaret dizisidir (bkz. ShipmentRoute).

JSON gösterimi
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "routeModifiers": {
    object (RouteModifiers)
  },
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
Alanlar
displayName

string

Aracın kullanıcı tanımlı görünen adı. En fazla 63 karakter uzunluğunda olabilir ve UTF-8 karakterleri kullanabilir.

travelMode

enum (TravelMode)

Aracın kullanabileceği yolları ve hızını etkileyen ulaşım şekli. Ayrıca bkz. travelDurationMultiple.

routeModifiers

object (RouteModifiers)

Belirli bir araç için rotaların hesaplanma şeklini etkileyen ve karşılanması gereken bir koşul grubu.

startLocation

object (LatLng)

Aracın herhangi bir gönderimi teslim almadan önce başladığı coğrafi konum. Belirtilmemişse araç ilk teslimatında başlar. Gönderim modelinin süre ve mesafe matrisleri varsa startLocation belirtilmemelidir.

startWaypoint

object (Waypoint)

Aracın herhangi bir kargoyu teslim almadan önce başladığı coğrafi konumu temsil eden yol noktası. startWaypoint veya startLocation belirtilmezse araç ilk teslim alındığında başlar. Gönderi modelinde süre ve mesafe matrisleri varsa startWaypoint belirtilmemelidir.

endLocation

object (LatLng)

Aracın son VisitRequest işlemini tamamladıktan sonra sona erdiği coğrafi konum. Belirtilmezse aracın ShipmentRoute özelliği son VisitRequest işlemini tamamladığında sona erer. Gönderim modelinin süre ve mesafe matrisleri varsa endLocation belirtilmemelidir.

endWaypoint

object (Waypoint)

Aracın son VisitRequest adımını tamamladıktan sonra sona erdiği coğrafi konumu temsil eden ara nokta. endWaypoint veya endLocation belirtilmezse aracın ShipmentRoute cihazı son VisitRequest işlemini tamamladığında hemen sona erer. Gönderi modelinde süre ve mesafe matrisleri varsa endWaypoint belirtilmemelidir.

startTags[]

string

Aracın rotasının başına eklenen etiketleri belirtir.

Boş veya yinelenen dizelere izin verilmez.

endTags[]

string

Aracın rotasının sonuna eklenen etiketleri belirtir.

Boş veya yinelenen dizelere izin verilmez.

startTimeWindows[]

object (TimeWindow)

Aracın başlangıç konumundan ayrılabileceği zaman aralıkları. Bu değerler, genel zaman sınırları içinde olmalıdır (ShipmentModel.global_* alanlarına bakın). Belirtilmemişse bu genel zaman sınırlarının dışında herhangi bir sınır yoktur.

Aynı tekrarlanan alana ait zaman aralıkları ayrı olmalıdır. Yani zaman aralığı başka bir zaman aralığıyla çakışamaz ya da bitişik olamaz ve kronolojik sırada olmalıdır.

costPerHourAfterSoftEndTime ve softEndTime yalnızca tek bir zaman aralığı varsa ayarlanabilir.

endTimeWindows[]

object (TimeWindow)

Aracın bitiş konumuna ulaşabileceği zaman aralıkları. Genel zaman sınırları dahilinde olmalıdırlar (ShipmentModel.global_* alanlarına bakın). Belirtilmemişse bu genel zaman sınırlarının dışında herhangi bir sınır yoktur.

Aynı tekrarlanan alana ait zaman aralıkları ayrı olmalıdır. Yani zaman aralığı başka bir zaman aralığıyla çakışamaz ya da bitişik olamaz ve kronolojik sırada olmalıdır.

costPerHourAfterSoftEndTime ve softEndTime yalnızca tek bir zaman aralığı varsa ayarlanabilir.

unloadingPolicy

enum (UnloadingPolicy)

Araçta uygulanan kaldırma politikası.

loadLimits

map (key: string, value: object (LoadLimit))

Aracın kapasiteleri (ör. ağırlık, hacim, palet sayısı). Haritadaki anahtarlar, Shipment.load_demands alanındaki anahtarlarla tutarlı olarak yük türünün tanımlayıcılarıdır. Belirli bir anahtar bu haritada yoksa ilgili kapasitenin sınırsız olduğu kabul edilir.

costPerHour

number

Araç maliyetleri: Tüm maliyetler toplanır ve Shipment.penalty_cost ile aynı birimde olmalıdır.

Araç rotasının saatlik maliyeti. Bu maliyet, rotanın toplam süresine uygulanır ve seyahat süresini, bekleme süresini ve ziyaret süresini içerir. Yalnızca costPerTraveledHour yerine costPerHour kullanılması ek gecikmeye neden olabilir.

costPerTraveledHour

number

Araç rotasının kat edilen her saati başına maliyet. Bu maliyet, yalnızca rotanın aldığı seyahat süresine (ShipmentRoute.transitions cinsinden bildirilen) uygulanır ve bekleme süresi ile ziyaret süresi hariç tutulur.

costPerKilometer

number

Araç rotasının kilometre başına maliyeti. Bu maliyet, ShipmentRoute.transitions cinsinden bildirilen mesafeye uygulanır ve tek bir VisitRequest aracının arrivalLocation konumundan departureLocation konumuna dolaylı olarak seyahat edilen mesafeler için geçerli değildir.

fixedCost

number

Bu araç bir gönderimi yönetmek için kullanılıyorsa sabit maliyet uygulanır.

usedIfRouteIsEmpty

boolean

Bu alan yalnızca rotalarında kargo hizmeti verilmeyen araçlar için geçerlidir. Bu durumda aracın kullanılmış olarak kabul edilip edilmeyeceğini belirtir.

Doğru değerine ayarlanırsa araç, herhangi bir sevkiyat hizmeti vermese bile başlangıç konumundan bitiş konumuna kadar gider ve seyahatin başlangıcından itibaren oluşan zaman ve mesafe maliyetleri dikkate alınır.

Aksi takdirde, başlangıç konumundan bitiş konumuna gitmez ve bu araç için breakRule veya gecikme (TransitionAttributes'ten itibaren) planlanmaz. Bu durumda, aracın ShipmentRoute öğesinde araç dizini ve etiketi dışında herhangi bir bilgi bulunmaz.

routeDurationLimit

object (DurationLimit)

Aracın rotasının toplam süresi için uygulanan sınır. Belirli bir OptimizeToursResponse için aracın rota süresi, vehicleEndTime ile vehicleStartTime arasındaki farktır.

travelDurationLimit

object (DurationLimit)

Aracın rotasının seyahat süresine uygulanan sınır. Belirli bir OptimizeToursResponse'de rota seyahat süresi, tüm transitions.travel_duration'ların toplamıdır.

routeDistanceLimit

object (DistanceLimit)

Aracın rotasının toplam mesafesine uygulanan sınır. Belirli bir OptimizeToursResponse için rota mesafesi, tüm transitions.travel_distance_meters noktalarının toplamıdır.

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

VisitTypes dizelerinden sürelere kadar olan bir haritayı belirtir. Süre, belirtilen visitTypes ile ziyaretlerde VisitRequest.duration öğesine ek olarak alınacak süredir. Bu ek ziyaret süresi, costPerHour belirtilirse maliyet ekler. Anahtarlar (ör. visitTypes) boş dize olamaz.

Bir ziyaret isteğinin birden fazla türü varsa haritadaki her tür için bir süre eklenir.

breakRule

object (BreakRule)

Bu araçta uygulanacak ara programını açıklar. Boş bırakılırsa bu araç için ara verme planlanmaz.

label

string

Bu araç için bir etiket belirtir. Bu etiket, yanıtta ilgili ShipmentRoute öğesinin vehicleLabel olarak raporlanır.

ignore

boolean

Değer true ise usedIfRouteIsEmpty false (yanlış) değerine ayarlanmalıdır ve bu araç kullanılmadan kalır.

injectedFirstSolutionRoutes bölgesinde yoksayılan araç tarafından bir gönderim yapılırsa bu işlem ilk çözümde atlanır ancak yanıtta ücretsiz olarak gerçekleştirilebilir.

injectedSolutionConstraint içinde yoksayılan bir araç tarafından bir gönderim yapılırsa ve ilgili teslim alma/teslimat araçta kalacak şekilde kısıtlanırsa (ör. RELAX_ALL_AFTER_THRESHOLD seviyesine gevşetilmezse) yanıtta atlanır. Bir gönderinin allowedVehicleIndices alanı boş değilse ve izin verilen tüm araçlar yoksayılıyorsa bu gönderi yanıtta atlanır.

travelDurationMultiple

number

Bu aracın seyahat sürelerini artırmak veya azaltmak için kullanılabilen çarpım faktörünü belirtir. Örneğin, bu değeri 2,0 olarak ayarlamak, bu aracın daha yavaş olduğu ve seyahat sürelerinin standart araçlara kıyasla iki kat daha uzun olduğu anlamına gelir. Bu çarpan, ziyaret sürelerini etkilemez. costPerHour veya costPerTraveledHour belirtilirse maliyeti etkiler. [0,001, 1000.0] aralığında olmalıdır. Ayarlanmamışsa araç standarttır ve bu çarpan 1,0 olarak kabul edilir.

UYARI: Seyahat süreleri, bu çarpan uygulandıktan sonra ancak herhangi bir sayısal işlem yapılmadan önce en yakın saniyeye yuvarlanır. Bu nedenle, küçük bir çarpan hassasiyet kaybına neden olabilir.

Ayrıca aşağıdaki extraVisitDurationForVisitType bölümüne bakın.

TravelMode

Araçlar tarafından kullanılabilen ulaşım şekilleri.

Bunlar, Google Haritalar Platformu Rotalar Tercih Edilen API seyahat modlarının alt kümesi olmalıdır. https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode adresine bakın.

Sıralamalar
TRAVEL_MODE_UNSPECIFIED Belirtilmemiş ulaşım şekli. DRIVING ile eşdeğerdir.
DRIVING Araçla yol tarifine karşılık gelen ulaşım şekli (araba, ...)
WALKING Yürüyüş yol tariflerine karşılık gelen ulaşım şekli.

RouteModifiers

Araç rotaları hesaplanırken karşılanması gereken bir dizi isteğe bağlı koşulu kapsar. Bu, Google Haritalar Platformu Rotalar Tercih Edilen API'sindeki RouteModifiers ile benzerdir. https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers adresine bakın.

JSON gösterimi
{
  "avoidTolls": boolean,
  "avoidHighways": boolean,
  "avoidFerries": boolean,
  "avoidIndoor": boolean
}
Alanlar
avoidTolls

boolean

Makul olduğu durumlarda paralı yollardan kaçınılıp kaçınılmayacağını belirtir. Paralı yol içermeyen rotalar tercih edilir. Yalnızca motorlu seyahat modları için geçerlidir.

avoidHighways

boolean

Makul olduğu durumlarda otoyollardan kaçınılıp kaçınılmayacağını belirtir. Otoyol içermeyen rotalara öncelik verilir. Yalnızca motorlu seyahat modları için geçerlidir.

avoidFerries

boolean

Makul olduğunda feribotlardan kaçınılıp kaçınılmayacağını belirtir. Feribotla seyahat içermeyen rotalara öncelik verilir. Yalnızca motorlu seyahat modları için geçerlidir.

avoidIndoor

boolean

İsteğe bağlı. Makul olduğu durumlarda iç mekanlarda gezinmekten kaçınılıp kaçınılmayacağını belirtir. Kapalı mekan navigasyonu içermeyen rotalara öncelik verilir. Yalnızca WALKING ulaşım şekli için geçerlidir.

UnloadingPolicy

Araçların nasıl indirilebileceğiyle ilgili politika. Yalnızca hem teslim alma hem de teslimat içeren gönderimler için geçerlidir.

Diğer gönderimler, unloadingPolicy'ten bağımsız olarak rotanın herhangi bir yerinde yapılabilir.

Sıralamalar
UNLOADING_POLICY_UNSPECIFIED Belirtilmemiş boşaltma politikası; teslimatlar, ilgili teslim alma işlemlerinden hemen sonra yapılmalıdır.
LAST_IN_FIRST_OUT Teslimatlar, teslim alma sırası tersten yapılmalıdır
FIRST_IN_FIRST_OUT Teslimatlar, teslim alma siparişleriyle aynı sırayla yapılmalıdır

LoadLimit

Araç için geçerli olan yük sınırını tanımlar (ör. "bu kamyon en fazla 3500 kg taşıyabilir"). Şu sayfaya göz atın: loadLimits.

JSON gösterimi
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string,
  "costPerKilometer": {
    object (LoadCost)
  },
  "costPerTraveledHour": {
    object (LoadCost)
  }
}
Alanlar
softMaxLoad

string (int64 format)

Yükün yumuşak sınırı. Şu sayfaya göz atın: costPerUnitAboveSoftMax.

costPerUnitAboveSoftMax

number

Bu aracın rotasında yük softMaxLoad'ü aşarsa aşağıdaki maliyet cezası uygulanır (araç başına yalnızca bir kez): (yük - softMaxLoad) * costPerUnitAboveSoftMax. Tüm maliyetler toplanır ve Shipment.penalty_cost ile aynı birimde olmalıdır.

startLoadInterval

object (Interval)

Rotanın başlangıcında aracın kabul edilebilir yük aralığı.

endLoadInterval

object (Interval)

Rotanın sonundaki aracın kabul edilebilir yük aralığı.

maxLoad

string (int64 format)

Kabul edilebilir maksimum yük miktarı.

costPerKilometer

object (LoadCost)

Bu araç için bir kilometreden fazla yük taşımanın maliyeti. Bu değer, yakıt tüketimi için proxy olarak kullanılabilir: Yük bir ağırlıksa (Newton cinsinden) yük*kilometre, enerji boyutuna sahiptir.

costPerTraveledHour

object (LoadCost)

Bu araç için bir yük birimiyle bir saatlik yolculuk maliyeti.

Aralık

Kabul edilebilir yükleme miktarlarının aralığı.

JSON gösterimi
{
  "min": string,
  "max": string
}
Alanlar
min

string (int64 format)

Kabul edilebilir minimum yük. ≥ 0 olmalıdır. İkisi de belirtilmişse min değeri ≤ max olmalıdır.

max

string (int64 format)

Maksimum kabul edilebilir yük. ≥ 0 olmalıdır. Belirtilmemişse maksimum yükleme bu iletiyle kısıtlanmaz. Her ikisi de belirtilmişse min, max'ten küçük olmalıdır.

LoadCost

Transition boyunca bir birim yük taşımanın maliyeti. Belirli bir yük için maliyet, iki parçanın toplamıdır:

  • min(yükleme, loadThreshold) * costPerUnitBelowThreshold
  • max(0, yükleme - loadThreshold) * costPerUnitAboveThreshold

Bu maliyetle, çözümler yüksek talepleri önce teslim etmeyi veya eşdeğer olarak yüksek talepleri en son karşılamayı tercih eder. Örneğin, bir araçta

load_limit {
  key: "weight"
  value {
    costPerKilometer {
      loadThreshold: 15
      costPerUnitBelowThreshold: 2.0
      costPerUnitAboveThreshold: 10.0
    }
  }
}

ve rotası başlangıç,teslim alma,teslim alma,teslimat,teslimat,geçişlerle bitiş şeklinde olmalıdır:

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

Bu durumda, bu LoadCost tarafından yapılan maliyet (cost_below * load_below * kilometers + cost_above * load_above * kms) olur.

  • geçiş 0: 0,0
  • 1. geçiş: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • geçiş 2: 2,0 * 15 * 1,0 + 10,0 * (20 - 15) * 1,0 = 80,0
  • 3. geçiş: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • geçiş 4: 0,0

Dolayısıyla rotadaki LoadCost değeri 120,0'dır.

Ancak rota başlangıç,teslim alma,teslimat,teslim alma,teslimat,geçişlerle bitme ise:

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

LoadCost tarafından tahakkuk eden maliyet

  • geçiş 0: 0,0
  • 1. geçiş: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • geçiş 2: 0,0
  • geçiş 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • geçiş 4: 0,0

Burada, rota üzerindeki LoadCost değeri 40,0'dır.

LoadCost, yoğun yüklü geçişlere sahip çözümleri daha pahalı hale getirir.

JSON gösterimi
{
  "loadThreshold": string,
  "costPerUnitBelowThreshold": number,
  "costPerUnitAboveThreshold": number
}
Alanlar
loadThreshold

string (int64 format)

Bir yük birimini maliyetinin,costPerUnitBelowThreshold'dancostPerUnitAboveThreshold'a taşındığı yük miktarı. 0 veya daha fazla olmalıdır.

costPerUnitBelowThreshold

number

0 ile eşik arasındaki her birim için bir birim yük taşıma maliyeti. Sonlu bir değer ve >= 0 olmalıdır.

costPerUnitAboveThreshold

number

Eşiğin üzerindeki her birim için bir yük biriminin taşınma maliyeti. Özel durumda eşik = 0 olduğunda bu, birim başına sabit bir maliyettir. Sonlu bir değer ve >= 0 olmalıdır.

DurationLimit

Bir aracın rotanın maksimum süresini tanımlayan sınır. Sert veya yumuşak olabilir.

Yumuşak sınır alanı tanımlanırken hem yumuşak maksimum eşik hem de ilişkili maliyet birlikte tanımlanmalıdır.

JSON gösterimi
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
Alanlar
maxDuration

string (Duration format)

Süreyi en fazla maxDuration olacak şekilde sınırlayan kesin bir sınır.

En fazla dokuz kesirli basamak içeren ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

softMaxDuration

string (Duration format)

Maksimum süre sınırı uygulanmayan, ancak ihlal edildiğinde rotanın ücretlendirilen bir sınırı olan sabit bir sınır. Bu maliyet, aynı birimle modelde tanımlanan diğer maliyetlere eklenir.

Tanımlanmışsa softMaxDuration pozitif olmalıdır. maxDuration değeri de tanımlanmışsa softMaxDuration, maxDuration değerinden az olmalıdır.

"s" ile biten, en fazla dokuz kesir basamağı içeren, saniye cinsinden süre. Örnek: "3.5s".

quadraticSoftMaxDuration

string (Duration format)

Maksimum süre sınırı uygulanmayan, ancak ihlal edildiğinde rotanın süresiyle ikinci dereceden bir maliyet doğurduğu hafif bir sınır. Bu maliyet, aynı birimle modelde tanımlanan diğer maliyetlere eklenir.

Tanımlanmışsa quadraticSoftMaxDuration pozitif olmalıdır. maxDuration de tanımlanmışsa quadraticSoftMaxDuration, maxDuration'ten küçük olmalı ve fark bir günden fazla olmamalıdır:

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

"s" ile biten, en fazla dokuz kesir basamağı içeren, saniye cinsinden süre. Örnek: "3.5s".

costPerHourAfterSoftMax

number

softMaxDuration eşiği ihlal edildiğinde oluşan saatlik maliyet. Süre eşik değerinin altındaysa ek maliyet 0'dır. Aksi takdirde maliyet, süreye bağlı olarak aşağıdaki gibidir:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

Maliyet negatif olmamalıdır.

costPerSquareHourAfterQuadraticSoftMax

number

quadraticSoftMaxDuration eşiğinin ihlal edilmesi durumunda oluşan saat başına maliyet.

Süre eşiğin altındaysa ek maliyet 0 olur. Aksi takdirde maliyet, süreye aşağıdaki şekilde bağlı olur:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

Maliyet pozitif olmalıdır.

DistanceLimit

Katedilebilecek maksimum mesafeyi tanımlayan sınır. Sert veya yumuşak olabilir.

Hafif sınır tanımlanırsa hem softMaxMeters hem de costPerKilometerAboveSoftMax tanımlanmalı ve negatif olmayan bir sayı olmalıdır.

JSON gösterimi
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerBelowSoftMax": number,
  "costPerKilometerAboveSoftMax": number
}
Alanlar
maxMeters

string (int64 format)

Mesafeyi en fazla maxMeter olacak şekilde sınırlayan kesin bir sınır. Sınır negatif olmamalıdır.

softMaxMeters

string (int64 format)

Maksimum mesafe sınırı uygulamayan ancak ihlal edildiğinde modelde tanımlanan diğer maliyetlerle aynı birimde toplanan bir maliyete neden olan yumuşak sınır.

Tanımlanmışsa softMaxMeters, maxMeters'ten küçük ve sıfırdan büyük olmalıdır.

costPerKilometerBelowSoftMax

number

Formülle birlikte, artan kilometre başına maliyet softMaxMeters değerine kadar artacak:

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

Bu maliyet routeDistanceLimit'te desteklenmiyor.

costPerKilometerAboveSoftMax

number

Mesafe softMaxMeters sınırının üzerindeyse kilometre başına maliyet. Mesafe sınırın altındaysa ek maliyet 0'dır. Aksi takdirde maliyeti hesaplamak için kullanılan formül şudur:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

Maliyet pozitif olmalıdır.

BreakRule

Bir araç için ara verme zamanları (ör. öğle yemeği araları) oluşturmaya yönelik kurallar. Ara, aracın mevcut konumunda boşta kaldığı ve herhangi bir ziyaret gerçekleştiremediği kesintisiz bir zaman aralığıdır. Süreçte kesinti yaşanabilir:

  • iki ziyaret arasında seyahat sırasında (ziyaretten hemen önce veya hemen sonra olan süreyi içerir ancak ziyaretin ortasını kapsamaz) ziyaretler arasındaki ilgili geçiş süresini uzatır.
  • veya araç çalışmaya başlamadan önce başlar (araç, aranın ortasında başlamayabilir) ve bu durumda aracın başlangıç süresi etkilenmez.
  • veya araç sona erdikten sonra (araç sona erme zamanı da aynı şekilde).
JSON gösterimi
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
Alanlar
breakRequests[]

object (BreakRequest)

Araların sırası. BreakRequest mesajını görüntüleyin.

frequencyConstraints[]

object (FrequencyConstraint)

Birkaç FrequencyConstraint geçerli olabilir. Hepsi bu BreakRule BreakRequest ile uyumlu olmalıdır. FrequencyConstraint hükümlerini inceleyin.

BreakRequest

Her araç için geçerli olan ara verme sırası (ör. sayısı ve sırası) önceden bilinmelidir. Tekrarlanan BreakRequest öğeleri, gerçekleşmeleri gereken sırayla bu sırayı tanımlar. Zaman aralıkları (earliestStartTime / latestStartTime) çakışmalarına rağmen siparişle uyumlu olmalıdır (bu kontrol edilir).

JSON gösterimi
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
Alanlar
earliestStartTime

string (Timestamp format)

Zorunlu. Aranın başlangıcındaki alt sınır (dahil).

Nanosaniye çözünürlüğüne sahip ve en fazla dokuz kesirli basamak içeren RFC3339 UTC "Zulu" biçiminde bir zaman damgası. Örnekler: "2014-10-02T15:01:23Z" ve "2014-10-02T15:01:23.045123456Z".

latestStartTime

string (Timestamp format)

Zorunlu. Aranın başlangıcındaki üst sınır (dahil).

Nanosaniye çözünürlüğüne sahip ve en fazla dokuz kesirli basamak içeren RFC3339 UTC "Zulu" biçiminde bir zaman damgası. Örnekler: "2014-10-02T15:01:23Z" ve "2014-10-02T15:01:23.045123456Z".

minDuration

string (Duration format)

Zorunlu. Minimum ara süresi. Pozitif olmalıdır.

En fazla dokuz kesirli basamak içeren ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

FrequencyConstraint

"Her 12 saatte en az 1 saatlik ara olmalıdır" gibi bir minimum ara sıklığı uygulayarak yukarıda belirtilen araların sıklığını ve süresini daha da kısıtlayabilirsiniz. Bunun "12 saatlik herhangi bir kayan zaman aralığında en az bir saatlik en az bir ara verilmelidir" şeklinde yorumlanabileceği varsayıldığında, bu örnek aşağıdaki FrequencyConstraint ile çevrilir:

{
   minBreakDuration { seconds: 3600 }         # 1 hour.
   maxInterBreakDuration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

Çözümdeki araların zamanlaması ve süresi, BreakRequest içinde önceden belirtilen zaman aralıklarını ve minimum süreleri de dikkate alarak bu tür tüm kısıtlamalara uyar.

FrequencyConstraint, pratikte art arda olmayan aralar için geçerli olabilir. Örneğin, aşağıdaki programda "12 saatte 1 saat" örneği dikkate alınmıştır:

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
JSON gösterimi
{
  "minBreakDuration": string,
  "maxInterBreakDuration": string
}
Alanlar
minBreakDuration

string (Duration format)

Zorunlu. Bu kısıtlama için minimum ara süresi. Negatif değil. FrequencyConstraint açıklamasına bakın.

En fazla dokuz kesirli basamak içeren ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

maxInterBreakDuration

string (Duration format)

Zorunlu. Rotada en azından kısmen duration >= minBreakDuration arası bulunmayan herhangi bir zaman aralığı için izin verilen maksimum aralık. Pozitif olmalıdır.

"s" ile biten, en fazla dokuz kesir basamağı içeren, saniye cinsinden süre. Örnek: "3.5s".

DurationDistanceMatrix

Ziyaret süresi ile aracın başlangıç yerlerinden ziyaret edilecek ve aracın bitiş konumlarına kadar olan süre ve mesafe matrisini belirtir.

JSON gösterimi
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
Alanlar
rows[]

object (Row)

Süre ve mesafe matrisinin satırlarını belirtir. ShipmentModel.duration_distance_matrix_src_tags kadar öğe içermelidir.

vehicleStartTag

string

Bu süre ve mesafe matrisinin hangi araçlara uygulandığını tanımlayan etiket. Boşsa bu tüm araçlar için geçerli olur ve yalnızca tek bir matris olabilir.

Her araç başlangıcı tam olarak bir matrisle eşleşmelidir. Yani startTags alanlarından tam olarak biri, bir matrisin (ve yalnızca bu matrisin) vehicleStartTag alanıyla eşleşmelidir.

Tüm matrisler farklı bir vehicleStartTag değerine sahip olmalıdır.

Satır

Süre ve mesafe matrisinin bir satırını belirtir.

JSON gösterimi
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
Alanlar
durations[]

string (Duration format)

Belirli bir satır için süre değerleri. ShipmentModel.duration_distance_matrix_dst_tags kadar öğe içermelidir.

En fazla dokuz kesirli basamak içeren ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

meters[]

number

Belirli bir satır için mesafe değerleri. Modeldeki mesafelere işaret eden hiçbir maliyet veya kısıtlama yoksa bu alan boş bırakılabilir. Aksi takdirde, durations kadar çok öğe içermelidir.

TransitionAttributes

Bir rota üzerinde art arda iki ziyaret arasındaki geçişlerin özelliklerini belirtir. Aynı geçiş için birden fazla TransitionAttributes geçerli olabilir: Bu durumda, tüm ek maliyetler toplanır ve en katı kısıtlama veya sınır uygulanır (doğal "VE" semantiğine göre).

JSON gösterimi
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
Alanlar
srcTag

string

Bu özelliklerin geçerli olduğu (src->dst) geçiş grubunu tanımlayan etiketler.

Bir kaynak ziyareti veya araç başlatma işlemi, VisitRequest.tags veya Vehicle.start_tags'i srcTag içeriyorsa ya da excludedSrcTag içermiyorsa eşleşir (bu iki alandan hangisinin boş olmadığına bağlı olarak).

excludedSrcTag

string

Şu sayfaya göz atın: srcTag. Tam olarak srcTag ve excludedSrcTag değerlerinden biri boş bırakılamaz.

dstTag

string

Hedef ziyareti veya araç sonu, VisitRequest.tags veya Vehicle.end_tags dstTag içeriyorsa ya da excludedDstTag içermiyorsa (bu iki alandan hangisinin boş olmadığına bağlı olarak) eşleşir.

excludedDstTag

string

Şu sayfaya göz atın: dstTag. dstTag ve excludedDstTag'den tam olarak biri boş olmamalıdır.

cost

number

Bu geçişin maliyetini belirtir. Bu değer, modeldeki diğer tüm maliyetlerle aynı birimdedir ve negatif olmamalıdır. Mevcut diğer tüm maliyetlerin üzerine uygulanır.

costPerKilometer

number

Bu geçiş sırasında kat edilen mesafeye uygulanan kilometre başına maliyeti belirtir. Araçlarda belirtilen tüm Vehicle.cost_per_kilometer değerlerini içerir.

distanceLimit

object (DistanceLimit)

Bu geçiş gerçekleştirilirken katedilen mesafe için bir sınırı belirtir.

06.06.2021 itibarıyla yalnızca geçici sınırlar desteklenmektedir.

delay

string (Duration format)

Bu geçişi gerçekleştirirken yaşanan gecikmeyi belirtir.

Bu gecikme her zaman kaynak ziyareti tamamlandıktan sonra ve hedef ziyareti başlatılmadan önce gerçekleşir.

En fazla dokuz kesirli basamak içeren ve "s" ile biten, saniye cinsinden süre. Örnek: "3.5s".

ShipmentTypeIncompatibility

Gönderim türlerine bağlı olarak gönderimler arasındaki uyumsuzlukları belirtir. Aynı rotadaki uyumsuz kargoların görünümü, uyumsuzluk moduna göre kısıtlanır.

JSON gösterimi
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
Alanlar
types[]

string

Uyumsuz türlerin listesi. Listelenenler arasında farklı shipment_types değerine sahip iki gönderim "uyumlu değildir".

incompatibilityMode

enum (IncompatibilityMode)

Uyumsuzluk için uygulanan mod.

IncompatibilityMode

Uyumsuz gönderimlerin aynı rotada nasıl kısıtlanacağını tanımlayan modlar.

Sıralamalar
INCOMPATIBILITY_MODE_UNSPECIFIED Belirtilmemiş uyumsuzluk modu. Bu değer hiçbir zaman kullanılmamalıdır.
NOT_PERFORMED_BY_SAME_VEHICLE Bu modda, uyumlu olmayan türlere sahip iki gönderim hiçbir zaman aynı aracı paylaşamaz.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY uyumsuzluk moduyla uyumlu olmayan türlere sahip iki gönderim için:

  • Her ikisi de yalnızca teslim alma hizmeti sunuyorsa (teslimat içermiyorsa) veya teslimat ise (teslim alma hariç) aynı aracı paylaşamazlar.
  • Gönderilerden biri teslimat, diğeri ise teslim alma işlemi gerektiriyorsa ve ilk gönderi ikinci gönderiden önce teslim edilirse iki gönderi aynı aracı paylaşabilir.

ShipmentTypeRequirement

Gönderi türlerine göre kargolar arasındaki koşulları belirtir. Gereksinimin ayrıntıları, gereksinim modu ile tanımlanır.

JSON gösterimi
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
Alanlar
requiredShipmentTypeAlternatives[]

string

dependentShipmentTypes tarafından zorunlu kılınan alternatif kargo türlerinin listesi.

dependentShipmentTypes[]

string

dependentShipmentTypes alanında türü olan tüm gönderilerin, aynı rotada en az requiredShipmentTypeAlternatives türünde ziyaret edilmesi gerekir.

NOT: shipmentType öğesinin kendisine bağlı olduğu gibi koşul zincirlerine izin verilmez.

requirementMode

enum (RequirementMode)

Koşula uygulanan mod.

RequirementMode

Bağımlı gönderilerin rota üzerindeki görünümünü tanımlayan modlar.

Sıralamalar
REQUIREMENT_MODE_UNSPECIFIED Belirtilmemiş koşul modu. Bu değer hiçbir zaman kullanılmamalıdır.
PERFORMED_BY_SAME_VEHICLE Bu modda, tüm "bağlı" gönderimler "zorunlu" gönderimlerinden en az biriyle aynı aracı paylaşmalıdır.
IN_SAME_VEHICLE_AT_PICKUP_TIME

IN_SAME_VEHICLE_AT_PICKUP_TIME modu kullanıldığında, "bağımlı" tüm kargoların teslim alma sırasında araçlarında en az bir "zorunlu" gönderimin bulunması gerekir.

Bu nedenle, "bağlı" kargo teslim alma işleminde aşağıdakilerden biri bulunmalıdır:

  • Rotadan sonra teslim edilen yalnızca teslimat için "zorunlu" bir kargo veya
  • "Zorunlu" gönderi, rota üzerinde kendisinden önce teslim alınır ve "zorunlu" gönderinin teslimatı varsa bu teslimat, "bağlı" gönderinin teslim alınmasından sonra yapılmalıdır.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Daha önce olduğu gibi, "bağımlı" gönderimlerin teslimat sırasında araçlarında "zorunlu" bir gönderim olması gerekir.

PrecedenceRule

İki etkinlik arasındaki öncelik kuralı (her etkinlik bir gönderinin alınması veya teslim edilmesidir): "İkinci" etkinliğin, "ilk" etkinlikten en az offsetDuration sonra başlaması gerekir.

Birkaç öncelik aynı (veya ilgili) etkinliklere atıfta bulunabilir. Örneğin: "B teslimatı A teslimatından sonra gerçekleşir" ve "C teslimatı B teslimatından sonra gerçekleşir".

Ayrıca, öncelikler yalnızca her iki gönderim de gerçekleştirildiğinde uygulanır ve aksi takdirde göz ardı edilir.

JSON gösterimi
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
Alanlar
firstIsDelivery

boolean

"İlk" etkinliğin yayınlama olup olmadığını belirtir.

secondIsDelivery

boolean

"İkinci" etkinliğin bir yayın olup olmadığını belirtir.

offsetDuration

string (Duration format)

"Birinci" ve "ikinci" etkinlik arasındaki ofset. Negatif olabilir.

"s" ile biten, en fazla dokuz kesir basamağı içeren, saniye cinsinden süre. Örnek: "3.5s".

firstIndex

integer

"İlk" etkinliğin gönderim dizini. Bu alan belirtilmelidir.

secondIndex

integer

"İkinci" etkinliğin gönderi dizini. Bu alan belirtilmelidir.