Method: shipping.designShippingNetwork

Menyelesaikan masalah desain dan penjadwalan jaringan pengiriman liner (LSNDSP) dari DesignShippingNetworkRequest yang ditentukan.

LSNDSP adalah masalah pengoptimalan kompleks yang berupaya menemukan desain dan penjadwalan jaringan pengiriman kapal yang optimal. Tujuannya adalah untuk meminimalkan total biaya pengoperasian jaringan, sekaligus memenuhi sebanyak mungkin permintaan kargo antar port.

LSNDSP dapat dibagi menjadi dua submasalah utama: desain jaringan dan penjadwalan. Submasalah desain jaringan menentukan kumpulan port yang akan dilayani oleh jaringan, jumlah kapal yang akan di-deploy di setiap rute, dan rute yang akan diambil oleh kapal. Sub-masalah penjadwalan menentukan jadwal pelayaran kapal, dengan memperhitungkan waktu yang diperlukan untuk berlayar di antara pelabuhan, waktu yang diperlukan untuk memuat dan menurunkan muatan kargo, dan permintaan untuk transportasi kargo antar pelabuhan.

Dengan kata sederhana, LSNDSP merupakan masalah dalam memutuskan port mana yang akan dilayani, berapa banyak kapal yang digunakan, dan bagaimana menjadwalkan kapal sehingga biaya pengoperasian jaringan dapat diminimalkan sambil memaksimalkan pendapatan untuk memenuhi permintaan kargo. Subkomponen LSNDSP yang menantang adalah perutean kargo, yang menentukan permintaan mana yang harus dipenuhi dan rute mana yang harus ditetapkan ke kargo untuk memaksimalkan pendapatan.

Permintaan HTTP

POST https://optimization.googleapis.com/v1/shipping:designShippingNetwork

URL menggunakan sintaksis gRPC Transcoding.

Isi permintaan

Isi permintaan memuat data dengan struktur berikut:

Representasi JSON
{
  "requestId": string,
  "solverParameters": {
    object (SolverParameters)
  },
  "ports": [
    {
      object (Port)
    }
  ],
  "legCandidates": [
    {
      object (LegCandidate)
    }
  ],
  "vesselClasses": [
    {
      object (VesselClass)
    }
  ],
  "commodityDemands": [
    {
      object (CommodityDemand)
    }
  ],
  "vesselServices": [
    {
      object (VesselService)
    }
  ]
}
Kolom
requestId

string

ID masalah atau permintaan.

solverParameters

object (SolverParameters)

Parameter untuk pemecah.

ports[]

object (Port)

Daftar kemungkinan port yang akan dipanggil dalam layanan moda transportasi laut. Permintaan hanya boleh berisi ID port yang ada dalam daftar ini.

legCandidates[]

object (LegCandidate)

Daftar kandidat kaki potensial yang akan ditambahkan ke layanan kapal. Permintaan hanya boleh berisi ID kandidat segmen yang ada dalam daftar ini.

vesselClasses[]

object (VesselClass)

Daftar kelas kapal untuk melakukan layanan kapal. Perhatikan bahwa semua kapal dari kelas yang sama sepenuhnya dapat dipertukarkan. Permintaan hanya boleh berisi ID kelas moda transportasi laut yang tercantum dalam daftar ini.

commodityDemands[]

object (CommodityDemand)

Daftar permintaan komoditas potensial (yaitu kontainer) yang harus dipenuhi oleh jasa kapal.

vesselServices[]

object (VesselService)

Jaringan layanan kapal yang valid (biasanya status jaringan saat ini) dapat disediakan untuk digunakan sebagai titik awal pengoptimalan.

Isi respons

Respons menyimpan solusi ke instance LSNDSP yang diteruskan dalam permintaan. Peta ini berisi jaringan layanan kapal dan jalur permintaan komoditas yang valid. Total permintaan komoditas yang melewati setiap segmen tidak boleh melebihi kapasitas kelas kapal yang melayani segmen ini. Perhatikan bahwa tidak memiliki layanan kapal tanpa permintaan yang terpenuhi selalu menjadi solusi yang tepat untuk masalah desain dan penjadwalan jaringan pelayaran.

