Package google.research.optimization.v1

Chỉ mục

Tối ưu hoá

API One Platform hiển thị một bộ trình giải quyết tối ưu hoá cho các vấn đề nghiên cứu hoạt động cấp cao. MOE:dải_bắt_đầu

DesignShippingNetwork

rpc DesignShippingNetwork(DesignShippingNetworkRequest) returns (DesignShippingNetworkResponse)

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

LSNDSP là một bài toán tối ưu hoá phức tạp nhằm tìm ra thiết kế và lịch biểu tối ưu cho mạng lưới vận chuyển hàng hoá. Mục tiêu là giảm thiểu tổng chi phí vận hành mạng lưới, trong khi vẫn đá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ụ trong thiết kế mạng sẽ xác định nhóm cổng mà mạng lưới sẽ phục vụ, số lượng tàu được triển khai trên mỗi tuyến và các tuyến đường mà các tàu sẽ đi qua. Bài toán phụ về lập lịch biểu xác định lịch trình ra khơi cho các con tàu, có xét đến thời gian cần thiết để đi thuyền giữa các cảng, thời gian để xếp và dỡ hàng và nhu cầu vận chuyển hàng hóa giữa các cảng.

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

SolveMathOptModel

rpc SolveMathOptModel(SolveMathOptModelRequest) returns (SolveMathOptModelResponse)

Giải mô hình đầu vào và trả về kết quả cùng lúc. Hãy sử dụng thuộc tính này khi bạn không cần lệnh gọi lại, mức độ gia tăng và không cần theo dõi tiến trình giải quyết.

SolveShiftGeneration

rpc SolveShiftGeneration(SolveShiftGenerationRequest) returns (SolveShiftGenerationResponse)

Giải quyết vấn đề tạo ca làm việc từ SolveShiftGenerationRequest cho trước bằng cách tạo ca làm việc từ các mẫu ca làm việc nhất định để đáp ứng nhu cầu của nhân viên.

SolveShiftScheduling

rpc SolveShiftScheduling(SolveShiftSchedulingRequest) returns (SolveShiftSchedulingResponse)

Giải quyết sự cố lên lịch ca làm việc đã được khắc phục từ SolveShiftSchedulingRequest cho trước bằng cách phân công nhân viên vào ca làm việc sao cho lựa chọn ưu tiên của nhân viên về việc lên lịch được giảm thiểu và giảm thiểu các lỗi vi phạm quy tắc ràng buộc về lịch làm việc.

DesignShippingNetworkRequest

Yêu cầu này có một bản sao của LSNDSP và phải chứa một tập hợp các cổng, một tập hợp các mục hàng, một tập hợp các hạng tàu và một tập hợp các nhu cầu về hàng hoá cần đáp ứng.

Trường
request_id

string

Mã yêu cầu hoặc sự cố.

solver_parameters

SolverParameters

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

ports[]

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.

leg_candidates[]

LegCandidate

Danh sách những người có thể chạy quảng cáo cho chuyến đi bằng phương tiện công cộng. Yêu cầu chỉ được chứa mã ứng cử viên chân có trong danh sách này.

vessel_classes[]

VesselClass

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

commodity_demands[]

CommodityDemand

Danh sách các nhu cầu về hàng hoá tiềm năng (tức là công-te-nơ) mà các dịch vụ tàu thuyền sẽ thực hiện.

vessel_services[]

VesselService

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

DesignShippingNetworkResponse

Phản hồi này giữ giải pháp cho thực thể LSNDSP được chuyển trong yêu cầu. Mạng lưới này có một mạng lưới dịch vụ tàu thuyền và lộ trình nhu cầu hàng hoá hợp lệ. Tổng nhu cầu vận chuyển 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 phục vụ chặng này. Lưu ý rằng việc không có dịch vụ tàu vận chuyển nào không đáp ứng nhu cầu luôn là một giải pháp khả thi cho bài toán lập lịch và thiết kế mạng lưới vận chuyển tàu.

Trường
request_id

string

Mã của yêu cầu mà phản hồi này được liên kết.

vessel_services[]

VesselService

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

commodity_demand_paths[]

CommodityDemandPath

Danh sách tất cả lộ trình của nhu cầu hàng hoá mà nhu cầu hàng hoá được vận chuyển qua đó. 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. Ngoài ra, nhu cầu về hàng hoá cũng có thể được đáp ứng một phần. Đối với mỗi nhu cầu hàng hóa, tổng số lượng đã thực hiện không được vượt quá tổng nhu cầu. Cuối cùng, commodity_demand_paths phụ thuộc vào vessel_services (xem định nghĩa của CommoditydemandPath).

