Method: shipping.designShippingNetwork

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

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

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

간단히 말해서, 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)

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

legCandidates[]

object (LegCandidate)

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

vesselClasses[]

object (VesselClass)

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

commodityDemands[]

object (CommodityDemand)

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

vesselServices[]

object (VesselService)

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

응답 본문

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

성공할 경우 응답 본문에 다음 구조의 데이터가 포함됩니다.

JSON 표현
{
  "requestId": string,
  "vesselServices": [
    {
      object (VesselService)
    }
  ],
  "commodityDemandPaths": [
    {
      object (CommodityDemandPath)
    }
  ]
}
필드
requestId

string

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

vesselServices[]

object (VesselService)

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

commodityDemandPaths[]

object (CommodityDemandPath)

긍정적인 상품 수요가 배송되는 모든 상품 수요 경로의 목록입니다. 수요가 배송되지 않은 경우 일부 상품 수요 ID가 포함되지 않을 수 있습니다. 또는 상품 수요를 부분적으로 충족할 수 있습니다. 각 상품 수요에 대해 처리된 총 수량은 총 수요를 초과할 수 없습니다. 마지막으로 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

이 포트에 할당된 고유 ID입니다.

minimumPortStayDuration

object (Duration)

포트 호출의 최소 체류 기간입니다. 항구는 일반적으로 이동 횟수가 많은 큰 선박에 더 많은 공간을 차지하기 때문에 더 많은 크레인을 할당하기 때문에 대부분의 연구는 일정하게 가정합니다.

minimumTransshipmentDuration

object (Duration)

특정 항구에서 컨테이너를 내리고 다른 선박에 다시 로드하는 기간을 포함한 운송의 최소 기간입니다.

transshipmentCost

number

컨테이너 운송 비용 운송은 항구에서 세관 서류 작업을 하지 않아도 되기 때문에 보통은 반납과 반납의 합보다 적게 듭니다.

vesselClassCosts

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

선박 클래스 ID로 매핑된 이 포트를 호출할 때 발생하는 비용입니다. 선박 클래스는 이 지도에 항목이 있는 경우에만 이 항구를 호출할 수 있습니다.

"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

