Method: shipping.designShippingNetwork

แก้ปัญหาการออกแบบเครือข่ายการจัดส่งและกำหนดเวลา (LSNDSP) จาก DesignShippingNetworkRequest ที่ระบุ

LSNDSP เป็นปัญหาการเพิ่มประสิทธิภาพที่ซับซ้อนที่ต้องการค้นหาการออกแบบและการวางกำหนดเวลาที่เหมาะสมของเครือข่ายการจัดส่งเรือเดินสมุทร เป้าหมายคือการลดค่าใช้จ่ายรวมในการดำเนินงานเครือข่าย พร้อมกับตอบสนองความต้องการสินค้าระหว่างพอร์ตให้ได้มากที่สุด

LSNDSP สามารถแบ่งออกเป็น 2 ปัญหาหลัก ได้แก่ การออกแบบเครือข่ายและการตั้งเวลา ปัญหาย่อยของการออกแบบเครือข่ายจะกำหนดชุดพอร์ตที่เครือข่ายจะให้บริการ จำนวนเรือที่จะติดตั้งใช้งานในแต่ละเส้นทาง และเส้นทางที่เรือจะใช้งาน ปัญหาย่อยด้านการตั้งเวลาจะกำหนดตารางเวลาเดินเรือ โดยพิจารณาจากเวลาที่ใช้ในการเดินเรือระหว่างท่าเรือ เวลาที่ใช้ในการโหลดและนำสินค้าขึ้นบรรทุกสินค้า และความต้องการในการขนส่งสินค้าระหว่างท่าเรือ

กล่าวง่ายๆ ก็คือ LSNDSP คือปัญหาเรื่องการตัดสินใจว่าจะให้บริการท่าเรือใด จำนวนเรือที่จะใช้ และวิธีกำหนดเวลาจัดส่ง เพื่อให้สามารถลดค่าใช้จ่ายในการดำเนินงานเครือข่ายลงไปพร้อมกับเพิ่มรายได้สูงสุดสำหรับการตอบสนองความต้องการสินค้า องค์ประกอบย่อยที่ท้าทายของ LSNDSP คือเส้นทางการส่งสินค้า ซึ่งกำหนดความต้องการที่จะตอบสนอง และเส้นทางที่จะมอบหมายให้กับการขนส่งสินค้าเพื่อเพิ่มรายได้สูงสุด

คำขอ HTTP

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

URL ใช้ไวยากรณ์การแปลง gRPC

เนื้อหาของคำขอ

เนื้อหาของคำขอมีข้อมูลที่มีโครงสร้างต่อไปนี้

การแสดง JSON
{
  "requestId": string,
  "solverParameters": {
    object (SolverParameters)
  },
  "ports": [
    {
      object (Port)
    }
  ],
  "legCandidates": [
    {
      object (LegCandidate)
    }
  ],
  "vesselClasses": [
    {
      object (VesselClass)
    }
  ],
  "commodityDemands": [
    {
      object (CommodityDemand)
    }
  ],
  "vesselServices": [
    {
      object (VesselService)
    }
  ]
}
ช่อง
requestId

string

ปัญหาหรือ ID คำขอ

solverParameters

object (SolverParameters)

พารามิเตอร์สําหรับเครื่องมือแก้โจทย์

ports[]

object (Port)

รายการพอร์ตที่เป็นไปได้ที่จะเรียกใช้ในบริการเรือ คำขอต้องมีรหัสพอร์ตที่อยู่ในรายการนี้เท่านั้น

legCandidates[]

object (LegCandidate)

รายชื่อผู้สมัครรับเลือกตั้งที่อาจได้เพิ่มลงในบริการเรือ คำขอต้องมีเฉพาะรหัสผู้สมัครขาที่อยู่ในรายการนี้

vesselClasses[]

object (VesselClass)

รายชื่อประเภทเรือที่ให้บริการเดินเรือ โปรดทราบว่าเรือทั้งหมดจากประเภทเดียวกันนั้นใช้สลับสับเปลี่ยนกันได้โดยสิ้นเชิง คำขอต้องมีเฉพาะรหัสคลาสเรือที่อยู่ในรายการนี้

commodityDemands[]

object (CommodityDemand)

รายการความต้องการสินค้าโภคภัณฑ์ (เช่น ตู้คอนเทนเนอร์) ที่บริการเรือจะดำเนินการให้สำเร็จ

vesselServices[]

object (VesselService)

คุณระบุเครือข่ายบริการเรือที่ใช้ได้ (โดยทั่วไปคือสถานะปัจจุบันของเครือข่าย) เพื่อใช้เป็นจุดเริ่มต้นสำหรับการเพิ่มประสิทธิภาพได้

