Bu kılavuzda, geçiş özelliklerinin olası kullanımları gösterilmektedir. Bu makalede, gerçek dünyadaki senaryoları iki örnekle nasıl modelleyeceğiniz öğretilir: aracı park etme süresini optimize edilmiş rotalara dahil etme ve her rotanın belirli bir konuma ziyaretle bitmesini 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, geçiş sürelerinin ve kullanılan aracın parametrelerine göre harita verilerinden hesaplanan maliyetlerin üzerine 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 teslim etme işleminin yapıldığı durak.
- Rotanın bitiş noktası.
Modelin tüm geçiş özelliklerini listeye ShipmentModel.transition_attributes ekleyerek tanımlarsınız.
Listenin her öğesi bir geçiş özelliği grubunu tanımlar ve geçişin başlangıç ve bitiş konumlarındaki 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 dokümanlarını inceleyin.
Gerçek yaşam senaryolarını 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.
Otopark için zaman rezervasyonu yapma
Bu senaryoda, sürücünün A konumunu ziyaret edebilmesi için aracı park etmesi gerekir. B konumu yakındadır ve sürücü her iki ziyaret için de aynı park yerini kullanabilir. Sürücü, A noktasından hemen sonra B noktasını ziyaret ederse park yerinden çıkıp aracı tekrar park etmesine gerek olmadığı için zaman kazanır. Rota Optimizasyonu API'sinde, aracı park etmek için yalnızca sürücü bir park yerinden diğerine geçtiğinde 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ın daha kısa sürmesini sağlarsınız. Modeli daha hassas hale getirirsiniz ve optimize edicinin, ziyaretlerin gruplandırıldığı rotaları tercih etmesini sağlarsınız.
Rota Optimizasyonu API isteğinde bunu yapmak için aşağıdaki adımları uygulayın:
VisitRequest.durationtürünü yalnızca ziyareti gerçekleştirmek için gereken süre boyunca kullanın. Örneğin, paketi teslim etmek ve müşteriden imza almak için.Modelde kullanılan her farklı park yeri için modelde başka bir şey için kullanılmayan yeni bir etiket kullanın (ör.
PARKING_123).Bu etiketi aşağıdakilere ekleyin:
VisitRequest.tagsbu park yerini kullanan tüm ziyaret isteklerinde.Vehicle.start_tagsAraç rotasını bu park yerinde başlatırsa.Vehicle.end_tagsAraç, rotasını bu park yerinde başlatır veya bitirirse.
Her yeni park etiketi için
ShipmentModel.transition_attributesalanına, aşağıdakileri yaparak farklı bir park yerinden gelen araçlar için park süresine gecikme ekleyen bir giriş ekleyin:TransitionAttributes.excluded_src_tagveTransitionAttributes.dst_tagöğeleriniPARKING_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_attributesalanına aşağıdaki girişi ekleyin:{ "excluded_src_tag": "PARKING_123", "dst_tag": "PARKING_123", "delay": "150s" }
Rotanın sonunda zorunlu temizlik
Bu senaryoda, aracın rotanın sonunda temizlenmesi gerekir. Araç temizlenirken aşağıdaki ek kısıtlamalar geçerlidir:
- Araç parkına dönmeden önce temizlik, özel bir temizlik tesisinde yapılır. Optimize edilmiş rota, konumuna ve aracın yaptığı teslim alma ve teslim etme konumlarına göre en iyi temizlik tesisini kullanır.
- Araç, temizlendikten sonra başka teslimat veya teslim alma işlemi yapmamalıdır.
- Oraya gidip aracı temizleme süresi, sürücünün çalışma saatlerine dahil edilir ve rotanın maksimum süresine sığmalıdır.
Bu koşulu, yalnızca boş olan veya son ziyareti bir temizlik tesisine olan rotalara izin vererek modellersiniz. Route Optimization API'de bunu, temizlik tesisi veya rotanın başlangıç noktası dışındaki herhangi bir konumdan rotanın bitiş yol işaretine geçişleri yasaklayarak yapabilirsiniz:
- Modelin hiçbir yerinde kullanılmayan iki yeni etiket seçin (ör.
CLEANEDveROUTE_END). İlki, aracın temiz olduğu veya temizlendiği konumlar için, ikincisi ise rotanın sonu içindir. - Her araç için, temizlik tesisine yapılan ziyareti temsil eden aşağıdaki özelliklere sahip yeni bir yalnızca teslimat gönderimi ekleyin:
- Her temizlik tesisi konumu, bu gönderim için bir teslimat ziyareti isteği olarak gösterilmelidir.
- Temizlik tesisi gönderilerinin her bir ziyaret isteğinin
VisitRequest.tagsalanınaCLEANEDekleyin. Bu konumdan ayrılan bir aracın temiz olduğunu gösterir. Modeldeki diğer ziyaret isteklerinde bu etiket kullanılmamalıdır. Böylece, araç bu istekler için ayrılırken "temiz değil" olarak kabul edilir. - Araç kullanılmadığında optimize edicinin bu gönderimi atlamasına izin vermek için
penalty_costdeğerini küçük bir sayıya ayarlayın.
Her araç için
CLEANED'üVehicle.start_tagsalanına ekleyin. Bu, önceki çalışma gününün sonunda temizlendiği varsayılarak aracın herhangi bir teslimat veya teslim alma işlemi gerçekleştirmeden önce temiz olarak işaretlenmesi ve başlangıç yol noktasından doğrudan bitiş yol noktasına gitmesine izin verilmesi için kullanılır. Bu tür rotalar pratikte gerçekleşmese bile bu senaryoya izin vermek, optimizasyon aracının optimize edilmiş rotaları daha verimli bir şekilde aramasına yardımcı olur.Her araç için
ROUTE_END'üVehicle.end_tagsalanına ekleyin.ShipmentModel.transition_attributesalanına, araçların temiz değilken araç sonu ara noktasına ulaşmasını yasaklayan ve aşağıdaki özelliklere sahip yeni bir giriş ekleyin:TransitionAttributes.excluded_src_tagöğesiniCLEANEDolarak ayarlayın.TransitionAttributes.dst_tagöğesiniROUTE_ENDolarak ayarlayın.TransitionAttributes.delaydeğerini büyük bir değere ayarlayın. Gecikmeyi maksimum rota süresinden daha uzun hale getirdiğinizde, optimizasyon aracının bir rotada bu geçişi kullanmasını etkili bir şekilde engellersiniz.
Örneğin, modelin zaman ölçeği bir iş günü olduğunda, temizlik tesisi ve rotanın başlangıcı dışındaki herhangi bir yerden rotanın sonuna geçişi yasaklamak 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ın niteliğine bağlıdır. TransitionAttributes.delay değerini ayarlamak, katı kısıtlamalar uygulamak veya harcanan süre açısından bir dengeyi ifade etmek için en iyi seçenektir.
TransitionAttributes.cost, ek maliyet olarak ifade edilen yumuşak tercihler veya değiş tokuşlar uygulanırken daha uygundur. Hem harcanan süre hem de maliyet söz konusu olduğunda gecikmeleri ve maliyetleri keyfi olarak birleştirebilirsiniz.
Araç temizleme örneğinde çok uzun bir gecikme kullanılır. Bunun nedeni, rotanın sonunda aracın temizlenmesi zorunlu bir koşul olması ve uzun gecikmenin, optimizasyon aracının koşulu göz ardı etmesini engellemesidir. Yalnızca bir maliyet belirlerseniz optimizatör, maliyeti başka bir yerden telafi etmenin bir yolunu bulursa (ör. aracı temizlememek için "kazanılan" zamanda daha fazla kargo teslim ederek) temizlemeyi atlayabilir.
Otopark ö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 durduğunda gecikmeler ile birlikte costs özelliğini de kullanabilirsiniz.
Tüm ziyaret istekleriyle eşleşen bir geçiş özelliği ekleme
Yukarıdaki örneklerde, belirli bir etikete sahip konumlarla veya etikete sahip olmayan konumlarla eşleşen geçiş özellikleri kullanılmaktadır. Ancak tüm geçişler için geçerli olan geçiş özellikleri eklemeniz gerekirse ne olur?
Her TransitionAttributes
mesajında TransitionAttributes.src_tag ve
TransitionAttributes.excluded_src_tag ile TransitionAttributes.dst_tag ve
TransitionAttributes.excluded_dst_tag etiketlerinden biri bulunmalıdır. Bu nedenle, etiketleri atlayamazsınız.
Ancak TransitionAttributes.excluded_src_tag veya TransitionAttributes.excluded_dst_tag değerini modelin hiçbir yerinde kullanılmayan bir etikete ayarlayarak tüm etiketleri eşleştirebilirsiniz. Bu, 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.