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 ( |
Trường | |
---|---|
requestId |
Mã yêu cầu hoặc sự cố có vấn đề. |
solverParameters |
Các tham số cho trình giải toán. |
ports[] |
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[] |
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[] |
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[] |
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[] |
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 ( |
Trường | |
---|---|
requestId |
Mã của yêu cầu liên kết với phản hồi này. |
vesselServices[] |
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[] |
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 |
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 " |
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 ( |
Trường | |
---|---|
id |
Mã nhận dạng duy nhất được chỉ định cho cổng này. |
minimumPortStayDuration |
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 |
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 |
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 |
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 |
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 |
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 |
Chi phí cố định để gọi cổng này. |
hourlyCost |
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 ( |
Trường | |
---|---|
id |
Mã nhận dạng duy nhất được chỉ định cho ứng viên hạng chân này. |
departurePortId |
Mã của cổng khởi hành. |
arrivalPortId |
Mã của cổng đến. |
duration |
Thời lượng của chân. |
vesselClassCosts |
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 |
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 |
Mã nhận dạng duy nhất được gán cho lớp tàu này. |
containerCapacity |
Sức chứa của tàu (tính trong vùng chứa). |
vesselCount |
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 ( |
Trường | |
---|---|
id |
Mã nhận dạng duy nhất được chỉ định cho nhu cầu về hàng hoá này. |
originPortId |
Mã của cổng gốc. |
destinationPortId |
Mã của cổng đích. |
containerCount |
Số lượng vùng chứa tối đa cần được thực hiện. |
freightRate |
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 |
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 ( |
Trường | |
---|---|
vesselClassId |
Mã lớp tàu thực hiện dịch vụ. |
vesselServiceLegs[] |
Đố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 ( |
Trường | |
---|---|
legCandidateId |
Mã ứng viên cho chân đã chỉ định. |
originDepartureTime |
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 |
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 |
Ngày theo lịch. Ngày 0 là ngày đầu tiên có thể thực hiện. |
hourOfDay |
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 ( |
Trường | |
---|---|
commodityDemandId |
Đã thực hiện mã nhu cầu hàng hoá. |
containerCount |
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[] |
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 |
Chỉ mục của dịch vụ tàu thuyền. |
vesselServiceLegIndex |
Chỉ mục của chặng bay trong dịch vụ tàu được |