Menyelesaikan masalah desain dan penjadwalan jaringan pengiriman liner (LSNDSP) dari DesignShippingNetworkRequest
yang ditentukan.
LSNDSP merupakan masalah optimasi 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 pelabuhan.
LSNDSP dapat dipecah menjadi dua submasalah utama: desain dan penjadwalan jaringan. Submasalah desain jaringan menentukan serangkaian port yang akan dilayani oleh jaringan, jumlah kapal yang akan dikerahkan di setiap rute, dan rute yang akan diambil kapal. Submasalah penjadwalan menentukan jadwal pelayaran untuk kapal, dengan mempertimbangkan waktu yang dibutuhkan untuk berlayar antar pelabuhan, waktu yang dibutuhkan untuk memuat dan membongkar kargo, dan permintaan transportasi kargo antar pelabuhan.
Secara sederhana, LSNDSP adalah masalah dalam menentukan porta mana yang harus dilayani, berapa banyak kapal yang akan digunakan, dan bagaimana menjadwalkan kapal sehingga biaya pengoperasian jaringan diminimalkan sekaligus memaksimalkan pendapatan untuk memenuhi permintaan kargo. Subkomponen LSNDSP yang menantang adalah perutean kargo, yang menentukan permintaan mana yang harus dipenuhi dan rute mana yang akan 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 ( |
Kolom | |
---|---|
requestId |
ID masalah atau permintaan. |
solverParameters |
Parameter untuk pemecah. |
ports[] |
Daftar kemungkinan port yang akan dipanggil dalam layanan kapal. Permintaan hanya boleh berisi ID port yang ada dalam daftar ini. |
legCandidates[] |
Daftar kandidat kaki potensial yang akan ditambahkan ke layanan kapal. Permintaan hanya boleh berisi ID kandidat segmen yang ada dalam daftar ini. |
vesselClasses[] |
Daftar kelas kapal untuk menjalankan layanan kapal. Perhatikan bahwa semua kapal dari kelas yang sama sepenuhnya dapat dipertukarkan. Permintaan hanya boleh berisi ID kelas kapal yang ada dalam daftar ini. |
commodityDemands[] |
Daftar permintaan komoditas potensial (yaitu kontainer) yang harus dipenuhi oleh layanan kapal. |
vesselServices[] |
Jaringan layanan kapal yang valid (biasanya kondisi jaringan saat ini) dapat disediakan untuk digunakan sebagai titik awal pengoptimalan. |
Isi respons
Respons menyimpan solusi ke instance LSNDSP yang diteruskan dalam permintaan. Jalur transportasi umum 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 layak untuk masalah desain dan penjadwalan jaringan pengiriman kapal.
Jika berhasil, isi respons memuat data dengan struktur berikut:
Representasi JSON |
---|
{ "requestId": string, "vesselServices": [ { object ( |
Kolom | |
---|---|
requestId |
ID permintaan yang dikaitkan dengan respons ini. |
vesselServices[] |
Jaringan layanan kapal. Untuk setiap kelas kapal, jumlah total kapal yang digunakan tidak boleh melebihi jumlah kapal yang tersedia untuk kelas ini. |
commodityDemandPaths[] |
Daftar semua jalur permintaan komoditas yang dilalui oleh permintaan komoditas positif. Perhatikan bahwa beberapa ID permintaan komoditas mungkin tidak disertakan jika tidak ada permintaan yang dikirimkan. Atau, permintaan komoditas dapat dipenuhi sebagian. Untuk setiap permintaan komoditas, total kuantitas yang dipenuhi 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 |
Waktu maksimum yang harus dihabiskan oleh pemecah masalah untuk menyelesaikan soal. Nilai ini bukan batas pasti dan tidak memperhitungkan overhead komunikasi. Latensi yang diharapkan untuk menyelesaikan masalah mungkin sedikit lebih besar daripada nilai ini. Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
Port
Port, misalnya terminal atau semua terminal porta.
Representasi JSON |
---|
{ "id": string, "minimumPortStayDuration": { object ( |
Kolom | |
---|---|
id |
ID unik yang ditetapkan untuk port ini. |
minimumPortStayDuration |
Durasi menginap minimum untuk panggilan port. Kebanyakan studi mengasumsikan konstan karena port biasanya memindahkan lebih banyak derek untuk kapal yang lebih besar dengan jumlah gerakan yang tinggi, karena membutuhkan lebih banyak ruang. |
minimumTransshipmentDuration |
Durasi minimum pengangkutan pada pelabuhan tertentu, termasuk durasi bongkar muat kontainer dan memuatnya kembali ke kapal lain. |
transshipmentCost |
Biaya transpengiriman container. Biaya ini biasanya akan lebih rendah daripada jumlah pemuatan dan pengeluaran karena pengiriman tidak memerlukan dokumen bea cukai di pelabuhan. |
vesselClassCosts |
Biaya yang dikeluarkan saat memanggil port ini dipetakan oleh ID kelas kapal. Kelas kapal hanya dapat memanggil port ini jika memiliki entri dalam peta ini. Objek yang berisi daftar pasangan |
Durasi
Durasi (masa tinggal/pengiriman port, transit permintaan) ditentukan dalam perincian per jam.
Representasi JSON |
---|
{ "hours": string } |
Kolom | |
---|---|
hours |
Jumlah jam yang menentukan durasi. |
VesselCost
Biaya kapal untuk panggilan dan tetap di pelabuhan ini ditentukan sebagai fungsi linear dari durasi menginap (fixedCost
+ hourlyCost
* jam).
Representasi JSON |
---|
{ "fixedCost": number, "hourlyCost": number } |
Kolom | |
---|---|
fixedCost |
Biaya tetap untuk memanggil port ini. |
hourlyCost |
Biaya per jam untuk tetap di port ini. |
LegCandidate
Kandidat segmen layanan kapal. Mungkin ada beberapa kandidat kaki di antara dua port yang sama, misalnya mewakili rute lautan dan/atau kecepatan kapal yang berbeda.
Representasi JSON |
---|
{
"id": string,
"departurePortId": string,
"arrivalPortId": string,
"duration": {
object ( |
Kolom | |
---|---|
id |
ID unik yang ditetapkan untuk kandidat segmen ini. |
departurePortId |
ID port keberangkatan. |
arrivalPortId |
ID port kedatangan. |
duration |
Durasi kaki. |
vesselClassCosts |
Biaya untuk menetapkan kandidat segmen ini ke class kapal tertentu. Ini dapat mencakup biaya operasi kapal, biaya {i>bunker<i}, dan biaya piagam. Kelas kapal hanya dapat berlayar melalui kandidat kaki ini jika memiliki entri dalam peta ini. Objek yang berisi daftar pasangan |
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 |
ID unik yang ditetapkan untuk kelas kapal ini. |
containerCapacity |
Kapasitas kelas kapal (dalam kontainer). |
vesselCount |
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 ( |
Kolom | |
---|---|
id |
ID unik yang ditetapkan untuk permintaan komoditas ini. |
originPortId |
ID port asal. |
destinationPortId |
ID porta tujuan. |
containerCount |
Jumlah maksimum container yang akan dipenuhi. |
freightRate |
Tarif kargo per kontainer (yang dapat mencakup penalti untuk permintaan yang tidak terpenuhi). Kebijakan ini akan menghapus biaya pemuatan dan pengosongan daya per container di asal dan tujuan. |
maximumTransitDuration |
Durasi transit maksimum (jika ditetapkan, harus positif). Waktu transit ditentukan dari waktu ketika kapal pertama yang melayani permintaan ini meninggalkan pelabuhan asal hingga saat kapal terakhir yang melayani permintaan ini tiba di pelabuhan tujuan. |
VesselService
Layanan kapal yang dapat digunakan untuk melayani permintaan komoditas. PENTING: asumsi saat ini adalah layanan menggunakan frekuensi mingguan dan waktu tunggu port tidak boleh melebihi satu minggu. Pertimbangkan urutan segmen layanan kapal berikut: vesselServiceLegs { legCandidateId: "0->1" originDepartureTime {} destinationArrivalTime { day: 3 hourOfDay: 12 } } vesselServiceLegs { legCandidateId: "1->0" originKeberangkatanTime { hari: 4 } tujuanArrivalTime { hari: 7 jamOfDay: 12 } } Kaki ini menentukan jalur layanan satu minggu yang melalui dua port dengan kedua waktu menginap port selama 12 jam.
Representasi JSON |
---|
{
"vesselClassId": string,
"vesselServiceLegs": [
{
object ( |
Kolom | |
---|---|
vesselClassId |
ID class kapal yang menjalankan layanan. |
vesselServiceLegs[] |
Untuk layanan kapal yang valid, properti berikut berlaku: 1. Wajib diisi. 2. Kaki berturut-turut destinationPortId dan originPortId harus cocok (termasuk untuk segmen terakhir dan pertama). |
VesselServiceLeg
Satu segmen layanan kapal.
Representasi JSON |
---|
{ "legCandidateId": string, "originDepartureTime": { object ( |
Kolom | |
---|---|
legCandidateId |
ID kandidat segmen yang ditetapkan. |
originDepartureTime |
Waktu keberangkatan di port asal pada jadwal mingguan. |
destinationArrivalTime |
Waktu kedatangan di port tujuan pada jadwal mingguan. |
ScheduleTime
Waktu jadwal (keberangkatan/kedatangan/kedatangan kapal) ditentukan pada frekuensi mingguan pada jam tertentu.
Representasi JSON |
---|
{ "day": string, "hourOfDay": integer } |
Kolom | |
---|---|
day |
Hari sesuai jadwal. Hari 0 adalah hari pertama yang memungkinkan. |
hourOfDay |
Jam dalam waktu jadwal harus berupa bilangan bulat antara 0 dan 23 inklusif. |
CommodityDemandPath
Berbagai layanan dan porta yang diambil oleh sebagian kecil dari permintaan komoditas tertentu. Indeks yang digunakan di bawah ini didasarkan pada urutan layanan kapal dalam respons dan urutan segmen layanan di setiap layanan kapal.
Representasi JSON |
---|
{
"commodityDemandId": string,
"containerCount": string,
"vesselServiceLegIds": [
{
object ( |
Kolom | |
---|---|
commodityDemandId |
ID permintaan komoditas terpenuhi. |
containerCount |
Jumlah penampung yang melalui jalur ini. Untuk setiap permintaan komoditas, total kuantitas yang dipenuhi tidak boleh melebihi total permintaan. |
vesselServiceLegIds[] |
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 originPortId permintaan komoditas. 2. DestinationPortId segmen terakhir harus cocok dengan destinationPortId permintaan komoditas. 3. Kaki berturut-turut arrivalPortId dan KeberangkatanPortId harus cocok. 4. Jika disediakan untuk permintaan komoditas ini, waktu transit maksimum harus lebih besar atau sama dengan total durasi jalur. |
VesselServiceLegId
Segmen layanan satu kapal yang digunakan di 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 kaki layanan kapal berikut: {vesselServiceIndex: 0, vesselServiceLegIndex: 2} {vesselServiceIndex: 0, vesselServiceLegIndex: 0} {vesselServiceIndex: 1, vesselServiceLegIndex: 1} berarti bahwa setiap kontainer yang terdapat di dalam sebuah siklus dari layanan pertama (berturut-turut) akan menjadi wadah pada layanan yang berurutan (dari 2 buah siklus secara berurutan).
Representasi JSON |
---|
{ "vesselServiceIndex": integer, "vesselServiceLegIndex": integer } |
Kolom | |
---|---|
vesselServiceIndex |
Indeks layanan kapal. |
vesselServiceLegIndex |
Indeks segmen dari layanan kapal yang diindeks oleh |