แก้ปัญหาการออกแบบเครือข่ายการจัดส่งและกำหนดเวลา (LSNDSP) จาก DesignShippingNetworkRequest
ที่ระบุ
LSNDSP เป็นปัญหาการเพิ่มประสิทธิภาพที่ซับซ้อนที่ต้องการค้นหาการออกแบบและการวางกำหนดเวลาที่เหมาะสมของเครือข่ายการจัดส่งเรือเดินสมุทร เป้าหมายคือการลดค่าใช้จ่ายรวมในการดำเนินงานเครือข่าย พร้อมกับตอบสนองความต้องการสินค้าระหว่างพอร์ตให้ได้มากที่สุด
LSNDSP สามารถแบ่งออกเป็น 2 ปัญหาหลัก ได้แก่ การออกแบบเครือข่ายและการตั้งเวลา ปัญหาย่อยของการออกแบบเครือข่ายจะกำหนดชุดพอร์ตที่เครือข่ายจะให้บริการ จำนวนเรือที่จะติดตั้งใช้งานในแต่ละเส้นทาง และเส้นทางที่เรือจะใช้งาน ปัญหาย่อยด้านการตั้งเวลาจะกำหนดตารางเวลาเดินเรือ โดยพิจารณาจากเวลาที่ใช้ในการเดินเรือระหว่างท่าเรือ เวลาที่ใช้ในการโหลดและนำสินค้าขึ้นบรรทุกสินค้า และความต้องการในการขนส่งสินค้าระหว่างท่าเรือ
กล่าวง่ายๆ ก็คือ LSNDSP คือปัญหาเรื่องการตัดสินใจว่าจะให้บริการท่าเรือใด จำนวนเรือที่จะใช้ และวิธีกำหนดเวลาจัดส่ง เพื่อให้สามารถลดค่าใช้จ่ายในการดำเนินงานเครือข่ายลงไปพร้อมกับเพิ่มรายได้สูงสุดสำหรับการตอบสนองความต้องการสินค้า องค์ประกอบย่อยที่ท้าทายของ LSNDSP คือเส้นทางการส่งสินค้า ซึ่งกำหนดความต้องการที่จะตอบสนอง และเส้นทางที่จะมอบหมายให้กับการขนส่งสินค้าเพื่อเพิ่มรายได้สูงสุด
คำขอ HTTP
POST https://optimization.googleapis.com/v1/shipping:designShippingNetwork
URL ใช้ไวยากรณ์การแปลง gRPC
เนื้อหาของคำขอ
เนื้อหาของคำขอมีข้อมูลที่มีโครงสร้างต่อไปนี้
การแสดง JSON |
---|
{ "requestId": string, "solverParameters": { object ( |
ช่อง | |
---|---|
requestId |
ปัญหาหรือ ID คำขอ |
solverParameters |
พารามิเตอร์สําหรับเครื่องมือแก้โจทย์ |
ports[] |
รายการพอร์ตที่เป็นไปได้ที่จะเรียกใช้ในบริการเรือ คำขอต้องมีรหัสพอร์ตที่อยู่ในรายการนี้เท่านั้น |
legCandidates[] |
รายชื่อผู้สมัครรับเลือกตั้งที่อาจได้เพิ่มลงในบริการเรือ คำขอต้องมีเฉพาะรหัสผู้สมัครขาที่อยู่ในรายการนี้ |
vesselClasses[] |
รายชื่อประเภทเรือที่ให้บริการเดินเรือ โปรดทราบว่าเรือทั้งหมดจากประเภทเดียวกันนั้นใช้สลับสับเปลี่ยนกันได้โดยสิ้นเชิง คำขอต้องมีเฉพาะรหัสคลาสเรือที่อยู่ในรายการนี้ |
commodityDemands[] |
รายการความต้องการสินค้าโภคภัณฑ์ (เช่น ตู้คอนเทนเนอร์) ที่บริการเรือจะดำเนินการให้สำเร็จ |
vesselServices[] |
คุณระบุเครือข่ายบริการเรือที่ใช้ได้ (โดยทั่วไปคือสถานะปัจจุบันของเครือข่าย) เพื่อใช้เป็นจุดเริ่มต้นสำหรับการเพิ่มประสิทธิภาพได้ |
เนื้อหาการตอบกลับ
การตอบกลับจะเก็บโซลูชันของอินสแตนซ์ LSNDSP ที่ส่งในคำขอ เครือข่ายนี้ประกอบด้วยเครือข่ายบริการเรือและบริการเส้นทางความต้องการสินค้าโภคภัณฑ์ที่ถูกต้อง ความต้องการสินค้าโภคภัณฑ์ทั้งหมดที่เดินทางผ่านแต่ละขาจะต้องไม่เกินความจุของชั้นของเรือที่ให้บริการขนส่งลำนี้ โปรดทราบว่าการไม่มีบริการเรือที่ไม่มีความต้องการทางเรือเป็นวิธีแก้ปัญหาด้านการออกแบบเครือข่ายการจัดส่งและการจัดตารางเวลาที่เป็นไปได้เสมอ
หากทำสำเร็จ เนื้อหาการตอบกลับจะมีข้อมูลซึ่งมีโครงสร้างดังต่อไปนี้
การแสดง JSON |
---|
{ "requestId": string, "vesselServices": [ { object ( |
ช่อง | |
---|---|
requestId |
รหัสของคำขอที่เชื่อมโยงกับคำตอบนี้ |
vesselServices[] |
เครือข่ายการให้บริการเรือ สำหรับประเภทเรือแต่ละชั้น จำนวนเรือทั้งหมดที่ใช้ต้องไม่เกินจำนวนเรือที่พร้อมให้บริการสำหรับชั้นนั้นๆ |
commodityDemandPaths[] |
รายการเส้นทางของความต้องการสินค้าโภคภัณฑ์ทั้งหมดที่จัดส่งอุปสงค์โภคภัณฑ์เชิงบวก โปรดทราบว่าอาจไม่มีรหัสดีมานด์สินค้าโภคภัณฑ์บางรหัสหากไม่มีการจัดส่งดีมานด์ หรือจะตอบสนองความต้องการสินค้าโภคภัณฑ์เพียงบางส่วนก็ได้ สำหรับความต้องการสินค้าโภคภัณฑ์แต่ละรายการ จำนวนที่ดำเนินการทั้งหมดต้องไม่เกินความต้องการทั้งหมด สุดท้าย commodityDemandPaths ขึ้นอยู่กับ vesselServices (ดูคำจำกัดความของ CommodityDemandPath) |
SolverParameters
พารามิเตอร์ที่ควบคุมการแก้โจทย์เพียงครั้งเดียวของ LSNDSP
การแสดง JSON |
---|
{ "timeLimit": string } |
ช่อง | |
---|---|
timeLimit |
ระยะเวลาสูงสุดที่เครื่องมือแก้โจทย์ควรใช้กับโจทย์ ค่านี้ไม่ใช่ค่าจำกัดแบบเข้มงวด และไม่ได้พิจารณาค่าใช้จ่ายในการสื่อสาร เวลาในการตอบสนองที่คาดไว้ในการแก้ปัญหาอาจเกินค่านี้เล็กน้อย ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย " |
พอร์ต
พอร์ต เช่น ขั้วปลายสายไฟหรือขั้วปลายสายไฟทั้งหมดของพอร์ต
การแสดง JSON |
---|
{ "id": string, "minimumPortStayDuration": { object ( |
ช่อง | |
---|---|
id |
รหัสที่ไม่ซ้ำกันที่กำหนดให้พอร์ตนี้ |
minimumPortStayDuration |
ระยะเวลาการเข้าพักขั้นต่ำสําหรับการโทรย้าย การศึกษาส่วนใหญ่จะถือว่าค่าคงที่เนื่องจากโดยทั่วไปแล้วพอร์ตจะมอบหมายเครนเพิ่มเติมให้กับเรือขนาดใหญ่ที่มีจำนวนการเคลื่อนที่สูง เนื่องจากมีการใช้พื้นที่มากกว่า |
minimumTransshipmentDuration |
ระยะเวลาขั้นต่ำของการจัดส่งสินค้า ณ ท่าเรือหนึ่งๆ รวมถึงระยะเวลายกเลิกการโหลดคอนเทนเนอร์และโหลดลงเรืออื่น |
transshipmentCost |
ค่าใช้จ่ายในการขนส่งคอนเทนเนอร์ โดยทั่วไปจำนวนเงินนี้จะต่ำกว่ายอดรวมของการขนย้ายและการปลดประจำการเนื่องจากการขนส่งทางบกไม่จำเป็นต้องใช้เอกสารศุลกากรที่ท่าเรือ |
vesselClassCosts |
ค่าใช้จ่ายที่เกิดขึ้นเมื่อเรียกใช้พอร์ตนี้แมปด้วยรหัสชั้นของเรือ ชั้นเรือจะเรียกท่าเรือนี้ได้ก็ต่อเมื่อมีข้อมูลที่อยู่ในแผนที่นี้เท่านั้น ออบเจ็กต์ที่มีรายการคู่ |
ระยะเวลา
ระยะเวลา (การเข้าพักพอร์ต/การขนส่ง การขนส่งเพื่อความต้องการ) จะกำหนดเป็นรายละเอียดรายชั่วโมง
การแสดง JSON |
---|
{ "hours": string } |
ช่อง | |
---|---|
hours |
จำนวนชั่วโมงที่กำหนดระยะเวลา |
VesselCost
ค่าขนส่งสำหรับการโทรและการอยู่ที่พอร์ตนี้คือฟังก์ชันเชิงเส้นของระยะเวลาการเข้าพัก (fixedCost
+ hourlyCost
* ชั่วโมง)
การแสดง JSON |
---|
{ "fixedCost": number, "hourlyCost": number } |
ช่อง | |
---|---|
fixedCost |
ค่าใช้จ่ายคงที่สำหรับการเรียกใช้พอร์ตนี้ |
hourlyCost |
ค่าใช้จ่ายรายชั่วโมงสำหรับการเข้าพักที่ท่าเรือนี้ |
LegCandidate
ผู้สมัครบริการเรือ อาจมีตัวเลือกขาได้หลายตัวระหว่าง 2 พอร์ตเดียวกัน เช่น แสดงเส้นทางมหาสมุทรและ/หรือความเร็วเรือต่างๆ
การแสดง JSON |
---|
{
"id": string,
"departurePortId": string,
"arrivalPortId": string,
"duration": {
object ( |
ช่อง | |
---|---|
id |
รหัสที่ไม่ซ้ำกันที่กำหนดให้ผู้สมัครรับเลือกตั้งรายนี้ |
departurePortId |
รหัสของพอร์ตขาออก |
arrivalPortId |
รหัสของพอร์ตขาเข้า |
duration |
ระยะเวลาของขา |
vesselClassCosts |
ค่าใช้จ่ายสำหรับการมอบหมายผู้สมัครรับเลือกตั้งขารายนี้ไปยังเรือประเภทหนึ่งๆ ซึ่งอาจรวมถึงค่าดำเนินการของเรือ ค่าหลุมหลบภัย ค่าเช่าเหมาลำ เรือประเภทหนึ่งๆ จะแล่นผ่านได้เฉพาะผู้สมัครขานี้เท่านั้นในกรณีที่มีการลงเรือในแผนที่นี้ ออบเจ็กต์ที่มีรายการคู่ |
VesselClass
ประเภทเรือ ซึ่งก็คือ กลุ่มเรือที่ใช้ร่วมกันสถานที่เดียวกัน ไม่มีวิธีแยกความแตกต่างระหว่างเรือ 2 ลำจากชั้นเดียวกัน
การแสดง JSON |
---|
{ "id": string, "containerCapacity": string, "vesselCount": string } |
ช่อง | |
---|---|
id |
รหัสที่ไม่ซ้ำกันที่กำหนดให้กับประเภทเรือนี้ |
containerCapacity |
ความจุของคลาสเรือ (ในคอนเทนเนอร์) |
vesselCount |
จำนวนเรือในชั้นเรือนี้ |
CommodityDemand
ความต้องการสินค้าโภคภัณฑ์ ซึ่งก็คือความต้องการที่อาจจะเกิดขึ้นโดยผู้จัดส่ง
การแสดง JSON |
---|
{
"id": string,
"originPortId": string,
"destinationPortId": string,
"containerCount": string,
"freightRate": number,
"maximumTransitDuration": {
object ( |
ช่อง | |
---|---|
id |
รหัสที่ไม่ซ้ำกันที่กำหนดให้สำหรับความต้องการสินค้าโภคภัณฑ์นี้ |
originPortId |
รหัสของพอร์ตต้นทาง |
destinationPortId |
รหัสของพอร์ตปลายทาง |
containerCount |
จำนวนคอนเทนเนอร์สูงสุดที่จะบรรลุผล |
freightRate |
อัตราค่าระวางต่อคอนเทนเนอร์ (ซึ่งอาจมีค่าปรับสำหรับความต้องการที่ไม่ได้รับคำสั่งซื้อ) ควรลดต้นทุนในการโหลดและการคายประจุต่อคอนเทนเนอร์ที่ต้นทางและปลายทาง |
maximumTransitDuration |
ระยะเวลาสูงสุดในการขนส่ง (หากตั้งค่าไว้ ควรเป็นค่าบวกสูงสุด) เวลาขนส่งกำหนดจากเวลาที่เรือลำแรกที่ให้บริการความต้องการนี้ออกจากท่าเรือต้นทางจนถึงเวลาที่เรือลำสุดท้ายที่ให้บริการความต้องการนี้มาถึงท่าเรือปลายทาง |
VesselService
บริการเรือที่ใช้ในการให้บริการสินค้าโภคภัณฑ์ได้ สำคัญ: สมมติฐานหนึ่งในปัจจุบันคือบริการต่างๆ ใช้ความถี่รายสัปดาห์ และเวลาการเข้าพักพอร์ตต้องไม่เกิน 1 สัปดาห์ พิจารณาลำดับของบริการเรือดังต่อไปนี้: vesselServiceLegs { legCandidateId: "0->1" originDepartureTime {} destinationArrivalTime { day: 3 hourOfDay: 12 } } vesselServiceLegs { legCandidateId: "1->0" originDepartureTime { day: 4 }destinationArrivalTime { day: 7hoursOfDay: 12 } } เส้นทางเหล่านี้กำหนดสายบริการ 1 สัปดาห์ที่จะเดินทางผ่าน 2 พอร์ต โดยทั้งสองพอร์ตมีเวลา 12 ชั่วโมง
การแสดง JSON |
---|
{
"vesselClassId": string,
"vesselServiceLegs": [
{
object ( |
ช่อง | |
---|---|
vesselClassId |
รหัสคลาสเรือที่ดำเนินการบริการ |
vesselServiceLegs[] |
สำหรับบริการเรือที่ถูกต้อง พร็อพเพอร์ตี้ต่อไปนี้จะมี 1. ต้องระบุ 2. ติดต่อกัน ปลายทางPortId และ sourcePortId ต้องตรงกัน (รวมถึงค่าสำหรับช่วงเวลาสุดท้ายและขาแรก) |
VesselServiceLeg
บริการเรือที่ใช้ขาเดียว
การแสดง JSON |
---|
{ "legCandidateId": string, "originDepartureTime": { object ( |
ช่อง | |
---|---|
legCandidateId |
รหัสผู้สมัครรับเลือกตั้งขาประจำที่กำหนด |
originDepartureTime |
เวลาออกเดินทางที่พอร์ตต้นทางตามกำหนดการรายสัปดาห์ |
destinationArrivalTime |
เวลาที่มาถึงพอร์ตปลายทางตามกำหนดการรายสัปดาห์ |
ScheduleTime
ตารางเวลา (เรือเดินสมุทร/เรือที่ต้องการให้เดินทาง/มาถึง) กำหนดไว้เป็นความถี่รายสัปดาห์ในชั่วโมงหนึ่งๆ
การแสดง JSON |
---|
{ "day": string, "hourOfDay": integer } |
ช่อง | |
---|---|
day |
วันตามกำหนดเวลา วันที่ 0 คือวันแรกที่เป็นไปได้ |
hourOfDay |
ชั่วโมงของวันตามตารางเวลาควรเป็นจำนวนเต็มระหว่าง 0 ถึง 23 |
CommodityDemandPath
บริการและท่าเรือต่างๆ ที่ความต้องการสินค้าโภคภัณฑ์เพียงส่วนหนึ่งใช้อยู่ ดัชนีที่ใช้ด้านล่างนี้อิงตามลำดับของการให้บริการเรือในการตอบสนองและลำดับการให้บริการในเรือแต่ละรายการ
การแสดง JSON |
---|
{
"commodityDemandId": string,
"containerCount": string,
"vesselServiceLegIds": [
{
object ( |
ช่อง | |
---|---|
commodityDemandId |
ดําเนินการตามรหัสดีมานด์สินค้าโภคภัณฑ์แล้ว |
containerCount |
จำนวนคอนเทนเนอร์ที่ผ่านเส้นทางนี้ สำหรับความต้องการสินค้าโภคภัณฑ์แต่ละรายการ จำนวนที่ดำเนินการทั้งหมดต้องไม่เกินความต้องการทั้งหมด |
vesselServiceLegIds[] |
รายการรหัสขาประจำเรือที่ใช้ผ่านเส้นทางนี้ สําหรับเส้นทางดีมานด์ด้านสินค้าโภคภัณฑ์ที่ถูกต้อง พร็อพเพอร์ตี้ต่อไปนี้จะมี 1. OutboundPortId ของเที่ยวบินแรกต้องตรงกับ sourcePortId ของอุปสงค์สินค้าโภคภัณฑ์ 2. ปลายทาง PortId ของขาสุดท้ายต้องตรงกับdestinationPortId ของความต้องการสินค้าโภคภัณฑ์ 3. ติดต่อกัน successPortId และ departurePortId ต้องตรงกัน 4. หากระบุไว้สำหรับความต้องการสินค้านี้ เวลาขนส่งสูงสุดควรมากกว่าหรือเท่ากับระยะเวลารวมของเส้นทาง |
VesselServiceLegId
บริการขนส่งเรือเดี่ยวที่ใช้ในเส้นทางความต้องการสินค้าโภคภัณฑ์ ตัวอย่างเช่น สมมติว่ามีบริการเรือ 2 ลำ ขาแรกประกอบด้วย 3 ขา (จัดทำดัชนี 0, 1 และ 2) และขา 2 อัน (จัดทำดัชนี 0 และ 1) นอกจากนี้ บริการเที่ยวแรกจะมาถึงที่ท่าเรือขาออกของขาที่ 2 ของบริการที่ 2 เส้นทางสินค้าโภคภัณฑ์ที่ประกอบด้วยรหัสประเภทบริการเรือ 3 รหัสต่อไปนี้: {vesselServiceIndex: 0, vesselServiceLegIndex: 2} {vesselServiceIndex: 0, vesselServiceLegIndex: 0} {vesselServiceIndex: 1, vesselServiceLegIndex: 1} หมายความว่าตู้สินค้ารับส่งที่ต่อเนื่องกัน 2 ลำ (หนึ่งเรือรับบริการจากเรือบริการหนึ่งที่ต่อกัน) เนื่องจากเรือบริการ 2 ลำเรียงต่อกันเป็นรอบเรือบริการ 1 ลำ โดยเป็นเรือที่ต่อกัน 2 ลำ โดยเป็นเรือที่ต่อกัน 2 ลำ โดยเป็นเรือที่ต่อกัน 2 ลำ โดยเป็นเรือที่ต่อกัน 2 ลำ โดยเป็นเรือที่ต่อกัน 2 ลำ โดยเป็นเรือที่ต่อกัน 2 ลำ โดยเป็นเรือที่ต่อกัน 2 ลำ โดยเป็นเรือที่ต่อกันเป็นเรือบริการ 2 ลำ คือ 1 เส้นทางที่ประกอบด้วยรหัสประเภทบริการเรือ 3 รหัสดังต่อไปนี้
การแสดง JSON |
---|
{ "vesselServiceIndex": integer, "vesselServiceLegIndex": integer } |
ช่อง | |
---|---|
vesselServiceIndex |
ดัชนีของบริการเรือ |
vesselServiceLegIndex |
ดัชนีของขาจากบริการเรือจัดทำดัชนีตาม |