Jika berhasil, isi respons memuat data dengan struktur berikut:

Representasi JSON
{
  "requestId": string,
  "vesselServices": [
    {
      object (VesselService)
    }
  ],
  "commodityDemandPaths": [
    {
      object (CommodityDemandPath)
    }
  ]
}
Kolom
requestId

string

ID permintaan yang terkait dengan respons ini.

vesselServices[]

object (VesselService)

Jaringan layanan kapal. Untuk setiap kelas kapal, jumlah total kapal yang digunakan tidak boleh melebihi jumlah kapal yang tersedia untuk kelas ini.

commodityDemandPaths[]

object (CommodityDemandPath)

Daftar semua jalur permintaan komoditas yang dilalui pengiriman permintaan komoditas yang positif. Perhatikan bahwa beberapa ID permintaan komoditas mungkin tidak disertakan jika tidak ada permintaan yang dikirim. Atau, permintaan komoditas dapat dipenuhi sebagian. Untuk setiap permintaan komoditas, total kuantitas yang terpenuhi tidak boleh melebihi total permintaan. Terakhir, commodityDemandPaths bergantung pada vesselServices (lihat definisi CommodityDemandPath).

SolverParameters

Parameter yang mengontrol satu penyelesaian LSNDSP.

Representasi JSON
{
  "timeLimit": string
}
Kolom
timeLimit

string (Duration format)

Waktu maksimum yang harus dihabiskan pemecah masalah untuk memecahkan masalah. Nilai ini bukanlah batas mutlak dan tidak memperhitungkan overhead komunikasi. Latensi yang diharapkan untuk menyelesaikan masalah mungkin sedikit melebihi nilai ini.

Durasi dalam detik dengan maksimal sembilan digit pecahan, diakhiri dengan 's'. Contoh: "3.5s".

Port

Port, misalnya terminal atau semua terminal port.

Representasi JSON
{
  "id": string,
  "minimumPortStayDuration": {
    object (Duration)
  },
  "minimumTransshipmentDuration": {
    object (Duration)
  },
  "transshipmentCost": number,
  "vesselClassCosts": {
    string: {
      object (VesselCost)
    },
    ...
  }
}
Kolom
id

string

ID unik yang ditetapkan untuk port ini.

minimumPortStayDuration

object (Duration)

Durasi menginap minimum untuk panggilan port. Sebagian besar studi berasumsi konstan karena pelabuhan biasanya menugaskan lebih banyak derek ke kapal yang lebih besar dengan jumlah gerakan yang tinggi, karena membutuhkan lebih banyak ruang.

minimumTransshipmentDuration

object (Duration)

Durasi minimum pengiriman di pelabuhan tertentu, termasuk durasi bongkar muat kontainer dan muat ulang di kapal lain.

transshipmentCost

number

Biaya transshipping container. Jumlah ini biasanya akan lebih rendah daripada jumlah pemuatan dan pengosongan muatan karena proses pengiriman tidak memerlukan dokumen bea cukai di pelabuhan.

vesselClassCosts

map (key: string, value: object (VesselCost))

Biaya yang dikenakan saat memanggil port ini dipetakan oleh ID kelas kapal. Class kapal hanya dapat memanggil port ini jika memiliki entri dalam peta ini.

Objek yang berisi daftar pasangan "key": value. Contoh: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

Durasi

Durasi (tinggal di pelabuhan/pengiriman, transportasi umum permintaan) ditentukan pada perincian per jam.

Representasi JSON
{
  "hours": string
}
Kolom
hours

string (int64 format)

Jumlah jam yang menentukan durasi.

VesselCost

Biaya kapal untuk menelepon dan tetap di pelabuhan ini didefinisikan sebagai fungsi linear dari durasi menginap (fixedCost + hourlyCost * jam).

