Method: shipping.designShippingNetwork

مشکل طراحی و برنامه ریزی شبکه حمل و نقل لاینر (LSNDSP) را از DesignShippingNetworkRequest داده شده حل می کند.

LSNDSP یک مسئله بهینه سازی پیچیده است که به دنبال یافتن طراحی و زمان بندی بهینه یک شبکه حمل و نقل خطی است. هدف این است که هزینه کل عملیات شبکه را به حداقل برسانیم، در حالی که تا حد امکان نیاز محموله بین بنادر را برآورده کنیم.

LSNDSP را می توان به دو زیر مشکل اصلی تقسیم کرد: طراحی شبکه و زمان بندی. زیرمشکل طراحی شبکه مجموعه پورت هایی را که باید توسط شبکه سرویس دهی شود، تعداد کشتی هایی که در هر مسیر مستقر می شوند و مسیرهایی که کشتی ها طی خواهند کرد را تعیین می کند. مشکل فرعی زمان‌بندی، برنامه‌های دریانوردی کشتی‌ها را با در نظر گرفتن زمان حرکت بین بنادر، زمان بارگیری و تخلیه محموله و تقاضا برای حمل بار بین بنادر تعیین می‌کند.

به عبارت ساده، LSNDSP مشکل تصمیم گیری در مورد اینکه کدام بنادر باید سرویس دهی شود، از چند کشتی استفاده شود، و نحوه برنامه ریزی کشتی ها به گونه ای است که هزینه عملیات شبکه به حداقل برسد و در عین حال درآمد برای برآورده کردن تقاضای محموله به حداکثر برسد. یکی از اجزای فرعی چالش برانگیز LSNDSP مسیریابی محموله است که تعیین می کند کدام خواسته ها را برآورده کند و کدام مسیرها را به محموله اختصاص دهد تا درآمد را به حداکثر برساند.

درخواست HTTP

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

URL از دستور GRPC Transcoding استفاده می کند.

درخواست بدن

بدنه درخواست حاوی داده هایی با ساختار زیر است:

نمایندگی JSON
{
  "requestId": string,
  "solverParameters": {
    object (SolverParameters)
  },
  "ports": [
    {
      object (Port)
    }
  ],
  "legCandidates": [
    {
      object (LegCandidate)
    }
  ],
  "vesselClasses": [
    {
      object (VesselClass)
    }
  ],
  "commodityDemands": [
    {
      object (CommodityDemand)
    }
  ],
  "vesselServices": [
    {
      object (VesselService)
    }
  ]
}
فیلدها
requestId

string

مشکل یا شناسه درخواست.

solverParameters

object ( SolverParameters )

پارامترهای حل کننده

ports[]

object ( Port )

فهرست بنادر احتمالی برای فراخوانی در خدمات کشتی. درخواست فقط باید دارای شناسه های پورت باشد که در این لیست هستند.

legCandidates[]

object ( LegCandidate )

فهرست نامزدهای بالقوه پا برای اضافه شدن به خدمات کشتی. درخواست فقط باید شامل شناسه‌های نامزدی پا باشد که در این لیست هستند.

vesselClasses[]

object ( VesselClass )

لیست کلاس های کشتی برای انجام خدمات کشتی. توجه داشته باشید که همه کشتی های یک کلاس کاملاً قابل تعویض هستند. درخواست فقط باید شامل شناسه های کلاس کشتی باشد که در این لیست هستند.

commodityDemands[]

object ( CommodityDemand )

فهرست کالاهای بالقوه (به عنوان مثال کانتینر) که باید توسط خدمات کشتی برآورده شود.

vesselServices[]

object ( VesselService )

شبکه ای از خدمات کشتی معتبر (معمولاً وضعیت فعلی شبکه) می تواند به عنوان نقطه شروع برای بهینه سازی استفاده شود.

بدن پاسخگو

پاسخ، راه‌حل نمونه LSNDSP را در درخواست نگه می‌دارد. این شامل یک شبکه معتبر از خدمات کشتی و مسیرهای تقاضای کالا است. مجموع تقاضای کالایی که در هر قسمت می‌گذرد، نمی‌تواند از ظرفیت کلاس کشتی که در این قسمت خدمت می‌کند تجاوز کند. توجه داشته باشید که نداشتن خدمات کشتی بدون تقاضای برآورده شده همیشه یک راه حل عملی برای مشکل طراحی و برنامه ریزی شبکه حمل و نقل خطی است.

در صورت موفقیت آمیز بودن، بدنه پاسخ حاوی داده هایی با ساختار زیر است:

نمایندگی JSON
{
  "requestId": string,
  "vesselServices": [
    {
      object (VesselService)
    }
  ],
  "commodityDemandPaths": [
    {
      object (CommodityDemandPath)
    }
  ]
}
فیلدها
requestId

string

