Method: shipping.designShippingNetwork

Giải quyết vấn đề thiết kế và lập lịch mạng vận chuyển hàng lót (LSNDSP) từ DesignShippingNetworkRequest cho trước.

LSNDSP là một vấn đề tối ưu hoá phức tạp nhằm tìm ra thiết kế và việc lên lịch tối ưu cho mạng lưới vận chuyển bằng tàu. Mục tiêu là giảm thiểu tổng chi phí vận hành mạng, đồng thời đáp ứng nhu cầu vận chuyển hàng hoá giữa các cổng nhiều nhất có thể.

LSNDSP có thể được chia thành hai vấn đề phụ chính: thiết kế mạng và lập lịch biểu. Bài toán phụ về thiết kế mạng xác định tập hợp các cảng mà mạng lưới phục vụ, số lượng tàu sẽ được triển khai trên mỗi tuyến đường và các tuyến mà tàu sẽ đi. Bài toán phụ về việc lên lịch xác định lịch trình ra khơi của các tàu khi xét đến thời gian đi giữa các cảng, thời gian xếp và dỡ hàng hoá cũng như nhu cầu vận chuyển hàng hoá giữa các cảng.

Nói một cách đơn giản, LSNDSP là vấn đề của việc quyết định cảng nào phục vụ, số lượng tàu sử dụng và cách xếp lịch cho các tàu để chi phí vận hành mạng lưới được giảm thiểu trong khi vẫn tối đa hoá doanh thu để đáp ứng nhu cầu hàng hoá. Một thành phần phụ đầy thách thức của LSNDSP là định tuyến hàng hoá, xác định nhu cầu nào cần đáp ứng và tuyến đường cần chỉ định cho hàng hoá để tối đa hoá doanh thu.

Yêu cầu HTTP

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

URL sử dụng cú pháp Chuyển mã gRPC.

Nội dung yêu cầu

Nội dung yêu cầu chứa dữ liệu có cấu trúc sau:

Biểu diễn dưới dạng JSON
{
  "requestId": string,
  "solverParameters": {
    object (SolverParameters)
  },
  "ports": [
    {
      object (Port)
    }
  ],
  "legCandidates": [
    {
      object (LegCandidate)
    }
  ],
  "vesselClasses": [
    {
      object (VesselClass)
    }
  ],
  "commodityDemands": [
    {
      object (CommodityDemand)
    }
  ],
  "vesselServices": [
    {
      object (VesselService)
    }
  ]
}
Trường
requestId

string

Mã yêu cầu hoặc sự cố có vấn đề.

solverParameters

object (SolverParameters)

Các tham số cho trình giải toán.

ports[]

object (Port)

Danh sách các cảng có thể được gọi trong các dịch vụ tàu. Yêu cầu chỉ được chứa mã cổng có trong danh sách này.

legCandidates[]

object (LegCandidate)

Danh sách các chặng chân tiềm năng để thêm vào dịch vụ tàu. Yêu cầu chỉ được chứa mã ứng cử viên chân có trong danh sách này.

vesselClasses[]

object (VesselClass)

Danh sách các loại tàu để thực hiện các dịch vụ tàu. Xin lưu ý rằng tất cả các tàu thuộc cùng một lớp hoàn toàn có thể thay thế cho nhau. Yêu cầu chỉ được chứa mã lớp tàu có trong danh sách này.

commodityDemands[]

object (CommodityDemand)

Danh sách nhu cầu về hàng hoá tiềm năng (ví dụ: công-te-nơ) cần được các dịch vụ tàu thực hiện.

vesselServices[]

object (VesselService)

Bạn có thể cung cấp một mạng lưới các dịch vụ tàu hợp lệ (thường là trạng thái hiện tại của mạng) để dùng làm điểm bắt đầu cho việc tối ưu hoá.

Nội dung phản hồi

Phản hồi này lưu giữ giải pháp cho thực thể LSNDSP được truyền trong yêu cầu. Mạng này có một mạng lưới dịch vụ tàu thuyền và đường cầu hàng hoá hợp lệ. Tổng nhu cầu hàng hoá đi qua mỗi chặng không được vượt quá sức chứa của hạng tàu đang phục vụ chặng này. Lưu ý rằng việc không có dịch vụ tàu nào không có nhu cầu được đáp ứng luôn là một giải pháp khả thi cho vấn đề về thiết kế và lập lịch vận chuyển tàu biển.