Representasi JSON
{
  "fixedCost": number,
  "hourlyCost": number
}
Kolom
fixedCost

number

Biaya tetap untuk memanggil port ini.

hourlyCost

number

Biaya per jam untuk menginap di port ini.

LegCandidate

Kandidat segmen layanan kapal. Bisa ada beberapa kandidat jalur di antara dua port yang sama, mis., yang mewakili rute laut dan/atau kecepatan kapal yang berbeda.

Representasi JSON
{
  "id": string,
  "departurePortId": string,
  "arrivalPortId": string,
  "duration": {
    object (Duration)
  },
  "vesselClassCosts": {
    string: number,
    ...
  }
}
Kolom
id

string

ID unik yang ditetapkan untuk kandidat segmen ini.

departurePortId

string

ID port keberangkatan.

arrivalPortId

string

ID port kedatangan.

duration

object (Duration)

Durasi segmen.

vesselClassCosts

map (key: string, value: number)

Biaya untuk menetapkan kandidat kaki ini ke kelas pesawat tertentu. Biaya ini dapat mencakup biaya operasional kapal, biaya bunker, biaya sewa. Kelas kapal hanya dapat berlayar melalui kandidat kaki ini jika memiliki entri dalam peta ini.

Objek yang berisi daftar pasangan "key": value. Contoh: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

VesselClass

Kelas kapal, yaitu sekelompok kapal yang memiliki properti yang sama. Tidak ada cara untuk membedakan antara dua kapal dari kelas yang sama.

Representasi JSON
{
  "id": string,
  "containerCapacity": string,
  "vesselCount": string
}
Kolom
id

string

ID unik yang ditetapkan untuk kelas kapal ini.

containerCapacity

string (int64 format)

Kapasitas kelas kapal (dalam kontainer).

vesselCount

string (int64 format)

Jumlah kapal di kelas kapal ini.

CommodityDemand

Permintaan komoditas, yaitu permintaan potensial yang harus dipenuhi oleh pengirim.

Representasi JSON
{
  "id": string,
  "originPortId": string,
  "destinationPortId": string,
  "containerCount": string,
  "freightRate": number,
  "maximumTransitDuration": {
    object (Duration)
  }
}
Kolom
id

string

ID unik yang ditetapkan untuk permintaan komoditas ini.

originPortId

string

ID port asal.

destinationPortId

string

ID port tujuan.

containerCount

string (int64 format)

Jumlah maksimum penampung yang akan dipenuhi.

freightRate

number

Tarif kargo per kontainer (yang dapat mencakup penalti untuk permintaan yang tidak terpenuhi). Metrik ini harus menghapus biaya pemuatan dan pemakaian per container di tempat asal dan tujuan.

maximumTransitDuration

object (Duration)

Durasi transit maksimum (jika ditetapkan, harus bernilai positif strik). Waktu transit ditentukan dari waktu ketika kapal pertama yang melayani permintaan ini meninggalkan pelabuhan asal hingga kapal terakhir yang melayani permintaan ini tiba di pelabuhan tujuan.

VesselService