SolveMathOptModelRequest

Yêu cầu giải từ xa một ngôi trong MathOpt.

Trường
solver_type

SolverTypeProto

Không bắt buộc. Loại trình giải để giải bài toán này dưới dạng số. Lưu ý rằng nếu một trình giải không hỗ trợ một tính năng cụ thể trong mô hình, thì quy trình tối ưu hoá sẽ không thành công.

model

ModelProto

Bắt buộc. Một biểu diễn toán học của bài toán tối ưu hoá cần giải.

parameters

SolveParametersProto

Không bắt buộc. Các tham số để kiểm soát một lượt giải một lần. Thông số enable_output sẽ được xử lý riêng. Đối với những trình giải quyết hỗ trợ lệnh gọi lại thông báo, nếu bạn đặt giá trị này thành true, thì máy chủ sẽ đăng ký một lệnh gọi lại thông báo. Thông báo kết quả sẽ được trả về trong SolveMathOptModelResponse.messages. Đối với những trình giải toán khác, việc đặt enable_output thành true sẽ gây ra lỗi.

model_parameters

ModelSolveParametersProto

Không bắt buộc. Các tham số để kiểm soát một phép giải duy nhất dành riêng cho mô hình đầu vào (xem SolveParametersProto để biết tham số độc lập của mô hình).

SolveMathOptModelResponse

Câu trả lời cho bài giải từ xa đơn phân trong MathOpt.

Trường
result

SolveResultProto

Nội dung mô tả kết quả của việc giải quyết mô hình trong yêu cầu.

messages[]

string

Nếu bạn sử dụng SolveParametersProto.enable_output, thì bảng này sẽ chứa thông điệp nhật ký cho những trình giải quyết hỗ trợ lệnh gọi lại thông báo.

SolveShiftGenerationRequest

Yêu cầu giải quyết sự cố Tạo ca làm việc. Các quy tắc để tạo ca làm việc được nêu trong mỗi mẫu Shift. Có thể tạo nhiều lần thay đổi trong câu trả lời từ một ShiftTemplate duy nhất. Những ca làm việc do người giải quyết tạo ra và lựa chọn phải tuân thủ các quy tắc nêu trong ShiftTemplate và phải đáp ứng được nhu cầu được chỉ định của nhân viên.

Trường
solver_config

SolverConfig

Không bắt buộc. Các tham số cho trình giải.

shift_templates[]

ShiftTemplate

Bắt buộc. Bộ mẫu ca làm việc chỉ định các quy tắc tạo ca làm việc.

employee_demands[]

EmployeeDemand

Bắt buộc. Tổng nhu cầu của nhân viên mà những ca làm việc do shift_templates tạo ra cần đáp ứng.

SolveShiftGenerationResponse

Câu trả lời cho vấn đề Tạo ca làm việc. Nếu solution_status trả về là SOLVED, thì một tập hợp các ca hợp lệ do trình giải quyết tạo ra sẽ được trả về trong employee_schedules. Để có lịch chuyển đổi hợp lệ, các thuộc tính sau sẽ được giữ nguyên:

  1. Mỗi lượt chuyển được tạo trong employee_schedules đều tuân thủ các quy tắc được chỉ định trong ShiftTemplate tương ứng.
  2. Mỗi sự kiện được chọn trong mỗi ca đều tuân thủ các quy tắc được chỉ định trong ShiftTemplate.Event tương ứng.
  3. Tổng số nhân viên được chỉ định cho nhóm ca làm việc được tạo từ cùng một ShiftTemplate không vượt quá maximum_employee_count trong mẫu đó.
  4. Nhóm nhân viên được chỉ định sẽ đáp ứng nhu cầu tại mỗi khoảng thời gian nhất định.

Trường
solution_status

ShiftGenerationSolutionStatus

Trạng thái của giải pháp được trả về. Nếu solution_status không phải là SOLVED, employee_schedules sẽ trống.

employee_schedules[]

EmployeeSchedule

Nhóm ca làm việc do trình giải quyết tạo ra cùng với số lượng nhân viên được chỉ định cho mỗi lịch làm việc.

demand_coverage_violations[]

DemandCoverageViolation

