Bu kılavuzda, geçiş özelliklerinin olası kullanımları gösterilmektedir. Bu eğitimde, gerçek hayattaki senaryoları iki örnek üzerinden nasıl modelleyeceğinizi öğreneceksiniz: aracı park etme süresini optimize edilmiş rotalara dahil etme ve her rotanın belirli bir konumu ziyaretle sona ermesini sağlama.
Başlamadan önce
Optimize edilmiş rotalardaki belirli geçişlere modele özgü maliyetler ve gecikmeler eklemek için geçiş özelliklerini kullanırsınız. Bu maliyetler ve gecikmeler, kullanılan aracın parametrelerine göre harita verilerinden hesaplanan geçiş sürelerine ve maliyetlere eklenir.
Geçiş, rotanın bir konumu diğerine bağlayan segmentidir.
Konum, bir aracın rotasındaki aşağıdaki noktalardan herhangi birini ifade eder:
- Rotanın başlangıç noktası.
- Teslim alma veya teslimatın yapıldığı durak.
- Rotanın bitiş noktası.
Modelin tüm geçiş özelliklerini listeye ekleyerek tanımlarsınız
ShipmentModel.transition_attributes.
Listenin her öğesi bir geçiş özellikleri kümesi tanımlar ve geçişin başlangıç ve bitiş konumundaki etiketler kullanılarak rotalardaki geçişlerle eşleştirilir. Geçiş özellikleri hakkında daha fazla bilgi edinmek için
TransitionAttributes ile ilgili referans belgelerine bakın.
Gerçek hayattaki senaryoları modelleme
Bu bölümde, geçiş özelliklerini kullanarak gerçek dünyadaki işletme kısıtlamalarının nasıl uygulanacağına dair iki küçük örnek gösterilmektedir.
Park yeri için zaman ayırma
Bu senaryoda sürücünün A konumuna gidebilmesi için aracı park etmesi gerekir. B konumu yakındadır ve sürücü her iki ziyaret için aynı park yerini kullanabilir. Sürücü A'dan hemen sonra B'yi ziyaret ederse park yerinden ayrılıp aracı tekrar park etmesi gerekmediği için zamandan tasarruf eder. Route Optimization API'de, yalnızca sürücü bir park yerinden diğerine geçtiğinde aracı park etmek için ek süre eklemek üzere geçiş özelliklerini kullanabilirsiniz.
Park süresini ziyaret sürelerinden ayrı olarak modellediğinizde, aynı park yerini kullanan ziyaretlerin gruplandırıldığı rotalar daha kısa sürer. Modeli daha hassas hale getirir ve optimize edicinin, ziyaretlerin gruplandırıldığı rotaları tercih etmesini sağlarsınız.
Bunu bir Rota Optimizasyonu API isteğinde yapmak için aşağıdaki adımları uygulayın:
VisitRequest.durationözelliğini yalnızca ziyaret için gereken süre boyunca kullanın. Örneğin, paketi teslim etmek ve müşteriden imza almak.Modelde kullanılan her farklı park yeri için modelde başka hiçbir şeyde kullanılmayan yeni bir etiket kullanın. Örneğin,
PARKING_123.Bu etiketi aşağıdakilere ekleyin:
VisitRequest.tagsBu park yerini kullanan tüm ziyaret isteklerinde.Araç rotasına bu park yerinde başlıyorsa
Vehicle.start_tags.Aracın rotası bu park yerinde başlıyor veya bitiyorsa
Vehicle.end_tags.
Her yeni park etiketi için
ShipmentModel.transition_attributesdosyasına bir giriş ekleyin. Bu giriş, farklı bir park yerinden gelirken park etme için gecikme ekler. Bunun için aşağıdaki adımları uygulayın:TransitionAttributes.excluded_src_tagveTransitionAttributes.dst_tagdeğeriniPARKING_123olarak ayarlayın.TransitionAttributes.delaydeğerini, aracı park etmek için gereken süreye ayarlayın.
Örneğin, bir konumun etiketi
PARKING_123ise ve aracı park etmek 150 saniye sürüyorsaShipmentModel.transition_attributes'ye aşağıdaki girişi eklersiniz:{ "excluded_src_tag": "PARKING_123", "dst_tag": "PARKING_123", "delay": "150s" }
Rotanın sonunda zorunlu temizlik
Bu senaryoda, araç rotanın sonunda temizlenmelidir. Ayrıca aşağıdaki ek kısıtlamalar geçerlidir:
- Temizlik, araç deposuna dönmeden önce özel bir temizlik tesisinde yapılır. Optimize edilmiş rota, konumuna ve aracın teslim alma ve teslim etme konumlarına göre en iyi temizlik tesisini kullanır.
- Temizlikten sonra araç başka bir teslim alma veya teslimat işlemi yapmamalıdır.
- Aracı oraya götürme ve temizleme süresi, sürücünün çalışma saatlerine dahil edilir ve rotanın maksimum süresine uygun olmalıdır.
Bu şartı, yalnızca boş olan veya son ziyaret edilen yerin temizlik tesisi olduğu rotalara izin vererek modelleyebilirsiniz. Route Optimization API'de bunu, temizlik tesisi veya rotanın başlangıç noktası dışındaki herhangi bir konumdan rotanın bitiş ara noktasına geçişleri yasaklayarak yaparsınız:
- Modelin hiçbir yerinde kullanılmayan iki yeni etiket seçin. Örneğin,
CLEANEDveROUTE_END. İlki, aracın temiz olduğu veya temizlendiği konumlar, ikincisi ise rotanın sonu içindir. - Her araç için, temizlik tesisine yapılan ziyareti temsil eden ve aşağıdaki özelliklere sahip, yalnızca teslimat amaçlı yeni bir sevkiyat ekleyin:
- Her temizlik tesisi konumu, bu gönderinin teslimat ziyareti isteği olarak gösterilmelidir.
- Temizlik tesisi sevkiyatının her ziyaret isteğinin
VisitRequest.tagsalanınaCLEANEDekleyin. Bu konumdan ayrılan bir aracın temiz olduğunu gösterir. Modeldeki diğer ziyaret istekleri bu etiketi kullanmamalıdır. Böylece araç, bu isteklerden ayrılırken "temiz değil" olarak kabul edilir. - Aracın kullanılmadığı durumlarda optimize edicinin bu gönderiyi atlamasına izin vermek için
penalty_costdeğerini küçük bir sayı olarak ayarlayın.
Her araç için
Vehicle.start_tagsöğesineCLEANEDekleyin. Bu, önceki iş gününün sonunda temizlendiği varsayılarak aracı herhangi bir teslimat veya teslim alma işlemi yapmadan önce temiz olarak işaretlemek ve başlangıç ara noktasından doğrudan bitiş ara noktasına gitmesine izin vermek için kullanılır. Bu tür rotalar pratikte kullanılmasa bile bu senaryoya izin verilmesi, optimize edicinin optimize edilmiş rotaları daha verimli bir şekilde aramasına yardımcı olur.Her araç için
Vehicle.end_tagsözelliğineROUTE_ENDekleyin.ShipmentModel.transition_attributes'a, araçların temiz olmadıkları durumlarda araç son ara noktasına ulaşmasını engelleyen aşağıdaki özelliklere sahip yeni bir giriş ekleyin:TransitionAttributes.excluded_src_tagdeğeriniCLEANEDolarak ayarlayın.TransitionAttributes.dst_tagdeğeriniROUTE_ENDolarak ayarlayın.TransitionAttributes.delaydeğerini büyük bir değere ayarlayın. Gecikmeyi maksimum rota süresinden daha uzun olacak şekilde ayarladığınızda, optimize edicinin bu geçişi bir rotada kullanmasını etkili bir şekilde engellemiş olursunuz.
Örneğin, modelin zaman ölçeği bir iş günü olduğunda, temizlik tesisi ve rotanın başlangıcı dışında herhangi bir yerden rotanın sonuna geçişi engellemek için 24 saatlik (86.400 saniye) bir gecikme kullanabilirsiniz:
{ "excluded_src_tag": "CLEANED", "dst_tag": "ROUTE_END", "delay": "86400s" }
Gecikmeler ve maliyetler arasında seçim yapma
Gecikmeler ve maliyetler arasındaki seçim, uygulanan iş mantığının ve kısıtlamaların niteliğine bağlıdır. Ayar
TransitionAttributes.delay
sert kısıtlamaları uygulamak veya harcanan zaman açısından bir dengeyi ifade etmek için en iyisidir.
TransitionAttributes.cost
Ek maliyet olarak ifade edilen yumuşak tercihler veya değişimler uygulanırken daha iyi sonuç verir. Hem harcanan zaman hem de maliyet söz konusu olduğunda gecikmeleri ve maliyetleri dilediğiniz gibi birleştirebilirsiniz.
Araç temizleme örneğinde çok uzun bir gecikme kullanılır. Bunun nedeni, rotanın sonunda aracın temizlenmesinin zorunlu olması ve uzun gecikmenin, optimize edicinin bu şartı yok saymasını engellemesidir. Yalnızca bir maliyet belirlerseniz, optimizasyon aracı, maliyeti başka bir yerde telafi etmenin bir yolunu bulursa (ör. aracı temizlemeyerek "tasarruf edilen" sürede daha fazla gönderim yaparak) temizleme işlemini atlamayı seçebilir.
Park etme örneğinde, aracı park etmek için gereken ek süreye karşılık gelen kısa bir gecikme kullanılır. Sürücü ücretli bir otoparkta duruyorsa maliyetleri gecikmelerle birlikte de kullanabilirsiniz.
Tüm ziyaret istekleriyle eşleşen bir geçiş özelliği ekleme
Yukarıdaki örneklerde, belirli bir etikete sahip konumlarla veya etiketi olmayan konumlarla eşleşen geçiş özellikleri kullanılmaktadır. Peki tüm geçişler için geçerli olan geçiş özellikleri eklemeniz gerekirse ne yapacaksınız?
Etiketleri atlayamazsınız. Çünkü her TransitionAttributes mesajında TransitionAttributes.src_tag ve TransitionAttributes.excluded_src_tag etiketlerinden biri, TransitionAttributes.dst_tag ve TransitionAttributes.excluded_dst_tag etiketlerinden biri bulunmalıdır.
Ancak TransitionAttributes.excluded_src_tag veya TransitionAttributes.excluded_dst_tag değerini modelde kullanılmayan bir etikete ayarlayarak tüm etiketleri eşleştirebilirsiniz. Bu işlem, bu etikete sahip olmayan tüm konumlarla eşleşir. Ancak herhangi bir konum tarafından kullanılmayan bir etiketi kasıtlı olarak seçtiğiniz için bu geçiş özellikleri tüm konumlarla eşleşir.