Boyutlar

Yönlendirme çözücü, tablodaki nesneleri izlemek için boyut bir aracın rotası boyunca biriken miktarlar; örneğin, seyahat süresi veya Araç kamyonetler ve teslimatlar yapıyorsa taşıdığı toplam ağırlık , Bir yönlendirme sorunu, kısıtlamalar ya da kısıtlamalar bir boyut tanımlamanız gerekir.

Bu bölümde, boyutların nasıl tanımlanacağı ve kullanılacağı açıklanmaktadır.

Boyut örnekleri

Aşağıda, önceki bölümlerden alınan birkaç boyut örneğini görebilirsiniz.

  • VRPTW örneği izlenecek bir boyut oluşturur her aracın kümülatif seyahat süresidir. Çözücü, boyutu zorunlu kılmak için bir aracın yalnızca konumun sınırları içindeki bir konumu ziyaret edebilmesi bir zaman aralığı seçin.

  • CVRP örneği, talep eder (ör. teslim alınacak paketlerin ağırlıkları veya hacimleri) Aracın rotasında taşıdığı kümülatif yük. Çözücü, bir aracın yükünün kısıtlanmasını uygulamak için boyutu kullanır kapasitesini aşamaz.

Aşağıdaki örneklerde AddDimension yöntemidir.

Python

routing.AddDimension(
    callback_index,
    slack_max,
    capacity,
    fix_start_cumul_to_zero,
    dimension_name)

C++

routing.AddDimension(
    callback_index,
    slack_max,
    capacity,
    fix_start_cumul_to_zero,
    dimension_name)

Java

routing.addDimension(
    callbackIndex,
    slackMax,
    capacity,
    fixStartCumulToZero,
    dimensionName)

C#

routing.AddDimension(
    callbackIndex,
    slackMax,
    capacity,
    fixStartCumulToZero,
    dimensionName)

AddDimension yöntemi aşağıdaki girişleri içerir:

  • callback_index: Miktarı döndüren geri çağırmanın dizini. İlgili içeriği oluşturmak için kullanılan çözücünün geri çağırmaya dahili referansı olan dizin, RegisterTransitCallback veya RegisterUnitaryTransitCallback gibi yöntemlerle uzaklaştırın.
  • slack_max: Beklemeyi göstermek için kullanılan slack için maksimum değer kez kontrol edin. için aşağıdaki slack değişkenlerine bakın bolca fırsat sunuyor. Sorun bekleme süresiyle ilgili değilse genellikle slack_max 0 olarak ayarladı.
  • capacity: Her rota boyunca biriken toplam miktar için maksimum değer. Aşağıdakilere benzer kısıtlamalar oluşturmak için capacity CVRP: Sorununuz böyle bir capacity değerini Güzergahlara hiçbir kısıtlama getirmez; örneğin, geri çağırmayı tanımlamak için kullanılan matris veya dizi girişleridir.
  • fix_start_cumulative_to_zero: Boole değeri. Doğru ise kümülatif değer 0 ile başlıyor. Çoğu durumda bu, True olarak ayarlanmalıdır. Ancak VRPTW veya kaynak kısıtlamaları, bazı araçlar zaman aralığı kısıtlamaları nedeniyle 0 zamanından sonra başlaması gerekebilir, bu nedenle bu sorunlar için fix_start_cumulative_to_zero değerini False olarak ayarlayın.
  • dimension_name: 'Distance' gibi boyutun adı için dize Programda başka bir yerdeki değişkenlere erişmek için bu değişkenleri kullanabilirsiniz.

CVRP programı, AddDimensionWithVehicleCapacity yöntemidir. Bu yöntemde, her araç için bir giriş olacak şekilde bir kapasite dizisi kullanılır. (Öte yandan AddDimension, capacity için tek bir değer alır, dolayısıyla tüm araçların aynı kapasiteye sahip olduğu varsayılır.)

RoutingModel sayfasını inceleyin. diğer yöntemler için bir referans sayfasına da bakabilirsiniz.

Bölüm Çözüm zaman aralıklarını bir listeye veya diziye kaydetme kümülatif verileri bir liste veya dizideki bir boyuta kaydeden işlevler sunar.

Slack değişkenleri

“Slack” değişkenlerini gösteren bir problemde yardımcı olur. Diyelim ki Bir araç, rotasının bir adımında i konumundan j konumuna gittiğinde ve

  • Aracın i'deki toplam seyahat süresi 100 dakikadır.
  • Aracın j'deki toplam seyahat süresi 200 dakikadır.
  • i'den j'ye seyahat süresi 75 dakikadır.

Araç, varış noktası i konumundan hemen ayrılamaz veya bu konum toplam j konumundaki süre 175 olur. Bunun yerine, araç şu saatte 25 dakika beklemelidir: kalkıştan önce i konumu; diğer bir deyişle, i konumundaki bolluk 25'tir.

Araçların daha önce beklemesi gerekebileceği için VRPTW'de gevşekliğe izin vermeniz gerekir ziyaret etmekten kaçınmalısınız. Böyle bir problemde, Araçların beklemesine izin vermek istediğiniz maksimum süreye slack_max konuma geçebileceksiniz. Ürünlerin ne kadar süre çok büyük bir sayıya slack_max ayarlayın.

CVRP için ise i olan toplam yükteki değişim j her zaman i talebe eşittir, dolayısıyla bolluk yoktur. Örneğin, slack_max değerini 0 olarak ayarlayabilirsiniz.

Şimdi slack'in resmi tanımını vereceğiz. Boyut, dahili olarak rotalar boyunca biriken miktarlarla ilgili iki tür değişkendir:

  • Toplu taşıma değişkenleri: Her adımda miktardaki artış veya azalma yol gösterir. i -> j, rotadaki bir adımsa toplu taşıma değişkeni i olur. j toplu taşıma matrisinin girişi (toplu taşıma geri araması için) veya i konumundaki geri çağırma değeri (geri çağırma yalnızca bir konuma bağlıysa).
  • Kümülatif değişkenler: Her konumdaki birikmiş toplam miktar. Siz i konumundaki kümülatif değişkene şu şekilde erişebilir: dimension_name.CumulVar(i) Örnek için zaman aralığı kısıtlamaları örneğine bakalım.

Bir aracın tek adımda i konumundan j konumuna gittiği varsayıldığında, slack aşağıdaki şekilde bu değişkenlerle ilgilidir:

slack(i) = cumul(j) - cumul(i) - transit(i, j)

Boyutlar hakkında daha fazla bilgi için bkz. RoutingDimension referans bölümünde bulabilirsiniz.