Geçiş özellikleriyle iş mantığını modelleme

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:

  1. 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.

  2. 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).

  3. Bu etiketi aşağıdakilere ekleyin:

    1. VisitRequest.tags bu park yerini kullanan tüm ziyaret isteklerinde.

    2. Vehicle.start_tags Araç rotasını bu park yerinde başlatırsa.

    3. Vehicle.end_tags Araç, rotasını bu park yerinde başlatır veya bitirirse.

  4. 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:

    1. TransitionAttributes.excluded_src_tag ve TransitionAttributes.dst_tag öğelerini PARKING_123 olarak ayarlayın.

    2. 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üyorsa ShipmentModel.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:

  1. Modelin hiçbir yerinde kullanılmayan iki yeni etiket seçin (ör. CLEANED ve ROUTE_END). İlki, aracın temiz olduğu veya temizlendiği konumlar için, ikincisi ise rotanın sonu içindir.
  2. Her araç için, temizleme tesisine yapılan ziyareti temsil eden aşağıdaki özelliklere sahip yeni bir yalnızca teslimat gönderimi ekleyin:
    1. Her temizlik tesisi konumu, bu gönderim için bir teslimat ziyareti isteği olarak gösterilmelidir.
    2. Temizlik tesisi gönderilerinin her bir ziyaret isteğinin VisitRequest.tags alanına CLEANED 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.
    3. 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.
  3. Her araç için CLEANEDVehicle.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.

  4. Her araç için ROUTE_ENDVehicle.end_tags alanına ekleyin.

  5. 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:

    1. TransitionAttributes.excluded_src_tag öğesini CLEANED olarak ayarlayın.

    2. TransitionAttributes.dst_tag öğesini ROUTE_END olarak ayarlayın.

    3. 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.

Daha fazla bilgi