Package google.research.optimization.v1

색인

최적화

단일 플랫폼 API에서 상위 수준의 운영 연구 문제에 대한 최적화 문제 해결사 세트를 노출합니다. MOE:시작_스트립

DesignShippingNetwork

rpc DesignShippingNetwork(DesignShippingNetworkRequest) returns (DesignShippingNetworkResponse)

지정된 DesignShippingNetworkRequest의 정기선 운송 네트워크 설계 및 일정 예약 문제 (LSNDSP)를 해결합니다.

LSNDSP는 정기선 운송 네트워크의 최적의 설계 및 일정을 찾고자 하는 복잡한 최적화 문제입니다. 목표는 총 네트워크 운영 비용을 최소화하면서 포트 간 화물 수요를 가능한 한 많이 충족하는 것입니다.

LSNDSP는 두 가지 주요 하위 문제인 네트워크 설계와 스케줄링으로 나눌 수 있습니다. 네트워크 설계 하위 문제는 네트워크에서 처리하는 포트 집합, 각 경로에 배치될 선박 수, 선박이 운항할 경로를 결정합니다. 스케줄링 하위 문제는 항구 사이를 항해하는 데 걸리는 시간, 화물을 화물에 싣고 내리는 데 걸리는 시간, 항구 간의 화물 운송 수요를 고려하여 선박의 항해 일정을 결정합니다.

간단히 말해서, LSNDSP는 운항할 항구, 사용할 선박 수, 선박 예약 방법을 결정하여 네트워크 운영 비용을 최소화하는 동시에 화물 수요 충족을 위한 수익을 극대화해야 하는 문제입니다. LSNDSP의 까다로운 하위 구성 요소는 화물 경로로서, 수익을 극대화하기 위해 충족해야 할 수요와 화물에 할당할 경로를 결정합니다.

SolveMathOptModel

rpc SolveMathOptModel(SolveMathOptModelRequest) returns (SolveMathOptModelResponse)

입력 모델을 풀고 결과를 한 번에 반환합니다. 콜백, 성과 증분이 필요하지 않고 해결 진행 상황을 추적할 필요가 없는 경우에 사용합니다.

SolveShiftGeneration

rpc SolveShiftGeneration(SolveShiftGenerationRequest) returns (SolveShiftGenerationResponse)

직원 수요를 처리하기 위해 주어진 교대 근무 템플릿에서 교대 근무를 생성하여 주어진 SolveShiftGenerationRequest에서 교대 근무 세대 문제를 해결합니다.

SolveShiftScheduling

rpc SolveShiftScheduling(SolveShiftSchedulingRequest) returns (SolveShiftSchedulingResponse)

직원의 일정 환경설정을 최대화하고 일정 제약조건 위반을 최소화하도록 직원을 교대 근무에 할당하여 지정된 SolveShiftSchedulingRequest의 고정 교대 근무 일정 문제를 해결합니다.

DesignShippingNetworkRequest

이 요청은 LSNDSP의 인스턴스를 보유하며, 포트 세트, 구간 후보 세트, 선박 클래스 세트, 처리할 상품 요구 세트를 포함해야 합니다.

입력란
request_id

string

문제 또는 요청 ID

solver_parameters

SolverParameters

문제 해결사의 매개변수입니다.

ports[]

Port

선박 서비스에서 호출할 수 있는 포트 목록입니다. 요청에는 이 목록에 있는 포트 ID만 포함되어야 합니다.

leg_candidates[]

LegCandidate

선박 서비스에 추가할 수 있는 구간 후보 목록입니다. 요청에는 이 목록에 있는 구간 후보 ID만 포함해야 합니다.

vessel_classes[]

VesselClass

선박 서비스를 수행하는 선박 클래스 목록입니다. 같은 클래스의 모든 선박은 서로 완전히 호환됩니다. 요청에는 이 목록에 있는 선박 클래스 ID만 포함해야 합니다.

commodity_demands[]

CommodityDemand

선박 서비스가 이행해야 하는 잠재적인 상품 (예: 컨테이너)의 목록입니다.

vessel_services[]

VesselService

유효한 선박 서비스 네트워크 (일반적으로 네트워크의 현재 상태)를 제공하여 최적화를 위한 시작점으로 사용할 수 있습니다.