Các lỗi vi phạm về mức độ phù hợp của nhu cầu dựa trên employee_counts được chỉ định trong employee_schedules đã cho. employee_demands được cung cấp trong yêu cầu được tổng hợp – nếu 2 khoảng thời gian employee_demand trùng lặp, thì nhu cầu sẽ được cộng lại trên phần trùng lặp của khoảng thời gian.

SolveShiftSchedulingRequest

Yêu cầu API lên lịch cho lực lượng lao động. Ở mức tối thiểu, yêu cầu chỉ định một nhóm nhân viên, một nhóm ca làm việc, một nhóm vai trò mà nhân viên có thể thực hiện và một nhóm các yêu cầu về mức độ phù hợp. Yêu cầu về mức độ phù hợp chỉ định số lượng nhân viên cần thiết để hoàn thành từng vai trò trong một khoảng thời gian. Các nhân viên đã giao cho một ca cũng được chỉ định một (và chỉ một) vai trò cho ca làm việc đó, và nhân viên không thể được chỉ định vào hai ca làm việc chồng chéo với nhau. Hãy xem SolveShiftSchedulingResponse bên dưới để biết thêm chi tiết về những yếu tố khiến việc chỉ định ca làm việc trở nên hợp lệ.

Có thể chỉ định các ràng buộc lập lịch bổ sung cho mỗi nhân viên để hạn chế sự cố hơn nữa. Tất cả các điều kiện ràng buộc về việc lập lịch biểu và các yêu cầu về mức độ phù hợp đều được đưa ra một mức độ ưu tiên (MANDATORY, CAO, TRUNG BÌNH, THẤP). Trình giải toán phải đáp ứng mọi quy tắc ràng buộc có mức độ ưu tiên PRIORITY_MANDATORY. Trình giải quyết có thể vi phạm các quy tắc ràng buộc có bất kỳ mức độ ưu tiên nào khác, nhưng các lỗi vi phạm này được giảm thiểu theo thứ tự ưu tiên. Hãy xem enum Priority để biết thêm thông tin chi tiết về cách xử lý mức độ ưu tiên của từng quy tắc ràng buộc.

Trình giải toán này sẽ cố gắng tối đa hoá các giá trị ShiftPreference.preference cho mỗi Nhân viên theo các điều kiện ràng buộc nhất định. Trình giải toán sẽ không vi phạm một quy tắc ràng buộc để đáp ứng nhiều lựa chọn ưu tiên hơn. Trình giải toán sẽ chỉ vi phạm một quy tắc ràng buộc nếu việc lên lịch bài tập không khả thi theo những quy tắc ràng buộc đã đặt ra.

Lưu ý về thời gian: Tất cả thời gian trong vấn đề đều được chỉ định bằng thông báo DateTime. Thông báo này có trường Múi giờ. Múi giờ được giả định là UTC trừ phi người dùng chỉ định khác. Bạn chỉ nên chỉ định thông báo ngày giờ theo phút; tất cả các giây và nano sẽ bị bỏ qua.

Trường
request_id

string

Mã yêu cầu hoặc sự cố.

solve_parameters

SolveParameters

Các tham số để kiểm soát một lượt giải duy nhất của bài toán.

employees[]

Employee

Tất cả nhân viên đang rảnh đều cần được lên lịch.

shifts[]

Shift

Tất cả các ca làm việc để tạo thành lịch biểu.

coverage_requirements[]

CoverageRequirement

Yêu cầu về mức độ phù hợp trong toàn bộ thời gian lập kế hoạch. Tiêu chí này chỉ định số lượng nhân viên phải thực hiện từng vai trò hoặc sở hữu một kỹ năng trong một khoảng thời gian hoặc trong một danh sách mã ca làm việc. Bạn phải chỉ định tất cả các yêu cầu về mức độ phù hợp bằng khoảng thời gian hoặc danh sách mã ca làm việc (nhưng không được dùng cả hai). Khung thời gian (nếu có) cho các yêu cầu về phạm vi phủ sóng không được trùng lặp cho từng vị trí cụ thể. Mức độ ưu tiên mặc định cho mỗi quy tắc ràng buộc trong số này là PRIORITY_MANDATORY đối với các yêu cầu về vai trò và PRIORITY_LOW đối với các yêu cầu về kỹ năng. Hãy xem enum Priority để biết thêm thông tin chi tiết.

role_ids[]

string

