Method: shipping.designShippingNetwork

حلّ مشكلة تصميم وجدولة شبكة شحن السفن (LSNDSP) من سمة DesignShippingNetworkRequest المحدّدة.

يمثل 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

مشكلة أو معرّف الطلب.

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 على سمة vesselServices (راجِع تعريف 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)

عدد الساعات التي تحدِّد المدة.

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

تم تخصيص معرّف فريد لهذا المرشّح للمرحلة.

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)

عدد السفن في فئة السفن هذه.

CommodityDemand

الطلب على السلع، أي الطلب المحتمل الذي يجب أن تلبيه جهة الشحن

تمثيل 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)

الحد الأقصى لمدة النقل (إذا تم تحديده، يجب أن يكون موجبًا تمامًا). ويتم تحديد مدة النقل بدءًا من وقت مغادرة أول سفينة تخدم هذا الطلب ميناء المصدر إلى وقت وصول آخر سفينة تخدم هذا الطلب إلى ميناء الوجهة.

VesselService

خدمة السفن التي يمكن استخدامها لتلبية الطلبات على السلع ملاحظة مهمة: الافتراض الحالي هو أنّ الخدمات تتزايد بوتيرة أسبوعية وأنّ أوقات الإقامة في الميناء لا يمكن أن تتجاوز أسبوعًا واحدًا. ضع في الاعتبار التسلسل التالي لأرجل خدمة السفينة: vesselServiceLegs { legCandidateId: "0->1" originDepartureTime {} destinationArrivalTime { day: 3 hourOfDay: 12 } } vesselServiceLegs { legCandidateId: "1->0" OriginDepartureTime { day: 4 }destinationArrivalTime { day: 7 hourOfDay: 12 } } يُحدِّد هذه المراحل خطوط الخدمة لمدة أسبوع واحد تمر عبر منفذين مع مدة بقاء المنفذين 12 ساعة.

تمثيل JSON
{
  "vesselClassId": string,
  "vesselServiceLegs": [
    {
      object (VesselServiceLeg)
    }
  ]
}
الحقول
vesselClassId

string

معرّف فئة السفينة التي تقدّم الخدمة

vesselServiceLegs[]

object (VesselServiceLeg)

للحصول على خدمة سفينة صالحة، تتضمن الخصائص التالية: 1. لا يمكن أن يكون فارغًا. 2. ساقان متتابعتان يجب أن تتطابق DestinationPortId وOriginPortId (بما في ذلك الفئتين الأخيرة والأولى).

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. يجب أن يتطابق عنصر مغادرة PortId في المرحلة الأولى مع assetPortId لطلب السلع. 2. يجب أن يتطابق DestinationPortId في المرحلة الأخيرة مع DestinationPortId للطلب على السلع. 3- ساقان متتابعتان يجب أن يتطابق رقم accessPortId مع باب PayId. 4. وإذا تمّ توفير هذا الحدّ الأقصى للطلب على السلع، يجب أن يكون أكبر من المدة الإجمالية للمسار أو مساوية لها.

VesselServiceLegId

محطة خدمة سفينة واحدة مستخدَمة في مسار الطلب على السلع الأساسية على سبيل المثال، لنفرض أنّ هناك خدمتَين للسفن. تتكون الطريقة الأولى من ثلاثة أرجل (المفهرسة 0 و1 و2) والثانية (المفهرسة 0 و1). بالإضافة إلى ذلك، تصل المرحلة الأولى من الخدمة الأولى إلى منفذ مغادرة المرحلة الثانية من الخدمة الثانية. مسار سلع يتألف من مسار سلع يتألف من ثلاثة هيكل خدمة سفينة.

تمثيل JSON
{
  "vesselServiceIndex": integer,
  "vesselServiceLegIndex": integer
}
الحقول
vesselServiceIndex

integer

فهرس خدمة السفن.

vesselServiceLegIndex

integer

تم فهرسة الجزء الساق من خدمة السفينة من قِبل "vesselServiceIndex".