DesignShippingNetworkResponse

응답에는 요청에 전달된 LSNDSP 인스턴스에 대한 솔루션이 보관됩니다. 여기에는 유효한 선박 서비스 네트워크와 상품 수요 경로가 포함됩니다. 각 구간을 통과하는 총 상품 수요는 이 구간에서 선적되는 선박 등급을 초과할 수 없습니다. 수요가 충족되지 않은 선박 서비스가 없는 것은 정기선 운송 네트워크 설계 및 일정 문제를 해결할 수 있는 현실적인 해결책입니다.

입력란
request_id

string

이 응답이 연결된 요청의 ID입니다.

vessel_services[]

VesselService

선박 서비스 네트워크 각 선박 등급에서 사용되는 선박의 총 수는 이 등급에 사용할 수 있는 선박 수를 초과할 수 없습니다.

commodity_demand_paths[]

CommodityDemandPath

긍정적인 상품 수요가 배송되는 모든 상품 수요 경로의 목록입니다. 수요가 배송되지 않은 경우 일부 상품 수요 ID가 포함되지 않을 수 있습니다. 또는 상품 수요를 부분적으로 충족할 수 있습니다. 각 상품 수요에 대해 처리된 총 수량은 총 수요를 초과할 수 없습니다. 마지막으로 commodity_demand_paths는 vessel_services에 종속됩니다 (CommodityDemandPath 정의 참고).

SolveMathOptModelRequest

MathOpt에서 단항 원격 해결 요청

입력란
solver_type

SolverTypeProto

선택사항입니다. Solver 유형으로 문제를 숫자로 푸세요. 솔버가 모델의 특정 특성을 지원하지 않으면 최적화 절차를 완료할 수 없습니다.

model

ModelProto

필수 항목입니다. 해결해야 할 최적화 문제의 수학적 표현입니다.

parameters

SolveParametersProto

선택사항입니다. 단일 솔브를 제어하는 매개변수입니다. enable_output 매개변수는 구체적으로 처리됩니다. 메시지 콜백을 지원하는 솔버의 경우 이를 true로 설정하면 서버에서 메시지 콜백을 등록합니다. 결과 메시지는 SolveMathOptModelResponse.messages에 반환됩니다. 다른 솔버의 경우 enable_output을 true로 설정하면 오류가 발생합니다.

model_parameters

ModelSolveParametersProto

선택사항입니다. 입력 모델에 특정한 단일 솔트를 제어하기 위한 매개변수입니다 (모델 독립 매개변수는 SolveParametersProto 참고).

SolveMathOptModelResponse

MathOpt의 단항 원격 해결에 대한 응답입니다.

입력란
result

SolveResultProto

요청의 모델 풀 출력에 대한 설명입니다.

messages[]

string

SolveParametersProto.enable_output이 사용된 경우 메시지 콜백을 지원하는 솔버의 로그 메시지가 포함됩니다.

SolveShiftGenerationRequest

교대 근무자 세대 문제 해결을 위한 요청입니다. 교대 근무를 생성하는 규칙은 각 ShiftTemplate에 설명되어 있습니다. 응답의 여러 Shift는 단일 ShiftTemplate에서 생성될 수 있습니다. 문제 해결사가 생성하고 선택한 교대 근무는 ShiftTemplate에 설명된 규칙을 준수해야 하며 지정된 직원 수요를 포함해야 합니다.

입력란
solver_config

SolverConfig

선택사항입니다. 문제 해결사의 매개변수입니다.

shift_templates[]

ShiftTemplate

필수 항목입니다. 근무 이벤트를 생성하기 위한 규칙을 지정하는 교대 근무 템플릿 모음입니다.

employee_demands[]

EmployeeDemand

필수 항목입니다. shift_templates로 인해 발생한 교대 근무를 처리해야 하는 총 직원 수요입니다.

SolveShiftGenerationResponse

