Method: shipping.designShippingNetwork

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 (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 kapal. 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 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[]

object (CommodityDemand)

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

vesselServices[]

object (VesselService)

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 (VesselService)
    }
  ],
  "commodityDemandPaths": [
    {
      object (CommodityDemandPath)
    }
  ]
}
Kolom
requestId

string

ID permintaan yang dikaitkan 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 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

string (Duration format)

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 's'. Contoh: "3.5s".

Port

Port, misalnya terminal atau semua terminal porta.

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. 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

object (Duration)

Durasi minimum pengangkutan pada pelabuhan tertentu, termasuk durasi bongkar muat kontainer dan memuatnya kembali ke kapal lain.

transshipmentCost

number

Biaya transpengiriman container. Biaya ini biasanya akan lebih rendah daripada jumlah pemuatan dan pengeluaran karena pengiriman tidak memerlukan dokumen bea cukai di pelabuhan.

vesselClassCosts

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

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 "key": value. Contoh: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

Durasi

Durasi (masa tinggal/pengiriman port, transit permintaan) ditentukan dalam perincian per jam.

Representasi JSON
{
  "hours": string
}
Kolom
hours

string (int64 format)

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

number

Biaya tetap untuk memanggil port ini.

hourlyCost

number

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 (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 kaki.

vesselClassCosts

map (key: string, value: number)

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 "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 porta tujuan.

containerCount

string (int64 format)

Jumlah maksimum container yang akan dipenuhi.

freightRate

number

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

object (Duration)

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: &quot;1-&gt;0&quot; 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 (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. 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 (ScheduleTime)
  },
  "destinationArrivalTime": {
    object (ScheduleTime)
  }
}
Kolom
legCandidateId

string

ID kandidat segmen yang ditetapkan.

originDepartureTime

object (ScheduleTime)

Waktu keberangkatan di port asal pada jadwal mingguan.

destinationArrivalTime

object (ScheduleTime)

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

string (int64 format)

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

hourOfDay

integer

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 (VesselServiceLegId)
    }
  ]
}
Kolom
commodityDemandId

string

ID permintaan komoditas terpenuhi.

containerCount

string (int64 format)

Jumlah penampung yang melalui jalur ini. Untuk setiap permintaan komoditas, total kuantitas yang dipenuhi 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 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

integer

Indeks layanan kapal.

vesselServiceLegIndex

integer

Indeks segmen dari layanan kapal yang diindeks oleh vesselServiceIndex.