เนื้อหาการตอบกลับ

การตอบกลับจะเก็บโซลูชันของอินสแตนซ์ LSNDSP ที่ส่งในคำขอ เครือข่ายนี้ประกอบด้วยเครือข่ายบริการเรือและบริการเส้นทางความต้องการสินค้าโภคภัณฑ์ที่ถูกต้อง ความต้องการสินค้าโภคภัณฑ์ทั้งหมดที่เดินทางผ่านแต่ละขาจะต้องไม่เกินความจุของชั้นของเรือที่ให้บริการขนส่งลำนี้ โปรดทราบว่าการไม่มีบริการเรือที่ไม่มีความต้องการทางเรือเป็นวิธีแก้ปัญหาด้านการออกแบบเครือข่ายการจัดส่งและการจัดตารางเวลาที่เป็นไปได้เสมอ

หากทำสำเร็จ เนื้อหาการตอบกลับจะมีข้อมูลซึ่งมีโครงสร้างดังต่อไปนี้

การแสดง JSON
{
  "requestId": string,
  "vesselServices": [
    {
      object (VesselService)
    }
  ],
  "commodityDemandPaths": [
    {
      object (CommodityDemandPath)
    }
  ]
}
ช่อง
requestId

string

รหัสของคำขอที่เชื่อมโยงกับคำตอบนี้

vesselServices[]

object (VesselService)

เครือข่ายการให้บริการเรือ สำหรับประเภทเรือแต่ละชั้น จำนวนเรือทั้งหมดที่ใช้ต้องไม่เกินจำนวนเรือที่พร้อมให้บริการสำหรับชั้นนั้นๆ

commodityDemandPaths[]

object (CommodityDemandPath)

รายการเส้นทางของความต้องการสินค้าโภคภัณฑ์ทั้งหมดที่จัดส่งอุปสงค์โภคภัณฑ์เชิงบวก โปรดทราบว่าอาจไม่มีรหัสดีมานด์สินค้าโภคภัณฑ์บางรหัสหากไม่มีการจัดส่งดีมานด์ หรือจะตอบสนองความต้องการสินค้าโภคภัณฑ์เพียงบางส่วนก็ได้ สำหรับความต้องการสินค้าโภคภัณฑ์แต่ละรายการ จำนวนที่ดำเนินการทั้งหมดต้องไม่เกินความต้องการทั้งหมด สุดท้าย commodityDemandPaths ขึ้นอยู่กับ vesselServices (ดูคำจำกัดความของ CommodityDemandPath)

SolverParameters

พารามิเตอร์ที่ควบคุมการแก้โจทย์เพียงครั้งเดียวของ LSNDSP

การแสดง JSON
{
  "timeLimit": string
}
ช่อง
timeLimit

string (Duration format)

ระยะเวลาสูงสุดที่เครื่องมือแก้โจทย์ควรใช้กับโจทย์ ค่านี้ไม่ใช่ค่าจำกัดแบบเข้มงวด และไม่ได้พิจารณาค่าใช้จ่ายในการสื่อสาร เวลาในการตอบสนองที่คาดไว้ในการแก้ปัญหาอาจเกินค่านี้เล็กน้อย

ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" ตัวอย่างเช่น "3.5s"

พอร์ต

พอร์ต เช่น ขั้วปลายสายไฟหรือขั้วปลายสายไฟทั้งหมดของพอร์ต

การแสดง JSON
{
  "id": string,
  "minimumPortStayDuration": {
    object (Duration)
  },
  "minimumTransshipmentDuration": {
    object (Duration)
  },
  "transshipmentCost": number,
  "vesselClassCosts": {
    string: {
      object (VesselCost)
    },
    ...
  }
}
ช่อง
id

string

รหัสที่ไม่ซ้ำกันที่กำหนดให้พอร์ตนี้

minimumPortStayDuration

object (Duration)

ระยะเวลาการเข้าพักขั้นต่ำสําหรับการโทรย้าย การศึกษาส่วนใหญ่จะถือว่าค่าคงที่เนื่องจากโดยทั่วไปแล้วพอร์ตจะมอบหมายเครนเพิ่มเติมให้กับเรือขนาดใหญ่ที่มีจำนวนการเคลื่อนที่สูง เนื่องจากมีการใช้พื้นที่มากกว่า

minimumTransshipmentDuration

object (Duration)

ระยะเวลาขั้นต่ำของการจัดส่งสินค้า ณ ท่าเรือหนึ่งๆ รวมถึงระยะเวลายกเลิกการโหลดคอนเทนเนอร์และโหลดลงเรืออื่น