Shift 세대 문제에 대한 응답입니다. 반환된 solution_statusSOLVED이면 솔버가 생성한 유효한 시프트 집합이 employee_schedules에 반환됩니다. 유효한 교대 근무 일정의 경우 다음 속성이 보존됩니다.

  1. employee_schedules에서 발생한 각 변화는 상응하는 ShiftTemplate에 지정된 규칙을 준수합니다.
  2. 각 교대 근무에서 선택된 각 이벤트는 해당 ShiftTemplate.Event에 지정된 규칙을 준수합니다.
  3. 동일한 ShiftTemplate에서 생성된 교대 근무 세트에 할당된 총 직원 수가 해당 템플릿의 maximum_employee_count명을 초과하지 않습니다.
  4. 할당된 직원 그룹은 지정된 간격마다 수요를 처리합니다.

입력란
solution_status

ShiftGenerationSolutionStatus

반환된 솔루션의 상태입니다. solution_statusSOLVED이 아니면 employee_schedules는 비어 있습니다.

employee_schedules[]

EmployeeSchedule

문제 해결사가 생성한 교대 근무 세트와 각 일정에 할당된 직원 수

demand_coverage_violations[]

DemandCoverageViolation

지정된 employee_schedules에 할당된 employee_counts를 기준으로 한 수요 범위 위반입니다. 요청에 지정된 employee_demands가 집계됩니다. 두 개의 employee_demand 간격이 겹치는 경우 간격의 겹치는 부분에 대한 수요가 합산됩니다.

SolveShiftSchedulingRequest

직원 예약 API 요청입니다. 이 요청은 최소한 직원 집합, 교대 근무조, 직원이 수행할 수 있는 일련의 역할과 일련의 적용 범위 요구사항을 지정합니다. 적용 범위 요구사항에 따라 일정 기간 동안 각 역할을 수행하는 데 필요한 직원 수가 지정됩니다. 한 교대 근무에 할당된 직원에게는 해당 교대 근무에서 하나의 역할만 할당되며, 직원은 두 개의 교대 근무에 중복해서 배정할 수 없습니다. 교대 근무 할당을 유효하게 만드는 자세한 방법은 아래 SolveShiftSchedulingResponse를 참고하세요.

문제를 더 제약하기 위해 각 직원에 대해 추가적인 일정 제약 조건을 지정할 수 있습니다. 모든 일정 예약 제약 조건과 범위 요구사항에는 우선순위 수준 (필수, 높음, 중간, 낮음)이 부여됩니다. 우선순위 수준이 PRIORITY_MANDATORY인 모든 제약 조건은 문제 해결사가 충족해야 합니다. 우선순위가 다른 제약조건은 문제 해결사가 위반할 수 있지만 이러한 위반은 우선순위에 따라 최소화됩니다. 각 제약조건의 우선순위 수준이 처리되는 방식에 관한 자세한 내용은 Priority enum을 참고하세요.

솔버는 지정된 제약 조건에서 각 Employee의 ShiftPreference.preference 값을 최대화하려고 시도합니다. 솔버는 더 많은 환경설정을 충족하기 위해 제약조건을 위반하지 않습니다. 주어진 제약조건에서 예약 할당을 실행할 수 없는 경우에만 제약조건을 위반합니다.

시간에 대한 참고 사항: 문제의 모든 시간은 DateTime 메시지를 사용하여 지정합니다. 이 메시지에는 시간대 필드가 포함됩니다. 시간대는 사용자가 달리 지정하지 않는 한 UTC로 가정합니다. DateTime 메시지는 분 단위까지만 지정해야 합니다. 초와 나노는 모두 무시됩니다.

입력란
request_id

string

문제 또는 요청 ID

solve_parameters

SolveParameters

문제의 단일 해결을 제어하는 매개변수입니다.

employees[]

Employee

예약 가능한 모든 직원이 있습니다.

shifts[]

Shift

모든 교대 근무자는 일정을 형성합니다.

coverage_requirements[]

CoverageRequirement

전체 계획 범위의 적용 범위 요구사항. 특정 기간 또는 교대 근무 ID 목록 중에 각 역할을 수행하거나 기술을 보유해야 하는 직원 수를 지정합니다. 모든 적용 범위 요구사항은 기간 또는 근무 시간 ID 목록 중 하나로 지정해야 합니다 (둘 다 지정할 수는 없음). 서비스 지역 요구사항 (지정된 경우)은 각 위치에서 겹칠 수 없습니다. 이러한 각 제약조건의 기본 우선순위 수준은 역할 요구사항에서 PRIORITY_MANDATORY이고 기술 요구사항에서 PRIORITY_LOW입니다. 자세한 내용은 Priority enum을 참고하세요.