Nếu thành công, phần nội dung phản hồi sẽ chứa dữ liệu có cấu trúc sau:

Biểu diễn dưới dạng JSON
{
  "requestId": string,
  "vesselServices": [
    {
      object (VesselService)
    }
  ],
  "commodityDemandPaths": [
    {
      object (CommodityDemandPath)
    }
  ]
}
Trường
requestId

string

Mã của yêu cầu liên kết với phản hồi này.

vesselServices[]

object (VesselService)

Mạng lưới dịch vụ tàu thuyền. Đối với mỗi lớp tàu, tổng số lượng tàu được sử dụng không được vượt quá số lượng tàu hiện có của lớp này.

commodityDemandPaths[]

object (CommodityDemandPath)

Danh sách tất cả đường dẫn nhu cầu hàng hoá thông qua đó nhu cầu hàng hoá tích cực được vận chuyển. Xin lưu ý rằng một số mã nhu cầu hàng hoá có thể không được đưa vào nếu không có nhu cầu nào được vận chuyển. Mặt khác, nhu cầu hàng hoá có thể được đáp ứng một phần. Đối với mỗi nhu cầu hàng hoá, tổng số lượng thực hiện được không được vượt quá tổng nhu cầu. Cuối cùng, commodityDemandPaths phụ thuộc vào taxServices (xem định nghĩa CommodityDemandPath).

SolverParameters

Các tham số kiểm soát một lần giải quyết duy nhất của LSNDSP.

Biểu diễn dưới dạng JSON
{
  "timeLimit": string
}
Trường
timeLimit

string (Duration format)

Thời gian tối đa mà trình giải toán cần dành cho bài toán. Giá trị này không phải là giới hạn cố định và không tính đến chi phí truyền thông. Độ trễ dự kiến để giải quyết vấn đề có thể vượt quá giá trị này một chút.

Thời lượng tính bằng giây với tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

Cổng

Cổng, ví dụ: thiết bị đầu cuối hoặc tất cả các cực của một cổng.

Biểu diễn dưới dạng JSON
{
  "id": string,
  "minimumPortStayDuration": {
    object (Duration)
  },
  "minimumTransshipmentDuration": {
    object (Duration)
  },
  "transshipmentCost": number,
  "vesselClassCosts": {
    string: {
      object (VesselCost)
    },
    ...
  }
}
Trường
id

string

Mã nhận dạng duy nhất được chỉ định cho cổng này.

minimumPortStayDuration

object (Duration)

Thời gian lưu trú tối thiểu cho một cuộc gọi cổng. Hầu hết các nghiên cứu đều giả định không đổi vì các cảng thường bố trí nhiều cần cẩu hơn cho những tàu lớn có số lượng di chuyển lớn, vì chúng chiếm nhiều không gian hơn.

minimumTransshipmentDuration

object (Duration)

Thời gian tối thiểu của một quá trình trung chuyển tại một cảng nhất định, bao gồm cả thời gian dỡ một công-te-nơ và tải lại lên tàu khác.

transshipmentCost

number

Chi phí vận chuyển một công-te-nơ. Số tiền này thường thấp hơn tổng của mức tải và thải vì quá trình vận chuyển không yêu cầu giấy tờ của hải quan tại cảng.

vesselClassCosts

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

Chi phí phát sinh khi gọi cảng này được ánh xạ theo mã loại tàu. Lớp tàu chỉ có thể gọi cảng này nếu có mục nhập trong bản đồ này.

Đối tượng chứa danh sách các cặp "key": value. Ví dụ: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

Thời lượng

Thời gian (lưu trú tại cảng/vận chuyển, nhu cầu vận chuyển) được xác định theo giờ.

Biểu diễn dưới dạng JSON
{
  "hours": string
}
Trường
hours

string (int64 format)

Số giờ xác định thời lượng.

VesselCost

Chi phí tàu để gọi và lưu trú tại cảng này được xác định là hàm tuyến tính của thời gian lưu trú (fixedCost + hourlyCost * giờ).