شناسه درخواستی که این پاسخ با آن مرتبط است.

vesselServices[]

object ( VesselService )

شبکه خدمات کشتی برای هر کلاس شناور، تعداد کل شناورهای مورد استفاده نمی تواند از تعداد شناورهای موجود برای این کلاس تجاوز کند.

commodityDemandPaths[]

object ( CommodityDemandPath )

فهرست تمام مسیرهای تقاضای کالا که تقاضای کالاهای مثبت از طریق آنها ارسال می شود. توجه داشته باشید که در صورت عدم ارسال تقاضا، برخی از شناسه‌های تقاضای کالا ممکن است گنجانده نشوند. از طرف دیگر، تقاضای کالا می تواند تا حدی برآورده شود. برای هر تقاضای کالا، کل مقدار برآورده شده نمی تواند از کل تقاضا بیشتر شود. در نهایت، commodityDemandPaths به سرویس های کشتی بستگی دارد (به تعریف CommodityDemandPath مراجعه کنید).

SolverParameters

پارامترهایی که یک حل واحد LSNDSP را کنترل می کنند.

نمایندگی JSON
{
  "timeLimit": string
}
فیلدها
timeLimit

string ( Duration format)

حداکثر زمانی که حل کننده باید برای مشکل صرف کند. این مقدار یک محدودیت سخت نیست و برای سربار ارتباط حساب نمی کند. تاخیر مورد انتظار برای حل مشکل ممکن است کمی بیشتر از این مقدار باشد.

مدت زمان در ثانیه با حداکثر نه رقم کسری که با ' s ' ختم می شود. مثال: "3.5s" .

بندر

پورت، به عنوان مثال یک ترمینال یا تمام پایانه های یک پورت.

نمایندگی JSON
{
  "id": string,
  "minimumPortStayDuration": {
    object (Duration)
  },
  "minimumTransshipmentDuration": {
    object (Duration)
  },
  "transshipmentCost": number,
  "vesselClassCosts": {
    string: {
      object (VesselCost)
    },
    ...
  }
}
فیلدها
id

string

شناسه منحصر به فرد به این پورت اختصاص داده شده است.

minimumPortStayDuration

object ( Duration )

حداقل مدت اقامت برای تماس با بندر. اکثر مطالعات ثابت می‌کنند زیرا بنادر معمولاً جرثقیل‌های بیشتری را به کشتی‌های بزرگ‌تر با تعداد حرکت بالا اختصاص می‌دهند، زیرا فضای بیشتری را اشغال می‌کنند.

minimumTransshipmentDuration

object ( Duration )

حداقل مدت حمل و نقل در یک بندر معین، شامل مدت زمان تخلیه کانتینر و بارگیری مجدد آن در کشتی دیگر.

transshipmentCost

number

هزینه حمل و نقل یک کانتینر معمولاً کمتر از مجموع بارگیری و تخلیه خواهد بود زیرا حمل و نقل به کاغذهای گمرکی در بندر نیاز ندارد.

vesselClassCosts

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

هزینه های متحمل شده هنگام تماس با این پورت با شناسه کلاس کشتی نقشه برداری شده است. یک کلاس کشتی فقط در صورتی می تواند با این پورت تماس بگیرد که در این نقشه ورودی داشته باشد.

یک شی حاوی لیستی از "key": value . مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

مدت زمان

مدت زمان (اقامت در بندر / حمل و نقل، ترانزیت تقاضا) بر اساس دانه بندی ساعتی تعریف می شود.

نمایندگی JSON
{
  "hours": string
}
فیلدها
hours

string ( int64 format)

تعداد ساعات تعیین کننده مدت زمان

هزینه کشتی

