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
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.duration
seçeneğini 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.tags
bu park yerini kullanan tüm ziyaret isteklerinde.Vehicle.start_tags
Araç rotasını bu park yerinde başlatırsa.Vehicle.end_tags
Araç, rotasını bu park yerinde başlatır veya bitirirse.
Her yeni park etiketi için
ShipmentModel.transition_attributes
alanı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_tag
veTransitionAttributes.dst_tag
öğeleriniPARKING_123
olarak ayarlayın.TransitionAttributes.delay
değerini, aracı park etmek için gereken süreye ayarlayın.
Örneğin, bir konumun etiketi
PARKING_123
ise ve aracı park etmek 150 saniye sürüyorsaShipmentModel.transition_attributes
alanı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ıtlamalara uyulmalıdır:
- 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 gerçekleştirmemelidir.
- 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. Rota Optimizasyonu API'sinde 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.
CLEANED
veROUTE_END
). İlki, aracın temiz olduğu veya temizlendiği konumlar için, ikincisi ise rotanın sonu içindir. - Her araç için, temizleme 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.tags
alanınaCLEANED
ekleyin. 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 sırasında "temiz değil" olarak kabul edilir. - Araç kullanılmadığında optimize edicinin bu gönderimi atlamasına izin vermek için
penalty_cost
değerini küçük bir sayıya ayarlayın.
Her araç için
CLEANED
'üVehicle.start_tags
alanına ekleyin. Bu, önceki çalışma gününün sonunda temizlendiği varsayılarak herhangi bir teslimat veya teslim alma işlemi gerçekleştirmeden önce aracı temiz olarak işaretlemek ve aracın 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
'üVehicle.end_tags
alanına ekleyin.ShipmentModel.transition_attributes
alanı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
öğesiniCLEANED
olarak ayarlayın.TransitionAttributes.dst_tag
öğesiniROUTE_END
olarak ayarlayın.TransitionAttributes.delay
değ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 saat (86.400 saniye) 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. Çünkü rotanın sonunda aracın temizlenmesi zorunlu bir koşuldur ve uzun gecikme, optimizasyon aracının koşulu göz ardı etmesini engeller. Yalnızca bir maliyet belirlerseniz optimizatör, maliyeti başka bir yerden telafi etmenin bir yolunu bulursa (ör. aracı temizlemeyerek "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.