Biểu diễn dưới dạng JSON
{
  "fixedCost": number,
  "hourlyCost": number
}
Trường
fixedCost

number

Chi phí cố định để gọi cổng này.

hourlyCost

number

Chi phí mỗi giờ lưu trú tại cảng này.

LegCandidate

Chân dịch vụ tàu thuyền. Có thể có nhiều chặng trống giữa hai cảng, ví dụ: đại diện cho các tuyến đường biển và/hoặc vận tốc khác nhau của tàu.

Biểu diễn dưới dạng JSON
{
  "id": string,
  "departurePortId": string,
  "arrivalPortId": string,
  "duration": {
    object (Duration)
  },
  "vesselClassCosts": {
    string: number,
    ...
  }
}
Trường
id

string

Mã nhận dạng duy nhất được chỉ định cho ứng viên hạng chân này.

departurePortId

string

Mã của cổng khởi hành.

arrivalPortId

string

Mã của cổng đến.

duration

object (Duration)

Thời lượng của chân.

vesselClassCosts

map (key: string, value: number)

Chi phí để chỉ định loại chân này cho một hạng tàu nhất định. Chi phí này có thể bao gồm chi phí vận hành tàu, chi phí hầm trú ẩn, chi phí thuê tàu. Một lớp tàu chỉ có thể đi thuyền qua đề xuất chân này nếu có mục nhập trong bản đồ này.

Đối tượng chứa danh sách các cặp "key": value. Ví dụ: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

VesselClass

Lớp tàu, tức là một nhóm(các) tàu có cùng tài sản. Không có cách nào để phân biệt hai tàu thuộc cùng một lớp.

Biểu diễn dưới dạng JSON
{
  "id": string,
  "containerCapacity": string,
  "vesselCount": string
}
Trường
id

string

Mã nhận dạng duy nhất được gán cho lớp tàu này.

containerCapacity

string (int64 format)

Sức chứa của tàu (tính trong vùng chứa).

vesselCount

string (int64 format)

Số lượng tàu trong lớp tàu này.

CommodityDemand

Nhu cầu hàng hoá, tức là nhu cầu tiềm năng mà người vận chuyển đáp ứng được.

Biểu diễn dưới dạng JSON
{
  "id": string,
  "originPortId": string,
  "destinationPortId": string,
  "containerCount": string,
  "freightRate": number,
  "maximumTransitDuration": {
    object (Duration)
  }
}
Trường
id

string

Mã nhận dạng duy nhất được chỉ định cho nhu cầu về hàng hoá này.

originPortId

string

Mã của cổng gốc.

destinationPortId

string

Mã của cổng đích.

containerCount

string (int64 format)

Số lượng vùng chứa tối đa cần được thực hiện.

freightRate

number

Giá cước vận chuyển cho mỗi công-ten-nơ (có thể bao gồm phí phạt nếu nhu cầu không được đáp ứng). Yếu tố này giúp loại bỏ chi phí bốc hàng và xả hàng của mỗi công-ten-nơ tại điểm khởi hành và điểm đến.

maximumTransitDuration

object (Duration)

Thời gian vận chuyển tối đa (nếu đặt, phải là số dương nghiêm ngặt). Thời gian vận chuyển được xác định từ thời điểm tàu đầu tiên phục vụ nhu cầu này rời cảng khởi hành đến thời điểm tàu cuối cùng phục vụ nhu cầu này đến cảng đích.

VesselService