Danh sách tất cả các vai trò có thể có trong toàn bộ nhân viên. Mỗi nhân viên phải có ít nhất một vai trò có thể được chỉ định cho một ca làm việc. Vai trò là một nhiệm vụ cụ thể trong ca làm việc (ví dụ: y tá đã đăng ký, đầu bếp điều hành, nhân viên phục vụ, v.v.). Khi một nhân viên được phân vào ca, họ cũng được chỉ định vào một vai trò cụ thể duy nhất.

skill_ids[]

string

Danh sách tất cả các kỹ năng có thể có trong toàn bộ nhân viên. Kỹ năng là bất kỳ bằng cấp bổ sung nào mà một nhân viên có thể có mà không liên quan đến một công việc cụ thể được giao (ví dụ: chứng chỉ, ngôn ngữ nói, v.v.). Danh sách này có thể trống. Khi được phân công vào ca, một nhân viên phải hoàn thành tất cả các kỹ năng cần thiết cho ca làm việc đó.

location_ids[]

string

Danh sách tất cả các vị trí có thể thực hiện các ca làm việc trong lịch biểu. Danh sách này có thể trống. Việc chỉ định các vị trí khác nhau có thể hữu ích, chẳng hạn như khi người quản lý điều dưỡng muốn lên lịch cho nhiều y tá cho các phòng khám khác nhau tại một bệnh viện hoặc khi một người quản lý khách sạn muốn lên lịch cho nhân viên ở nhiều khách sạn.

budget_requirements[]

BudgetRequirement

Đặc tả ngân sách cho vấn đề lập lịch. Mức độ ưu tiên mặc định cho từng yêu cầu trong số này là PRIORITY_LOW. Hãy xem enum Priority để biết thêm thông tin chi tiết.

assignments_hint[]

ShiftAssignment

Chuyển các phép gán để sử dụng như một giải pháp dự kiến (còn gọi là gợi ý giải pháp) cho vấn đề về lịch biểu. Gợi ý bài tập sẽ bị bỏ qua nếu bài tập xung đột với ca làm việc không thể giao hoặc yêu cầu lên lịch.

SolveShiftSchedulingResponse

Phản hồi cho API lên lịch cho lực lượng lao động. Đối với mỗi phản hồi, shift_assignments sẽ trống nếu solution_status được trả về là NOT_SOLVED_DEADLINE_EXCEEDED hoặc INFEASIBLE. Nếu solution_status được trả về là OPTIMAL hoặc FEASIBLE, thì một lệnh gán ca hợp lệ sẽ được trả về trong shift_assignments. Để gán ca làm việc hợp lệ, các thuộc tính sau sẽ được giữ lại:

  1. Mỗi mã nhân viên đều nằm trong nhóm nhân viên được cung cấp trong yêu cầu.
  2. Mỗi mã vai trò được chỉ định cho nhân viên đó đều có trong bộ mã vai trò của nhân viên đó.
  3. Mỗi mã ca làm việc nằm trong tập hợp ca làm việc được đưa ra trong yêu cầu.
  4. Mỗi mã ca làm việc không phải là một trong các mã ca làm việc không thể chỉ định cho nhân viên cụ thể.
  5. Một nhân viên sẽ không bao giờ được chỉ định vào 2 ca làm việc chồng chéo.
  6. Đối với lịch biểu đã cho, không có quy tắc ràng buộc hoặc yêu cầu nào có mức độ ưu tiên PRIORITY_MANDATORY bị vi phạm.

Trường
request_id

string

Mã của yêu cầu mà phản hồi này được liên kết.

solution_status

SolutionStatus

Trạng thái của giải pháp được trả về. Nếu giải pháp không khả thi hoặc TỐI ƯU HOÁ, các trường khác trong giao thức này có thể bị trống. Nếu trạng thái là NOT_SOLVED_DEADLINE_EXCEEDED, đã đạt đến giới hạn thời gian mà không tìm ra giải pháp khả thi hoặc xác định xem giải pháp khả thi có tồn tại hay không. Các yêu cầu có thể không khả thi nếu các ràng buộc về mức độ ưu tiên BẮT BUỘC không thể được đáp ứng.

shift_assignments[]

ShiftAssignment

Danh sách tất cả bài tập. Mỗi ShiftAssignment chỉ định một nhân viên, ca làm việc mà họ được chỉ định và vai trò mà họ được chỉ định thực hiện trong ca làm việc đó.

status_message

string

Nếu solution_status không phải là trường tối ưu, trường này có thể chứa thông tin bổ sung về trình giải.