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

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:

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

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

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

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

    2. Vehicle.start_tags Araç rotasına bu park yerinden başlıyorsa.

    3. Vehicle.end_tags Araç, rotasını bu park yerinde başlatıp bitiriyorsa.

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

    1. TransitionAttributes.excluded_src_tag ve TransitionAttributes.dst_tag değerlerini PARKING_123 olarak ayarlayın.

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

  1. Modelin hiçbir yerinde kullanılmayan iki yeni etiket seçin. Örneğin, CLEANED ve ROUTE_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.
  2. Her araç için, temizlik tesisine ziyareti temsil eden ve aşağıdaki özelliklere sahip yeni bir yalnızca teslimat amaçlı kargo ekleyin:
    1. Her temizlik tesisi konumu, bu gönderinin teslimat ziyaret isteği olarak gösterilmelidir.
    2. Temizlik tesisi sevkiyatının her ziyaret isteğinin VisitRequest.tags bölümüne CLEANED 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.
    3. 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.
  3. Her araç için CLEANED öğesini Vehicle.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.

  4. Her araç için ROUTE_END öğesini Vehicle.end_tags'ye ekleyin.

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

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

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

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

Daha fazla bilgi