Dịch vụ tàu có thể được sử dụng để phục vụ nhu cầu hàng hoá. LƯU Ý QUAN TRỌNG: Hãy xem xét trình tự sau đây của các chân dịch vụ tàu: tàuServiceLegs { legCandidateId: "0->1" origin khuyếnTime {} destinationTime { ngày: 3 giờOfDay: 12 } } tàuServiceLegs { legCandidateId: "1->0" originThời gian khởi hành { ngày: 4 } điểm đến Thời gian xuất phát { ngày: 7 giờ Đến ngày: 12 chuyến đi một cổng thông qua một số cổng dịch vụ

Biểu diễn dưới dạng JSON
{
  "vesselClassId": string,
  "vesselServiceLegs": [
    {
      object (VesselServiceLeg)
    }
  ]
}
Trường
vesselClassId

string

Mã lớp tàu thực hiện dịch vụ.

vesselServiceLegs[]

object (VesselServiceLeg)

Đối với một dịch vụ tàu hợp lệ, các thuộc tính sau là: 1. Không được để trống trường này. 2. destinationPortId và originPortId của các chân liên tiếp phải khớp (bao gồm cả chân cuối và chân đầu tiên).

VesselServiceLeg

Một nhánh của dịch vụ tàu.

Biểu diễn dưới dạng JSON
{
  "legCandidateId": string,
  "originDepartureTime": {
    object (ScheduleTime)
  },
  "destinationArrivalTime": {
    object (ScheduleTime)
  }
}
Trường
legCandidateId

string

Mã ứng viên cho chân đã chỉ định.

originDepartureTime

object (ScheduleTime)

Thời gian khởi hành tại cổng xuất phát theo lịch trình hằng tuần.

destinationArrivalTime

object (ScheduleTime)

Thời gian đến cảng đích trên lịch biểu hằng tuần.

ScheduleTime

Thời gian theo lịch (tàu/theo nhu cầu khởi hành/đến nơi) được xác định dựa trên tần suất hằng tuần vào một giờ nhất định.

Biểu diễn dưới dạng JSON
{
  "day": string,
  "hourOfDay": integer
}
Trường
day

string (int64 format)

Ngày theo lịch. Ngày 0 là ngày đầu tiên có thể thực hiện.

hourOfDay

integer

Giờ trong ngày của thời gian theo lịch phải là một số nguyên từ 0 đến 23.

CommodityDemandPath

Các dịch vụ và cổng khác nhau mà một phần nhu cầu hàng hoá nhất định đang sử dụng. Các chỉ số dùng dưới đây là dựa trên thứ tự của các dịch vụ tàu trong phản hồi và thứ tự của các tuyến dịch vụ trong từng dịch vụ tàu.

Biểu diễn dưới dạng JSON
{
  "commodityDemandId": string,
  "containerCount": string,
  "vesselServiceLegIds": [
    {
      object (VesselServiceLegId)
    }
  ]
}
Trường
commodityDemandId

string

Đã thực hiện mã nhu cầu hàng hoá.

containerCount

string (int64 format)

Số vùng chứa đi qua đường dẫn này. Đối với mỗi nhu cầu hàng hoá, tổng số lượng thực hiện được không được vượt quá tổng nhu cầu.

vesselServiceLegIds[]

object (VesselServiceLegId)

Danh sách mã khách hàng của dịch vụ tàu đi qua đường dẫn này. Đối với đường dẫn nhu cầu hàng hoá hợp lệ, các thuộc tính sau là: 1. Điểm khởi hành của chặng đầu tiên phải khớp với originPortId của nhu cầu hàng hoá. 2. destinationPortId của điểm đến cuối cùng phải khớp với destinationPortId của nhu cầu hàng hóa. 3. destinationPortId và khởi hànhId của các chặng liên tiếp phải khớp nhau. 4. Nếu được cung cấp cho nhu cầu hàng hoá này, thời gian vận chuyển tối đa phải lớn hơn hoặc bằng tổng thời lượng của lộ trình.

VesselServiceLegId

Một chặng dịch vụ tàu thuyền được dùng trong đường cầu về hàng hoá. Ví dụ: hãy xem xét rằng có hai dịch vụ tàu thuyền. Chân đầu tiên được làm từ ba chân (chỉ mục 0, 1 và 2) và hai chân thứ hai (chỉ số 0 và 1). Ngoài ra, chặng đầu tiên của dịch vụ đầu tiên sẽ đến cảng khởi hành của chặng thứ hai của dịch vụ thứ hai. Một đường hàng hoá bao gồm 3 id chân dịch vụ tàu sau đây: {vesselServiceIndex: 0,Ứng tàuServiceLegIndex: 2} {vesselServiceIndex: 0,

Biểu diễn dưới dạng JSON
{
  "vesselServiceIndex": integer,
  "vesselServiceLegIndex": integer
}
Trường
vesselServiceIndex

integer

Chỉ mục của dịch vụ tàu thuyền.

vesselServiceLegIndex

integer

Chỉ mục của chặng bay trong dịch vụ tàu được vesselServiceIndex lập chỉ mục.