Bu kılavuzda, geçiş özelliklerinin olası kullanımları gösterilmektedir. Bu eğitimde, iki örnek üzerinden gerçek hayattaki senaryoları nasıl modelleyeceğiniz öğretilir: park etme süresini optimize edilmiş rotalara dahil etme ve her rotanın belirli bir konuma ziyaretle sonlanmasını 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ürelerine ve kullanılan aracın parametrelerine göre harita verilerinden hesaplanan maliyetlere eklenir.
Geçiş, rotanın bir konumu bir sonrakine bağlayan bölümüdür.
Konum, bir aracın rotasındaki aşağıdaki noktalardan herhangi birini ifade eder:
- Rotanın başlangıç noktası.
- Teslim alma veya teslimat yapılan durak.
- Rotanın bitiş noktası.
Modele ait tüm geçiş özelliklerini listeye ekleyerek tanımlarsınız
ShipmentModel.transition_attributes.
Listedeki her öğe bir grup geçiş özelliğini tanımlar ve geçişin başlangıç konumundaki 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 referans belgelerine bakın.
Gerçek hayattaki senaryoları modelleme
Bu bölümde, geçiş özellikleri kullanılarak 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 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'dan hemen sonra B'yi ziyaret ederse park yerinden ayrılıp aracı tekrar park etmesi gerekmediği için zamandan tasarruf eder. Rota Optimizasyonu API'sinde, geçiş özelliklerini kullanarak yalnızca sürücü bir park yerinden diğerine geçtiğinde aracı park etmek için ek süre ekleyebilirsiniz.
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 getirirsiniz ve optimizasyon aracının, 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öğesini 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 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.Vehicle.start_tagsAraç rotasına bu park yerinden başlıyorsaVehicle.end_tagsAraç, rotasını bu park yerinde başlatıp bitiriyorsa.
Her yeni park etme etiketi için
ShipmentModel.transition_attributesöğesine bir giriş ekleyin. Bu giriş, farklı bir park yerinden gelirken aşağıdaki işlemleri yaparak park etme için gecikme ekler:TransitionAttributes.excluded_src_tagveTransitionAttributes.dst_tagdeğerleriniPARKING_123olarak ayarlayın.TransitionAttributes.delaysimgesini aracı park etmek için gereken süreye ayarlayın.
Örneğin, bir konumun etiketi
PARKING_123ve 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 yaptığı teslim alma ve teslimat işlemlerinin konumlarına göre en iyi temizlik tesisini kullanır.
- Temizlikten sonra araçla başka teslimat veya teslim alma işlemi yapılmamalı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 ziyaretleri temizlik tesisine yapılan rotalara izin vererek modelliyorsunuz. Route Optimization API'de bunu, rotanın bitiş noktasındaki ara noktaya geçişleri temizlik tesisi veya rotanın başlangıç noktası dışındaki herhangi bir konumdan yasaklayarak yaparsınız:
- Modelin hiçbir yerinde kullanılmayan iki yeni etiket seçin. Örneğin,
CLEANEDveROUTE_END. Birincisi, aracın temiz olduğu veya temiz hale geldiği yerler için, ikincisi ise rotanın sonu için kullanılır. - Her araç için, temizlik tesisine ziyareti temsil eden ve aşağıdaki özelliklere sahip yeni bir yalnızca teslimat amaçlı kargo ekleyin:
- Her temizlik tesisi konumu, bu gönderinin teslimat ziyaret isteği olarak gösterilmelidir.
- Temizlik tesisi gönderisinin her ziyaret isteğinin
VisitRequest.tagsbölümüneCLEANEDekleyin. Bu konumdan ayrılan bir aracın temiz olduğunu gösterir. Modeldeki diğer ziyaret istekleri, araçtan ayrılırken "temiz değil" olarak kabul edilmesi için bu etiketi kullanmamalıdır. penalty_costdeğerini küçük bir sayıya ayarlayarak, araç kullanılmadığında optimizasyon aracının bu gönderimi atlamasına izin verin.
Her araç için
CLEANEDöğesiniVehicle.start_tags'ye ekleyin. Bu, önceki iş gününün sonunda temizlendiği varsayılarak aracı teslim alma veya teslimat yapmadan önce temiz olarak işaretlemek ve başlangıç yol noktasından doğrudan bitiş yol noktasına gitmesine izin vermek 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öğesiniVehicle.end_tags'ye ekleyin.ShipmentModel.transition_attributesöğesine, 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_tagöğesiniCLEANEDolarak ayarlayın.TransitionAttributes.dst_tagöğesiniROUTE_ENDolarak ayarlayın.TransitionAttributes.delayöğesini büyük bir değere ayarlayın. Gecikmeyi maksimum rota süresinden daha uzun yaptığınızda, optimizasyon aracının bu geçişi bir rotada kullanmasını etkili bir şekilde engellersiniz.
Örneğin, modelin zaman ölçeği bir iş günü olduğunda, rotanın sonuna geçişi temizlik tesisi ve rotanın başlangıcı dışındaki herhangi bir yerden engellemek için 24 saatlik (86400 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 rastgele birleştirebilirsiniz.
Araç temizleme örneğinde çok uzun bir gecikme kullanılıyor. Bunun nedeni, rotanın sonunda aracın temizlenmesinin zorunlu olması ve uzun gecikmenin, optimizasyon aracının bu zorunluluğu göz ardı etmesini engellemesidir. Yalnızca bir maliyet belirlerseniz, optimizasyon aracı, maliyeti başka bir şekilde 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ıyor. Sürücü ücretli bir otoparkta durursa 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. Ancak tüm geçişler için geçerli olan geçiş özellikleri eklemeniz gerekirse ne yapmanız gerekir?
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 öğesini modelde hiçbir yerde kullanılmayan bir etikete ayarlayarak tüm etiketleri eşleştirebilirsiniz. Bu, bu etikete sahip olmayan tüm konumlarla eşleşir. Ancak kasıtlı olarak hiçbir konum tarafından kullanılmayan bir etiket seçtiğiniz için bu geçiş özellikleri tüm konumlarla eşleşir.