선박 서비스 구간 후보입니다. 동일한 두 포트 사이에 여러 다리 후보가 있을 수 있습니다(예: 은 서로 다른 해로 및/또는 선박의 속도를 나타냅니다.

JSON 표현
{
  "id": string,
  "departurePortId": string,
  "arrivalPortId": string,
  "duration": {
    object (Duration)
  },
  "vesselClassCosts": {
    string: number,
    ...
  }
}
필드
id

string

이 구간 후보에 할당된 고유 ID입니다.

departurePortId

string

출발 포트의 ID입니다.

arrivalPortId

string

도착 포트의 ID입니다.

duration

object (Duration)

구간의 지속 시간입니다.

vesselClassCosts

map (key: string, value: number)

이 구간 후보를 특정 선박 클래스에 할당하는 비용입니다. 선박 운항 비용, 벙커 비용, 전세 비용이 포함될 수 있습니다. 선박 클래스는 이 지도에 항목이 있는 경우에만 이 구간 후보를 항해할 수 있습니다.

"key": value 쌍 목록을 포함하는 객체입니다. 예: { "name": "wrench", "mass": "1.3kg", "count": "3" }

VesselClass

선박 클래스, 즉 동일한 속성을 공유하는 선박 그룹 같은 클래스의 두 선박을 구분할 수 있는 방법은 없습니다.

JSON 표현
{
  "id": string,
  "containerCapacity": string,
  "vesselCount": string
}
필드
id

string

이 선박 등급에 할당된 고유 ID입니다.

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

이 상품 수요에 할당된 고유 ID입니다.

originPortId

string

출발지 포트의 ID입니다.

destinationPortId

string

대상 포트의 ID입니다.

containerCount

string (int64 format)

처리할 최대 컨테이너 수입니다.

freightRate

number

컨테이너당 운임 요율 (미충족 수요에 대한 페널티가 포함될 수 있음) 출발지와 목적지에서 컨테이너당 로드 및 방출하는 비용이 사라져야 합니다.

maximumTransitDuration

object (Duration)

최대 운송 기간 (설정된 경우 매우 양수여야 함) 운송 시간은 이 수요를 처리하는 첫 번째 선박이 출발 항을 출발한 시간부터 이 수요를 처리하는 마지막 선박이 도착 항구에 도착하는 시간까지 정의됩니다.

VesselService

상품 수요를 처리하는 데 사용할 수 있는 선박 서비스 중요: 현재 서비스 빈도는 주 단위이며 포트 체류 시간은 일주일을 초과할 수 없다고 가정합니다. 다음과 같은 선박 서비스 구간의 순서를 고려해 보세요. vesselServiceLegs { legCandidateId: '0->1' originDepartureTime {} destinationArrivalTime { day: 3 hourOfDay: 12 } } vesselServiceLegs { legCandidateId: "1->0" originDepartureTime { day: 4 } destinationArrivalTime { day: 7 hourOfDay: 12 } } 이 구간은 두 개의 포트를 통과하는 1주 서비스 노선을 정의합니다. 이 구간은 두 포트 체류 시간이 모두 12시간입니다.

JSON 표현
{
  "vesselClassId": string,
  "vesselServiceLegs": [
    {
      object (VesselServiceLeg)
    }
  ]
}
필드
vesselClassId

string

서비스를 수행하는 선박 클래스 ID

vesselServiceLegs[]

object (VesselServiceLeg)

유효한 선박 서비스의 경우 다음과 같은 속성이 적용됩니다. 1. 이 입력란은 비워둘 수 없습니다. 2. 연속된 다리 destinationPortId 및 originPortId가 일치해야 합니다 (마지막 구간과 첫 번째 구간 포함).

VesselServiceLeg

선박 서비스의 단일 구간입니다.

JSON 표현
{
  "legCandidateId": string,
  "originDepartureTime": {
    object (ScheduleTime)
  },
  "destinationArrivalTime": {
    object (ScheduleTime)
  }
}
필드
legCandidateId

string

할당된 구간 후보 ID입니다.

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

상품 수요 ID가 처리되었습니다.

containerCount

string (int64 format)

이 경로를 통과하는 컨테이너 수입니다. 각 상품 수요에 대해 처리된 총 수량은 총 수요를 초과할 수 없습니다.

vesselServiceLegIds[]

object (VesselServiceLegId)

이 경로를 통과한 선박 서비스 구간 ID의 목록입니다. 유효한 상품 수요 경로의 경우 다음 속성이 성립합니다. 1. 첫 번째 구간의 departurePortId는 상품 수요의 originPortId와 일치해야 합니다. 2. 마지막 구간의 destinationPortId는 상품 수요의 destinationPortId와 일치해야 합니다. 3. 연속된 다리 arrivalPortId와 departurePortId가 일치해야 합니다. 4. 이 상품 수요에 대해 제공되는 경우 최대 운송 시간은 경로의 총 소요 시간보다 크거나 같아야 합니다.

VesselServiceLegId

상품 수요 경로에 사용되는 단일 선박 서비스 구간입니다. 예를 들어 선박 서비스가 두 개 있다고 가정해 보겠습니다. 첫 번째 구간은 3개의 구간 (0, 1, 2로 색인이 생성됨)과 두 번째 구간 (색인이 0과 1)으로 구성됩니다. 또한 첫 번째 서비스의 첫 번째 구간은 두 번째 서비스의 두 번째 구간의 출발 포트에 도착합니다. 다음과 같은 세 개의 선박 서비스 구간 ID로 구성된 상품 경로 (1개의 선박 서비스 구간 ID: {vesselServiceIndex: 0, vesselServiceLegIndex: 2} {vesselServiceIndex: 0, vesselServiceLegIndex: 0} {vesselServiceIndex: 1, vesselServiceLegIndex: 1}는 연속된 선박 서비스 구간에서 1번 서비스이며, 2번은 연속된 선박 서비스 구간).

JSON 표현
{
  "vesselServiceIndex": integer,
  "vesselServiceLegIndex": integer
}
필드
vesselServiceIndex

integer

선박 서비스의 색인입니다.

vesselServiceLegIndex

integer

vesselServiceIndex로 색인을 생성한 선박 서비스의 구간 색인입니다.