transshipmentCost

number

ค่าใช้จ่ายในการขนส่งคอนเทนเนอร์ โดยทั่วไปจำนวนเงินนี้จะต่ำกว่ายอดรวมของการขนย้ายและการปลดประจำการเนื่องจากการขนส่งทางบกไม่จำเป็นต้องใช้เอกสารศุลกากรที่ท่าเรือ

vesselClassCosts

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

ค่าใช้จ่ายที่เกิดขึ้นเมื่อเรียกใช้พอร์ตนี้แมปด้วยรหัสชั้นของเรือ ชั้นเรือจะเรียกท่าเรือนี้ได้ก็ต่อเมื่อมีข้อมูลที่อยู่ในแผนที่นี้เท่านั้น

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่างเช่น { "name": "wrench", "mass": "1.3kg", "count": "3" }

ระยะเวลา

ระยะเวลา (การเข้าพักพอร์ต/การขนส่ง การขนส่งเพื่อความต้องการ) จะกำหนดเป็นรายละเอียดรายชั่วโมง

การแสดง JSON
{
  "hours": string
}
ช่อง
hours

string (int64 format)

จำนวนชั่วโมงที่กำหนดระยะเวลา

VesselCost

ค่าขนส่งสำหรับการโทรและการอยู่ที่พอร์ตนี้คือฟังก์ชันเชิงเส้นของระยะเวลาการเข้าพัก (fixedCost + hourlyCost * ชั่วโมง)

การแสดง JSON
{
  "fixedCost": number,
  "hourlyCost": number
}
ช่อง
fixedCost

number

ค่าใช้จ่ายคงที่สำหรับการเรียกใช้พอร์ตนี้

hourlyCost

number

ค่าใช้จ่ายรายชั่วโมงสำหรับการเข้าพักที่ท่าเรือนี้

LegCandidate

ผู้สมัครบริการเรือ อาจมีตัวเลือกขาได้หลายตัวระหว่าง 2 พอร์ตเดียวกัน เช่น แสดงเส้นทางมหาสมุทรและ/หรือความเร็วเรือต่างๆ

การแสดง JSON
{
  "id": string,
  "departurePortId": string,
  "arrivalPortId": string,
  "duration": {
    object (Duration)
  },
  "vesselClassCosts": {
    string: number,
    ...
  }
}
ช่อง
id

string

รหัสที่ไม่ซ้ำกันที่กำหนดให้ผู้สมัครรับเลือกตั้งรายนี้

departurePortId

string

รหัสของพอร์ตขาออก

arrivalPortId

string

รหัสของพอร์ตขาเข้า

duration

object (Duration)

ระยะเวลาของขา

vesselClassCosts

map (key: string, value: number)

ค่าใช้จ่ายสำหรับการมอบหมายผู้สมัครรับเลือกตั้งขารายนี้ไปยังเรือประเภทหนึ่งๆ ซึ่งอาจรวมถึงค่าดำเนินการของเรือ ค่าหลุมหลบภัย ค่าเช่าเหมาลำ เรือประเภทหนึ่งๆ จะแล่นผ่านได้เฉพาะผู้สมัครขานี้เท่านั้นในกรณีที่มีการลงเรือในแผนที่นี้

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่างเช่น { "name": "wrench", "mass": "1.3kg", "count": "3" }

VesselClass

ประเภทเรือ ซึ่งก็คือ กลุ่มเรือที่ใช้ร่วมกันสถานที่เดียวกัน ไม่มีวิธีแยกความแตกต่างระหว่างเรือ 2 ลำจากชั้นเดียวกัน

การแสดง JSON
{
  "id": string,
  "containerCapacity": string,
  "vesselCount": string
}
ช่อง
id

string

รหัสที่ไม่ซ้ำกันที่กำหนดให้กับประเภทเรือนี้

containerCapacity

string (int64 format)

ความจุของคลาสเรือ (ในคอนเทนเนอร์)

vesselCount

string (int64 format)

จำนวนเรือในชั้นเรือนี้

CommodityDemand

ความต้องการสินค้าโภคภัณฑ์ ซึ่งก็คือความต้องการที่อาจจะเกิดขึ้นโดยผู้จัดส่ง

การแสดง JSON
{
  "id": string,
  "originPortId": string,
  "destinationPortId": string,
  "containerCount": string,
  "freightRate": number,
  "maximumTransitDuration": {
    object (Duration)
  }
}
ช่อง
id

string