role_ids[]

string

인력 전반에서 가능한 모든 역할 목록입니다. 각 직원은 교대 근무에서 할당할 수 있는 역할이 하나 이상 있어야 합니다. 역할은 교대 근무 중 특정 직무 (예: 공인 간호사, 임원 요리사, 웨이터 등)를 의미합니다. 직원에게 교대 근무가 할당되면 해당 직원에게도 특정한 단일 역할이 할당됩니다.

skill_ids[]

string

인력 전반에 걸쳐 가능한 모든 기술의 목록입니다. 기술이란 할당 가능한 특정 직무와 관련이 없는 직원에게 부여될 수 있는 추가 자격 (자격증, 사용하는 언어 등)을 의미합니다. 이 목록은 비워 둘 수 있습니다. 직원을 교대 근무에 할당하면 해당 교대 근무에 필요한 모든 기술을 충족해야 합니다.

location_ids[]

string

일정에 있는 교대 근무 세트의 가능한 모든 위치의 목록입니다. 이 목록은 비워 둘 수 있습니다. 여러 위치를 지정하는 것이 유용할 수 있습니다. 예를 들어 간호사 관리자가 병원의 여러 부서에서 여러 간호사의 일정을 정하려는 경우, 또는 호텔 관리자가 여러 호텔에 걸쳐 직원의 일정을 예약하려는 경우 등이 있습니다.

budget_requirements[]

BudgetRequirement

일정 문제에 대한 예산 사양입니다. 각 요구사항의 기본 우선순위 수준은 PRIORITY_LOW입니다. 자세한 내용은 Priority enum을 참고하세요.

assignments_hint[]

ShiftAssignment

일정 예약 문제에 대한 잠정적인 솔루션 (솔루션 힌트라고도 함)으로 사용할 할당을 전환합니다. 할당이 할당할 수 없는 교대 근무 또는 일정 예약 요청과 충돌하는 경우 할당 힌트는 무시됩니다.

SolveShiftSchedulingResponse

직원 예약 API에 대한 응답입니다. 반환된 solution_statusNOT_SOLVED_DEADLINE_EXCEEDED 또는 INFEASIBLE인 경우 각 응답에서 shift_assignments는 비어 있습니다. 반환된 solution_statusOPTIMAL 또는 FEASIBLE이면 유효한 교대 근무 할당이 shift_assignments에 반환됩니다. 유효한 교대 근무 할당의 경우 다음 속성이 유지됩니다.

  1. 각 직원 ID는 요청에 지정된 직원 집합에 포함됩니다.
  2. 직원에게 할당된 각 역할 ID는 해당 직원의 역할 ID 집합에 포함됩니다.
  3. 각 교대 근무 ID는 요청에 지정된 교대 근무 세트에 포함되어 있습니다.
  4. 각 교대 근무 ID는 해당 직원에게 할당할 수 없는 교대 근무 ID 중 하나가 아닙니다.
  5. 한 직원은 두 교대 근무에 동시에 배정되지 않습니다.
  6. 지정된 일정에서 우선순위 수준이 PRIORITY_MANDATORY인 제약조건 또는 요청이 위반되지 않았습니다.

입력란
request_id

string

이 응답이 연결된 요청의 ID입니다.

solution_status

SolutionStatus

반환된 솔루션의 상태입니다. 솔루션이 FEASIBLE 또는 OPTIMAL이 아닌 경우 이 proto의 다른 필드는 비어 있을 수 있습니다. 상태가 NOT_SOLVED_DEADLINE_EXCEEDED인 경우 실행 가능한 솔루션을 찾지 못하거나 실행 가능한 솔루션이 있는지 확인하지 않고 시간 제한에 도달한 것입니다. 우선순위 수준 MANDATORY의 제약 조건을 모두 충족할 수 없는 경우 요청이 실행되지 않을 수 있습니다.

shift_assignments[]

ShiftAssignment

모든 할당 목록 각 ShiftAssignment는 직원, 특정 교대 근무자, 해당 교대 근무에서 수행하도록 할당된 역할을 지정합니다.

status_message

string

solution_status가 최적이 아닌 경우 이 필드에 솔버에 관한 추가 정보가 포함될 수 있습니다.