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
veyaRegisterUnitaryTransitCallback
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 genellikleslack_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çincapacity
CVRP: Sorununuz böyle bircapacity
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çinfix_start_cumulative_to_zero
değeriniFalse
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şkenii
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.