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

Bu kılavuzda, geçiş özelliklerinin olası kullanımları gösterilmektedir. Bu eğitimde, gerçek hayattaki senaryoları iki örnek üzerinden nasıl modelleyeceğinizi öğreneceksiniz: Aracı park etme süresini optimize edilmiş rotalara dahil etme ve her rotanın belirli bir konumu ziyaret ederek sona ermesini 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 maliyetlere 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 teslimatın yapıldığı durak.
  • Rotanın bitiş noktası.

Modelin tüm geçiş özelliklerini ShipmentModel.transition_attributes listesine ekleyerek tanımlarsınız. Listenin her öğesi bir geçiş özellikleri kümesi tanımlar ve geçişin başlangıç 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 ile ilgili referans dokümanlarını inceleyin.

Gerçek hayattan senaryoları modelleme

Bu bölümde, geçiş özelliklerini kullanarak gerçek hayattaki işletme kısıtlamalarının nasıl uygulanacağına dair iki küçük örnek gösterilmektedir.

Park yeri için zaman ayırın

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 aynı park yerini kullanabilir. Sürücü, A'dan hemen sonra B'yi ziyaret ederse park yerinden çıkıp aracı tekrar park etmesi gerekmediği için zaman kazanır. Route Optimization API'de, yalnızca sürücü bir park yerinden diğerine geçtiğinde aracı park etmek için 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 getirir ve optimize edicinin, ziyaretlerin gruplandırıldığı rotaları tercih etmesini sağlarsınız.

Route Optimization API isteğinde bunu yapmak için aşağıdaki adımları uygulayın:

  1. VisitRequest.duration yalnızca ziyareti gerçekleştirmek için gereken süre boyunca kullanılmalıdır. Örneğin, paketi teslim etmek ve müşteriden imza almak.

  2. Modelde kullanılan her bir 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ına bu park yerinden başlarsa.

    3. Aracın rotası bu park yerinde başlıyor veya bitiyorsa Vehicle.end_tags.

  4. Her yeni park etiketi için ShipmentModel.transition_attributes dosyasına, farklı bir park yerinden gelirken park etme gecikmesi ekleyen bir giriş ekleyin. Bunun için aşağıdaki adımları uygulayın:

    1. TransitionAttributes.excluded_src_tag ve TransitionAttributes.dst_tag değerini 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 dosyasına aşağıdaki girişi eklersiniz:

    {
      "excluded_src_tag": "PARKING_123",
      "dst_tag": "PARKING_123",
      "delay": "150s"
    }
    

Rota sonunda zorunlu temizlik

Bu senaryoda, aracın rotanın sonunda temizlenmesi gerekir. Ayrıca aşağıdaki ek kısıtlamalar da geçerlidir:

  • Temizlik, araç deposuna dönmeden önce özel bir temizlik tesisinde yapılır. Optimize edilmiş rota, konumuna ve aracın teslim alma ve teslimat konumlarına göre en iyi temizlik tesisini kullanır.
  • Temizlikten sonra araç başka bir teslim alma veya teslimat işlemi yapmamalıdır.
  • Aracı temizlemek için harcanan süre, sürücünün çalışma saatlerine dahil edilir ve rotanın maksimum süresine uymalıdır.

Bu şartı, yalnızca boş olan veya son ziyaret edilen yerin temizlik tesisi olduğu rotalara izin vererek modelleyebilirsiniz. Route Optimization API'de bunu, temizlik tesisi veya rotanın başlangıç noktası dışındaki herhangi bir konumdan rotanın bitiş ara noktasına geçişleri yasaklayarak yaparsınız:

  1. Modelde kullanılmayan iki yeni etiket seçin (ör. CLEANED ve ROUTE_END). İlki, aracın temiz olduğu veya temizlendiği konumlar, ikincisi ise rotanın sonu içindir.
  2. Her araç için, temizlik tesisine yapılan ziyareti temsil eden ve aşağıdaki özelliklere sahip, yalnızca teslimat amaçlı yeni bir sevkiyat ekleyin:
    1. Her temizleme tesisi konumu, bu sevkiyatın teslimat ziyareti isteği olarak temsil edilmelidir.
    2. Temizlik tesisi sevkiyatının her ziyaret isteğinin VisitRequest.tags alanına CLEANED ekleyin. Bu konumdan ayrılan araçların temiz olduğunu gösterir. Modeldeki diğer ziyaret istekleri bu etiketi kullanmamalıdır. Böylece araç, bu isteklerden ayrılırken "temiz değil" olarak kabul edilir.
    3. Aracın kullanılmadığı durumlarda optimize edicinin bu gönderiyi atlamasına izin vermek için penalty_cost değerini küçük bir sayı olarak ayarlayın.
  3. Her araç için Vehicle.start_tags öğesine CLEANED ekleyin. Bu, aracın önceki iş gününün sonunda temizlendiği varsayılarak herhangi bir teslim alma veya teslimat yapmadan önce temiz olarak işaretlenmesi ve başlangıç ara noktasından doğrudan bitiş ara noktasına gitmesine izin verilmesi için kullanılır. Bu tür rotalar pratikte kullanılmasa bile bu senaryoya izin verilmesi, optimize edicinin optimize edilmiş rotaları daha verimli bir şekilde aramasına yardımcı olur.

  4. Her araç için Vehicle.end_tags öğesine ROUTE_END ekleyin.

  5. ShipmentModel.transition_attributes dosyasına, temiz olmayan araçların araç bitiş ara noktasına ulaşmasını engelleyen yeni bir giriş ekleyin. Bu giriş aşağıdaki özelliklere sahip olmalıdır:

    1. TransitionAttributes.excluded_src_tag değerini CLEANED olarak ayarlayın.

    2. TransitionAttributes.dst_tag değerini 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 yaparsanız optimize edicinin 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, temizlik tesisi ve rotanın başlangıcı dışında herhangi bir yerden rotanın sonuna geçişi yasaklamak için 24 saatlik (86.400 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 yapısına bağlıdır. Ayar TransitionAttributes.delay katı 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 esnek tercihleri veya ödünleri uygularken daha uygundur. Hem harcanan zaman hem de maliyet söz konusu olduğunda gecikmeleri ve maliyetleri dilediğiniz gibi birleştirebilirsiniz.

Araç temizleme örneğinde çok uzun bir gecikme kullanılır. Bunun nedeni, rotanın sonunda aracın temizlenmesinin zorunlu olması ve uzun gecikmenin, optimize edicinin bu şartı yok saymasını engellemesidir. Yalnızca maliyet belirlerseniz optimize edici, maliyeti başka bir yerde telafi etmenin bir yolunu bulursa temizliği atlamayı seçebilir. Örneğin, aracı temizlemeyerek "tasarruf edilen" sürede daha fazla gönderi teslim edebilir.

Park etme ö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 duruyorsa 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 olan veya olmayan konumlarla eşleşen geçiş özellikleri kullanılmıştır. Peki tüm geçişlere uygulanacak geçiş özellikleri eklemeniz gerekirse ne yapacaksınız?

Etiketleri çıkaramazsınız çünkü her TransitionAttributes mesajında TransitionAttributes.src_tag ve TransitionAttributes.excluded_src_tag etiketlerinden biri ile TransitionAttributes.dst_tag ve TransitionAttributes.excluded_dst_tag etiketlerinden biri bulunmalıdır.

Ancak TransitionAttributes.excluded_src_tag veya TransitionAttributes.excluded_dst_tag değerini modelde 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.

Daha fazla bilgi