รหัสที่ไม่ซ้ำกันที่กำหนดให้สำหรับความต้องการสินค้าโภคภัณฑ์นี้

originPortId

string

รหัสของพอร์ตต้นทาง

destinationPortId

string

รหัสของพอร์ตปลายทาง

containerCount

string (int64 format)

จำนวนคอนเทนเนอร์สูงสุดที่จะบรรลุผล

freightRate

number

อัตราค่าระวางต่อคอนเทนเนอร์ (ซึ่งอาจมีค่าปรับสำหรับความต้องการที่ไม่ได้รับคำสั่งซื้อ) ควรลดต้นทุนในการโหลดและการคายประจุต่อคอนเทนเนอร์ที่ต้นทางและปลายทาง

maximumTransitDuration

object (Duration)

ระยะเวลาสูงสุดในการขนส่ง (หากตั้งค่าไว้ ควรเป็นค่าบวกสูงสุด) เวลาขนส่งกำหนดจากเวลาที่เรือลำแรกที่ให้บริการความต้องการนี้ออกจากท่าเรือต้นทางจนถึงเวลาที่เรือลำสุดท้ายที่ให้บริการความต้องการนี้มาถึงท่าเรือปลายทาง

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 (VesselServiceLeg)
    }
  ]
}
ช่อง
vesselClassId

string

รหัสคลาสเรือที่ดำเนินการบริการ

vesselServiceLegs[]

object (VesselServiceLeg)

สำหรับบริการเรือที่ถูกต้อง พร็อพเพอร์ตี้ต่อไปนี้จะมี 1. ต้องระบุ 2. ติดต่อกัน ปลายทางPortId และ sourcePortId ต้องตรงกัน (รวมถึงค่าสำหรับช่วงเวลาสุดท้ายและขาแรก)

VesselServiceLeg

บริการเรือที่ใช้ขาเดียว

การแสดง JSON
{
  "legCandidateId": string,
  "originDepartureTime": {
    object (ScheduleTime)
  },
  "destinationArrivalTime": {
    object (ScheduleTime)
  }
}
ช่อง
legCandidateId

string

รหัสผู้สมัครรับเลือกตั้งขาประจำที่กำหนด

originDepartureTime

object (ScheduleTime)

เวลาออกเดินทางที่พอร์ตต้นทางตามกำหนดการรายสัปดาห์

destinationArrivalTime

object (ScheduleTime)

เวลาที่มาถึงพอร์ตปลายทางตามกำหนดการรายสัปดาห์

ScheduleTime

ตารางเวลา (เรือเดินสมุทร/เรือที่ต้องการให้เดินทาง/มาถึง) กำหนดไว้เป็นความถี่รายสัปดาห์ในชั่วโมงหนึ่งๆ

การแสดง JSON
{
  "day": string,
  "hourOfDay": integer
}
ช่อง
day

string (int64 format)

วันตามกำหนดเวลา วันที่ 0 คือวันแรกที่เป็นไปได้

hourOfDay

integer

ชั่วโมงของวันตามตารางเวลาควรเป็นจำนวนเต็มระหว่าง 0 ถึง 23

CommodityDemandPath

บริการและท่าเรือต่างๆ ที่ความต้องการสินค้าโภคภัณฑ์เพียงส่วนหนึ่งใช้อยู่ ดัชนีที่ใช้ด้านล่างนี้อิงตามลำดับของการให้บริการเรือในการตอบสนองและลำดับการให้บริการในเรือแต่ละรายการ

การแสดง JSON
{
  "commodityDemandId": string,
  "containerCount": string,
  "vesselServiceLegIds": [
    {
      object (VesselServiceLegId)
    }
  ]
}
ช่อง
commodityDemandId

string

ดําเนินการตามรหัสดีมานด์สินค้าโภคภัณฑ์แล้ว

containerCount

string (int64 format)

จำนวนคอนเทนเนอร์ที่ผ่านเส้นทางนี้ สำหรับความต้องการสินค้าโภคภัณฑ์แต่ละรายการ จำนวนที่ดำเนินการทั้งหมดต้องไม่เกินความต้องการทั้งหมด

vesselServiceLegIds[]

object (VesselServiceLegId)

รายการรหัสขาประจำเรือที่ใช้ผ่านเส้นทางนี้ สําหรับเส้นทางดีมานด์ด้านสินค้าโภคภัณฑ์ที่ถูกต้อง พร็อพเพอร์ตี้ต่อไปนี้จะมี 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

integer

ดัชนีของบริการเรือ

vesselServiceLegIndex

integer

ดัชนีของขาจากบริการเรือจัดทำดัชนีตาม vesselServiceIndex