هزینه کشتی برای تماس و اقامت در این بندر به عنوان یک تابع خطی از مدت اقامت تعریف می شود ( 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

شناسه منحصربفرد به این نامزد پا اختصاص داده شده است.

departurePortId

string

شناسه بندر خروج

arrivalPortId

string

شناسه بندر ورود

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

شناسه منحصر به فرد اختصاص داده شده به این کلاس کشتی.

containerCapacity

string ( int64 format)

ظرفیت کلاس کشتی (در کانتینر).

vesselCount

string ( int64 format)

تعداد شناورهای این کلاس شناور.

تقاضای کالا

تقاضای کالا، یعنی تقاضای بالقوه ای که باید توسط یک فرستنده برآورده شود.

نمایندگی JSON
{
  "id": string,
  "originPortId": string,
  "destinationPortId": string,
  "containerCount": string,
  "freightRate": number,
  "maximumTransitDuration": {
    object (Duration)
  }
}
فیلدها
id

string

شناسه منحصر به فرد اختصاص داده شده به این تقاضای کالا.

originPortId

string

شناسه پورت مبدا.

destinationPortId

string

شناسه بندر مقصد

containerCount

string ( int64 format)

حداکثر تعداد کانتینرهایی که باید تکمیل شوند.

freightRate

number

نرخ بار در هر کانتینر (که می تواند شامل جریمه برای تقاضای برآورده نشده باشد). باید هزینه بارگیری و تخلیه هر کانتینر در مبدا و مقصد را حذف کند.

maximumTransitDuration

object ( Duration )

حداکثر مدت حمل و نقل (در صورت تنظیم، باید کاملاً مثبت باشد). زمان ترانزیت از زمانی تعریف می شود که اولین کشتی که این تقاضا را برآورده می کند از بندر مبدا خارج می شود تا زمانی که آخرین کشتی که این تقاضا را برآورده می کند به بندر مقصد می رسد.

سرویس کشتی

سرویس کشتی که می تواند برای تامین نیازهای کالا استفاده شود. مهم: یک فرض فعلی این است که سرویس‌ها در فرکانس هفتگی هستند و زمان اقامت بندر نمی‌تواند بیش از یک هفته باشد. دنباله زیر از پاهای سرویس کشتی را در نظر بگیرید: anijeServiceLegs { legCandidateId: "0->1" originDepartureTime {} destinationArrivalTime { روز: 3 hourOfDay: 12 } } containServiceLegs {legCandidateId: "1->0" {destinationDarrivalTime: "1->0" {dayArrivalTime day: 7 hourOfDay: 12 } } این قسمت‌ها یک خط خدمات یک هفته‌ای را تعریف می‌کنند که از دو پورت عبور می‌کنند و زمان اقامت هر دو پورت 12 ساعت است.

نمایندگی JSON
{
  "vesselClassId": string,
  "vesselServiceLegs": [
    {
      object (VesselServiceLeg)
    }
  ]
}
فیلدها
vesselClassId

string

شناسه کلاس کشتی که سرویس را انجام می دهد.

vesselServiceLegs[]

object ( VesselServiceLeg )

برای یک سرویس کشتی معتبر، ویژگی های زیر برقرار است: 1. نمی تواند خالی باشد. 2. مقصد PortId و OriginalPortId پاهای متوالی باید مطابقت داشته باشند (از جمله برای آخرین و اولین پا).

VesselServiceLeg

یک پا سرویس کشتی.

نمایندگی JSON
{
  "legCandidateId": string,
  "originDepartureTime": {
    object (ScheduleTime)
  },
  "destinationArrivalTime": {
    object (ScheduleTime)
  }
}
فیلدها
legCandidateId

string

شناسه نامزد پا اختصاص داده شده است.

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

شناسه تقاضای کالا برآورده شد.

containerCount

string ( int64 format)

تعداد کانتینرهایی که از این مسیر عبور می کنند. برای هر تقاضای کالا، کل مقدار برآورده شده نمی تواند از کل تقاضا بیشتر شود.

vesselServiceLegIds[]

object ( VesselServiceLegId )

لیست شناسه های پای سرویس کشتی که از این مسیر طی شده است. برای یک مسیر تقاضای کالای معتبر، ویژگی‌های زیر برقرار است: 1. DeparturePortId مرحله اول باید با originPortId تقاضای کالا مطابقت داشته باشد. 2. مقصد آخرین مرحله، PortId باید با destinationPortId تقاضای کالا مطابقت داشته باشد. 3. ورودPortId و DeparturePortId پاهای متوالی باید مطابقت داشته باشند. 4. اگر برای این تقاضای کالا پیش بینی شده باشد، حداکثر زمان ترانزیت باید بیشتر یا مساوی از کل طول مسیر باشد.

VesselServiceLegId

تک پایه خدمات کشتی مورد استفاده در مسیر تقاضای کالا. به عنوان مثال، در نظر بگیرید که دو سرویس کشتی وجود دارد. اولی از سه پایه (با نمایه 0، 1 و 2) و دومی دو (با نمایه 0 و 1) ساخته شده است. علاوه بر این، اولین پا از سرویس اول به بندر خروجی قسمت دوم سرویس دوم می رسد. یک مسیر کالا متشکل از سه شناسه پای سرویس کشتی زیر: {vesselServiceIndex: 0، containServiceLegIndex: 2} {vesselServiceIndex: 0، containServiceLegIndex: 0} {vesselServiceIndex: 1، containsServiceLegIndex: سرویس کشتی (توجه داشته باشید که 2 و 0 متوالی هستند زیرا هر سرویس یک چرخه است)، سپس به سرویس کشتی 1 برای یک پا منتقل می شود.

نمایندگی JSON
{
  "vesselServiceIndex": integer,
  "vesselServiceLegIndex": integer
}
فیلدها
vesselServiceIndex

integer

فهرست خدمات کشتی

vesselServiceLegIndex

integer

نمایه ساق پا از سرویس کشتی نمایه شده توسط vesselServiceIndex .