Layanan kapal yang dapat digunakan untuk memenuhi permintaan komoditas. PENTING: asumsi saat ini adalah layanan berada pada frekuensi mingguan dan waktu inap port tidak boleh melebihi satu minggu. Pertimbangkan urutan segmen layanan vessel berikut: vesselServiceLegs { legCandidateId: "0->1" originKeberangkatanTime {} destinationArrivalTime { day: 3 hourOfDay: 12 } } vesselServiceLegs { legId: "1->0" origin originTime { day: 4 } destinationArrivalTime { hour through 4 } destinationArrivalTime { days: 4 } destinationArrivalTime { hours: 4 } destinationArrivalTime { hours}

Representasi JSON
{
  "vesselClassId": string,
  "vesselServiceLegs": [
    {
      object (VesselServiceLeg)
    }
  ]
}
Kolom
vesselClassId

string

ID class kapal yang menjalankan layanan.

vesselServiceLegs[]

object (VesselServiceLeg)

Untuk layanan kapal yang valid, properti berikut berlaku: 1. Wajib diisi. 2. destinationPortId dan originPortId untuk segmen berturut-turut harus cocok (termasuk untuk segmen terakhir dan pertama).

VesselServiceLeg

Satu segmen layanan kapal.

Representasi JSON
{
  "legCandidateId": string,
  "originDepartureTime": {
    object (ScheduleTime)
  },
  "destinationArrivalTime": {
    object (ScheduleTime)
  }
}
Kolom
legCandidateId

string

ID kandidat kaki yang ditetapkan.

originDepartureTime

object (ScheduleTime)

Waktu keberangkatan di pelabuhan asal pada jadwal mingguan.

destinationArrivalTime

object (ScheduleTime)

Waktu tiba di port tujuan pada jadwal mingguan.

ScheduleTime

Waktu jadwal (keberangkatan/kedatangan kapal/permintaan) ditentukan pada frekuensi mingguan pada jam tertentu.

Representasi JSON
{
  "day": string,
  "hourOfDay": integer
}
Kolom
day

string (int64 format)

Hari sesuai jadwal. Hari ke-0 adalah hari pertama yang memungkinkan.

hourOfDay

integer

Jam pada waktu jadwal harus berupa bilangan bulat antara 0 dan 23 inklusif.

CommodityDemandPath

Berbagai layanan dan port yang diambil oleh sebagian kecil permintaan komoditas tertentu. Indeks yang digunakan di bawah ini didasarkan pada urutan layanan kapal dalam respons dan urutan segmen layanan dalam layanan kapal individual.

Representasi JSON
{
  "commodityDemandId": string,
  "containerCount": string,
  "vesselServiceLegIds": [
    {
      object (VesselServiceLegId)
    }
  ]
}
Kolom
commodityDemandId

string

ID permintaan komoditas terpenuhi.

containerCount

string (int64 format)

Jumlah container yang melalui jalur ini. Untuk setiap permintaan komoditas, total kuantitas yang terpenuhi tidak boleh melebihi total permintaan.

vesselServiceLegIds[]

object (VesselServiceLegId)

Daftar ID segmen layanan kapal yang diambil melalui jalur ini. Untuk jalur permintaan komoditas yang valid, properti berikut berlaku: 1. KeberangkatanPortId segmen pertama harus cocok dengan originPortId permintaan komoditas. 2. destinationPortId segmen terakhir harus cocok dengan destinationPortId permintaan komoditas. 3. arrivalPortId dan KeberangkatanPortId berturut-turut harus cocok. 4. Jika disediakan untuk permintaan komoditas ini, waktu transit maksimum harus lebih besar atau sama dari total durasi jalur.

VesselServiceLegId

Segmen layanan satu kapal yang digunakan dalam jalur permintaan komoditas. Misalnya, ada dua layanan kapal. Yang pertama terbuat dari tiga kaki (diindeks 0, 1 dan 2) dan dua kaki kedua (diindeks 0 dan 1). Selain itu, segmen pertama layanan pertama tiba di port keberangkatan segmen kedua layanan kedua. Jalur komoditas yang terdiri dari tiga ID layanan kapal berikut: {vesselServiceIndex: 0, vesselServiceLegIndex: 2} {vesselServiceIndex: 0, vesselServiceLegIndex: 0} {vesselServiceIndex: 1, vesselServiceLegIndex: 1} berarti bahwa kontainer mengambil 2 siklus yang berurutan

Representasi JSON
{
  "vesselServiceIndex": integer,
  "vesselServiceLegIndex": integer
}
Kolom
vesselServiceIndex

integer

Indeks layanan kapal.

vesselServiceLegIndex

integer

Indeks segmen dari layanan kapal yang diindeks oleh vesselServiceIndex.