Belirtilen DesignShippingNetworkRequest
için yolcu taşıma ağı tasarımı ve planlama sorununu (LSNDSP) çözer.
LSNDSP, bir yolcu gemisi taşıma ağının optimum tasarımını ve zamanlamasını bulmaya çalışan karmaşık bir optimizasyon problemidir. Amaç, limanlar arasındaki kargo talebinin mümkün olduğunca büyük bir kısmını karşılarken ağı çalıştırmanın toplam maliyetini en aza indirmektir.
LSNDSP, ağ tasarımı ve planlama olmak üzere iki ana alt soruna ayrılabilir. Ağ tasarımı alt sorunu ağ tarafından hizmet verilecek bağlantı noktaları kümesini, her bir güzergâh üzerinde dağıtılacak gemi sayısını ve gemilerin izleyeceği rotaları belirler. Planlama alt sorunu, limanlar arasında seyretmek için geçen süreyi, yük yükleyip boşaltmak için gereken süreyi ve limanlar arasındaki yük taşıma talebini dikkate alarak gemiler için yelkenli sefer saatlerini belirler.
Basit bir şekilde ifade etmek gerekirse LSNDSP'de hizmet hangi bağlantı noktasının kullanılacağına, kaç tane geminin kullanılacağına ve kargo talebinin karşılanması için geliri en üst düzeye çıkarırken ağ işletme maliyetinin en aza indirilmesi için gemilerin nasıl programlanacağına karar verme sorunudur. LSNDSP'nin zorlu bir alt bileşeni olan kargo rotasıdır. Kargo rotası, geliri en üst düzeye çıkarmak için hangi taleplerin karşılanacağını ve hangi rotaların kargoya atanacağını belirler.
HTTP isteği
POST https://optimization.googleapis.com/v1/shipping:designShippingNetwork
URL, gRPC Kod Dönüştürme söz dizimini kullanır.
İstek içeriği
İstek gövdesi, aşağıdaki yapıya sahip verileri içerir:
JSON gösterimi |
---|
{ "requestId": string, "solverParameters": { object ( |
Alanlar | |
---|---|
requestId |
Sorun veya istek kimliği. |
solverParameters |
Çözücü parametreleri. |
ports[] |
Gemi hizmetlerinde çağrılabilecek olası bağlantı noktalarının listesi. İstek yalnızca bu listedeki bağlantı noktası kimliklerini içermelidir. |
legCandidates[] |
Gemi hizmetlerine eklenecek potansiyel ayak adaylarının listesi. İstek yalnızca bu listedeki aday aday kimliklerini içermelidir. |
vesselClasses[] |
Gemi hizmetleri verilen gemi sınıflarının listesi. Aynı sınıfa ait tüm gemilerin tamamen değiştirilebilir olduğunu unutmayın. İstek yalnızca bu listede bulunan gemi sınıfı kimliklerini içermelidir. |
commodityDemands[] |
Gemi hizmetleri tarafından karşılanması gereken potansiyel emtia (ör. konteyner) taleplerinin listesi. |
vesselServices[] |
Optimizasyonun başlangıç noktası olarak kullanılması için geçerli gemi hizmetlerinden oluşan bir ağ (genellikle ağın mevcut durumu) sağlanabilir. |
Yanıt gövdesi
Yanıt, çözümü istekte iletilen LSNDSP örneğine tutar. Geçerli bir gemi hizmetleri ağı ve emtia talep yolları ağı içerir. Her bir ayaktan geçen toplam emtia talebi, bu ayağa hizmet veren gemi sınıfı kapasitesini aşamaz. Karşılanan talep olmadan gemi hizmeti bulunmamasının, yolcu gemisi kargo ağı tasarımı ve planlama sorunu için her zaman uygun bir çözüm olduğunu unutmayın.
Başarılı olursa yanıt metni aşağıdaki yapıyla birlikte verileri içerir:
JSON gösterimi |
---|
{ "requestId": string, "vesselServices": [ { object ( |
Alanlar | |
---|---|
requestId |
Bu yanıtın ilişkilendirildiği isteğin kimliği. |
vesselServices[] |
Gemi hizmetleri ağı. Her bir gemi sınıfı için kullanılan toplam gemi sayısı, bu sınıftaki mevcut gemi sayısını aşamaz. |
commodityDemandPaths[] |
Pozitif ürün talebinin gönderildiği tüm emtia talep yollarının listesi. Hiçbir talep gönderilmiyorsa bazı emtia talep kimliklerinin dahil edilmeyeceğini unutmayın. Alternatif olarak, emtia talebi kısmen karşılanabilir. Her bir emtia talebi için tamamlanan toplam miktar, toplam talebi aşamaz. Son olarak, commodityDemandPaths vesselServices'a bağlıdır (CommodityDemandPath tanımına bakın). |
SolverParameters
LSNDSP'nin tek bir çözümünü kontrol eden parametreler.
JSON gösterimi |
---|
{ "timeLimit": string } |
Alanlar | |
---|---|
timeLimit |
Çözme aracının problem üzerinde harcaması gereken maksimum süre. Bu değer sabit bir sınır değildir ve iletişim ek yükünü hesaba katmaz. Sorunu çözmek için beklenen gecikme, bu değeri biraz aşabilir. En fazla dokuz kesir basamağı olan ve " |
Bağlantı noktası
Bağlantı noktası, ör. bir terminale veya bir bağlantı noktasının tüm terminallerine uygulanır.
JSON gösterimi |
---|
{ "id": string, "minimumPortStayDuration": { object ( |
Alanlar | |
---|---|
id |
Bu bağlantı noktasına atanan benzersiz kimlik. |
minimumPortStayDuration |
Bir numara taşıma çağrısı için minimum konaklama süresi. Limanlar daha fazla alan kapladığından, yüksek hareket sayısına sahip daha büyük gemilere genelde daha fazla vinç atadığından çoğu çalışmada sabit bir değer olduğu varsayılır. |
minimumTransshipmentDuration |
Bir konteyneri boşaltma ve başka bir gemiye yeniden yükleme süresi dahil olmak üzere, belirli bir bağlantı noktasında nakliyenin minimum süresi. |
transshipmentCost |
Bir kapsayıcının taşınmasının maliyeti. Transshipping limanda gümrük evrakları gerektirmediğinden, genellikle yükleme ve boşaltma işlemlerinin toplamından daha düşük olur. |
vesselClassCosts |
Bu limanın çağrılması sırasında ödenen ücretler, gemi sınıfı kimliğiyle eşlenmiştir. Bir gemi sınıfı, bu limanı yalnızca bu haritada bir girişi varsa çağırabilir.
|
Süre
Süre (bağlantı noktası/taşıma, talep taşıma), saatlik ayrıntı düzeyiyle tanımlanır.
JSON gösterimi |
---|
{ "hours": string } |
Alanlar | |
---|---|
hours |
Süreyi tanımlayan saat sayısı. |
VesselCost
Bu limanda arama ve konaklama için gemi maliyeti, konaklama süresinin (fixedCost
+ hourlyCost
* saat) doğrusal bir işlevi olarak tanımlanır.
JSON gösterimi |
---|
{ "fixedCost": number, "hourlyCost": number } |
Alanlar | |
---|---|
fixedCost |
Bu bağlantı noktasını aramayla ilgili sabit ücret. |
hourlyCost |
Bu bağlantı noktasında kalmanın saatlik maliyeti. |
LegCandidate
Tekne hizmet ayağı adayı. Aynı iki bağlantı noktası arasında birden fazla bacak adayı olabilir, ör. Semboller kullanılır.
JSON gösterimi |
---|
{
"id": string,
"departurePortId": string,
"arrivalPortId": string,
"duration": {
object ( |
Alanlar | |
---|---|
id |
Bu ayak adayına atanan benzersiz kimlik. |
departurePortId |
Kalkış limanının kimliği. |
arrivalPortId |
Varış limanının kimliği. |
duration |
Bacağın süresi. |
vesselClassCosts |
Bu ayak adayını belirli bir gemi sınıfına atama maliyeti. Bu maliyetlere gemi işletme maliyeti, sığınak maliyeti, kiralama belgesi maliyeti dahildir. Bir gemi sınıfının yelken açabilmesi için bu ayak adayının bu haritada yelken yapması gerekir.
|
VesselClass
Tekne sınıfı, yani aynı özellikleri paylaşan bir gemi grubu. Aynı sınıftaki iki gemiyi birbirinden ayırt etmenin bir yolu yoktur.
JSON gösterimi |
---|
{ "id": string, "containerCapacity": string, "vesselCount": string } |
Alanlar | |
---|---|
id |
Bu gemi sınıfına atanan benzersiz kimlik. |
containerCapacity |
Tekne sınıfı kapasitesi (kapsayıcı cinsinden). |
vesselCount |
Bu gemi sınıfındaki gemi sayısı. |
CommodityDemand
Emtia talebi, yani bir taşıyıcı tarafından karşılanacak potansiyel talep.
JSON gösterimi |
---|
{
"id": string,
"originPortId": string,
"destinationPortId": string,
"containerCount": string,
"freightRate": number,
"maximumTransitDuration": {
object ( |
Alanlar | |
---|---|
id |
Bu ürün talebine atanan benzersiz kimlik. |
originPortId |
Kaynak bağlantı noktasının kimliği. |
destinationPortId |
Hedef bağlantı noktasının kimliği. |
containerCount |
Yerine getirilecek maksimum container sayısı. |
freightRate |
Konteyner başına navlun ücreti (karşılanmayan talep nedeniyle cezayı da içerebilir). Başlangıç noktası ve hedefte her container başına yükleme ve boşaltma maliyetlerini kaldırmalıdır. |
maximumTransitDuration |
Maksimum nakliye süresi (ayarlanmışsa büyük bir pozitif olmalıdır). Nakliye süresi, bu talebe hizmet veren ilk geminin kalkış bağlantı noktasından ayrılması ile bu talebe hizmet veren son geminin hedef limana gelmesi arasında geçen zamandır. |
VesselService
Emtia taleplerini karşılamak için kullanılabilen gemi hizmeti. ÖNEMLİ: Hizmetlerin haftalık sıklıkta olduğu ve taşıma süresinde konaklama süresinin bir haftayı geçemeyeceği varsayılmıştır. Aşağıdaki gemi hizmet ayakları dizisini göz önünde bulundurun: vesselServiceLegs { legCandidateId: "0->1" originDepartureTime {} destinationArrivalTime { day: 3 hourOfDay: 12 } } vesselServiceLegs { legCandidateId: "1->0" origin dayalıTime { day: 4 } destinationArrivalTime { day: 7 hourOfDay: 12 } } Bu ayaklar, iki bağlantı noktasından geçen bir haftalık hizmet hattını tanımlar ve her iki bağlantı noktası konaklama süresi 12 saattir.
JSON gösterimi |
---|
{
"vesselClassId": string,
"vesselServiceLegs": [
{
object ( |
Alanlar | |
---|---|
vesselClassId |
Hizmeti gerçekleştiren gemi sınıfı kimliği. |
vesselServiceLegs[] |
Geçerli bir gemi hizmeti için aşağıdaki mülkler geçerli olur: 1. Boş bırakılamaz. 2. Ardışık bacak targetPortId ve originPortId eşleşmelidir (son ve ilk ayaklar dahil). |
VesselServiceLeg
Gemi hizmetinin tek ayağı.
JSON gösterimi |
---|
{ "legCandidateId": string, "originDepartureTime": { object ( |
Alanlar | |
---|---|
legCandidateId |
Atanan bacak aday kimliği. |
originDepartureTime |
Haftalık programdaki kalkış bağlantı noktasında kalkış saati. |
destinationArrivalTime |
Haftalık programda hedef limana varış saati. |
ScheduleTime
Zaman planlaması zamanı (gemi/talep kalkış/varışlar), belirli bir saatteki haftalık sıklıkta tanımlanır.
JSON gösterimi |
---|
{ "day": string, "hourOfDay": integer } |
Alanlar | |
---|---|
day |
Programdaki gün. 0. gün, mümkün olan ilk gündür. |
hourOfDay |
Program zamanının günün saati, 0 ile 23 arasında (0 ve 23 dahil) bir tam sayı olmalıdır. |
CommodityDemandPath
Belirli bir emtia talebinin aldığı farklı hizmetler ve limanlar. Aşağıda kullanılan endeksler, yanıttaki gemi hizmetlerinin sırasına ve münferit gemi hizmetlerindeki hizmet ayaklarının sırasına göre belirlenmiştir.
JSON gösterimi |
---|
{
"commodityDemandId": string,
"containerCount": string,
"vesselServiceLegIds": [
{
object ( |
Alanlar | |
---|---|
commodityDemandId |
Ürün talep kimliği karşılandı. |
containerCount |
Bu yoldan geçen container sayısı. Her bir emtia talebi için tamamlanan toplam miktar, toplam talebi aşamaz. |
vesselServiceLegIds[] |
Bu yol boyunca alınan gemi hizmet ayağı kimliklerinin listesi. Geçerli bir emtia talep yolu için aşağıdaki mülkler şunları barındırır: 1. İlk ayağın FROMPortId değeri, emtia talebinin originPortId'si ile eşleşmelidir. 2. Son grubun targetPortId değeri, emtia talebinin hedefPortId'si ile eşleşmelidir. 3. Ardışık bacak varışPortId ve DEPARTUREPortId eşleşmelidir. 4. Bu ürün talebi için sağlanıyorsa maksimum nakliye süresi, yolun toplam süresinden daha uzun veya bu süreye eşit olmalıdır. |
VesselServiceLegId
Emtia talep yolunda kullanılan tek gemi hizmet ayağı. Örneğin, iki gemi hizmeti olduğunu düşünün. İlki üç ayaktan (0, 1 ve 2 endeksli) ve ikinci iki ayaktan (0 ve 1 endeksli) oluşur. Ayrıca ilk hizmetin ilk ayağı, ikinci hizmetin ikinci ayağının kalkış limanına ulaşır. Aşağıdaki üç gemi hizmet ayağı kimliğinden oluşan bir commodity yolu: {vesselServiceIndex: 0, vesselServiceLegIndex: 2} {vesselServiceIndex: 0, vesselServiceLegIndex: 0} {vesselServiceIndex: 1, vesselServiceLegIndex: 1}, her bir hizmetin art arda 2 gemi ve ardından ilk nakliye bacası hizmeti aldığı anlamına gelir.
JSON gösterimi |
---|
{ "vesselServiceIndex": integer, "vesselServiceLegIndex": integer } |
Alanlar | |
---|---|
vesselServiceIndex |
Gemi hizmeti dizini. |
vesselServiceLegIndex |
|