Bu kılavuzda, geçiş özelliklerinin olası kullanımları gösterilmektedir. Bu eğitimde, iki örnek üzerinden gerçek dünya senaryolarını nasıl modelleyeceğiniz öğretilir: aracı 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, kullanılan aracın parametrelerine göre harita verilerinden hesaplanan geçiş sürelerine ve maliyetlerine 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 dizi 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 ziyaretin gerçekleştirilmesi 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.tags
Bu park yerini kullanan tüm ziyaret isteklerinde.Vehicle.start_tags
Araç rotasına bu park yerinden başlıyorsa.Vehicle.end_tags
Araç, 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 park etme işlemine gecikme eklemek için aşağıdakileri yapar:TransitionAttributes.excluded_src_tag
veTransitionAttributes.dst_tag
değerleriniPARKING_123
olarak ayarlayın.TransitionAttributes.delay
simgesini aracı park etmek için gereken süreye ayarlayın.
Örneğin, bir konumun etiketi
PARKING_123
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, aracın rotanın sonunda temizlenmesi gerekir. 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. Rota Optimizasyonu API'sinde 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,
CLEANED
veROUTE_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 sevkiyatının her ziyaret isteğinin
VisitRequest.tags
bölümüneCLEANED
ekleyin. 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 yerlerden ayrılırken "temiz değil" olarak kabul edilir. penalty_cost
değ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, aracın önceki iş gününün sonunda temizlendiği varsayılarak herhangi bir teslim alma veya teslimat 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
öğesiniVehicle.end_tags
'ye ekleyin.Aşağıdaki özelliklere sahip olarak, araçların temiz olmadıkları durumlarda araç son ara noktasına ulaşmasını engelleyen
ShipmentModel.transition_attributes
öğesine yeni bir giriş ekleyin:TransitionAttributes.excluded_src_tag
öğesiniCLEANED
olarak ayarlayın.TransitionAttributes.dst_tag
öğesiniROUTE_END
olarak 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 süre 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 şartı göz ardı etmesini engellemesidir. Yalnızca bir maliyet belirlerseniz, optimize edici başka bir yerde maliyeti 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 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.