منح الأولوية للزيارات القريبة باستخدام سمات الانتقال

يوضّح هذا المثال كيفية استخدام سمات النقل لمنح الأولوية للمسارات التي يتم فيها تنفيذ عمليات النقل والتسليم المجاورة بواسطة المركبة نفسها في فاصل زمني واحد. لمعرفة المزيد من المعلومات عن سمات الانتقال، اطّلِع على مقالة وضع نماذج لمنطق النشاط التجاري باستخدام سمات الانتقال.

في هذا المثال:

  • يتم تسليم الشحنات "أ" و"ب" و"ج" بالقرب من بعضها على الطريق نفسها.
  • وسيتم توفير المزيد من عمليات التسليم في المستقبل.
  • لا تتوفّر مُدد تسليم محدّدة للتوصيل.
  • بغض النظر عن جدول الزيارات، يجب أن تجتاز المركبة هذه الطريق مرّتين: مرّة في الصباح في طريقها من المستودع ومرّة في المساء في طريق العودة.
  • تظل المسافة الإجمالية للسفر ومدة المسار كما هي دائمًا، بغض النظر عن وقت تنفيذ الخطوات A وB وC.

مثال على عمليات تسليم الشحنات على الطريق نفسها هناك ثلاث شحنات، "أ" و"ب" و"ج"، في الطريق من المستودع إلى الشحنات الأخرى. تقع محطة أ على بعد
1000 متر من المستودع، وتقع محطة ب على بعد 50 مترًا إضافيًا من المستودع، وتقع محطة ج على بعد 30
مترًا إضافيًا في الاتجاه نفسه. هناك شحنات أخرى تبعد 1000 متر عن
C.

في هذه الحالة، وبالنسبة إلى الطلب الذي يستخدِم التكلفة لكل ساعة والتكلفة لكل كيلومتر فقط، يمكن أن يتعامل المسار المحسَّن مع الطلبَين "أ" و"ب" في الصباح والطلب "ج" في المساء، وستكون تكلفة الحلّ هي نفسها كما لو تم التعامل مع الطلبَين الاثنين والطلب الثالث في الوقت نفسه.

التكلفة لكل كيلومتر مع حدّ أدنى

لتجميع الزيارات القريبة، عليك أولاً اختيار حدّ أدنى للمسافة. هذه هي المسافة القصوى بين زيارتَين تعتبرهما قريبتَين. يستخدم هذا المثال حدًا أقصى يبلغ 100 متر، وهو ما يعادل تقريبًا مربعًا سكنيًا واحدًا في منطقة حضرية. يمكنك زيادة الحدّ الأدنى أو خفضه بما يتناسب مع احتياجات نشاطك التجاري والإعدادات المفضّلة للسائقين.

لتجميع الزيارات القريبة ضمن نطاق 100 متر من بعضها، يمكنك ضبط تكلفة عالية على أول 100 متر من كل انتقال وتكلفة أقل لأي متر إضافي من الانتقال. وبما أنّ أوّل 100 متر هي الأكثر تكلفة، يحقّق محسِّن الأداء أكبر وفورات باستخدام عمليات النقل التي تقلّ عن الحدّ الأدنى البالغ 100 متر، حتى لو كان ذلك يعني زيادة الطول الإجمالي للمسار.

لإعداد التكاليف، يمكنك إضافة إدخال جديد إلى ShipmentModel.transition_attributes مع السمات التالية:

{
  "model": {
    "transitionAttributes": [
      {
        "excluded_dst_tag": "UNUSED_TAG",
        "excluded_src_tag": "UNUSED_TAG",
        "distanceLimit": {
          "softMaxMeters": 100,
          "costPerKilometerBelowSoftMax": 50,
          "costPerKilometerAboveSoftMax": 1,
        }
      }
    ]
  }
}

يجب عدم استخدام العلامة #unused_tag# مع أي شحنات أو مركبات لمطابقة جميع عمليات النقل المحتمَلة. لمزيد من المعلومات، يُرجى الاطّلاع على كيفية مطابقة جميع طلبات الزيارات.

آلية عمل التكلفة العالية التي تقلّ عن الحدّ الأدنى

يوضّح هذا القسم مدى تأثير التكلفة التي تقلّ عن الحدّ الأدنى أو تزيد عنه في التكلفة الإجمالية للحلول المختلفة للمثال على السيناريو.

الحلّ 1: تنفيذ "أ" و"ب" في الطريق إلى هناك، و"ج" في الطريق إلى الخلف

في هذا الحلّ، يتم تقسيم الشحنات إلى رحلتَي عبور لهذا الطريق. يتم تسليم اثنين منهما في عملية العبور الأولى، ويتم تسليم الباقي في العملية الثانية. هناك 5 عمليات انتقال:

الانتقال المسافة أقل من الحدّ الأدنى أعلى من الحدّ الأدنى
المسافة التكلفة المسافة التكلفة
depot →أ 1,000 متر 100 متر 5 900 متر 0.9
أ←ب 50 مترًا 50 مترًا 2.5 0 م 0
ب→غير ذلك 1,030 متر 100 متر 5 930 متر 0.93
غير ذلك→ج 1,000 متر 100 متر 5 900 متر 0.9
C→depot 1080 متر 100 متر 5 980 متر 0.98
المجموع 450 متر 22.5 3,710 متر 3.71

يتم احتساب التكلفة الإجمالية من خلال جمع التكلفة لكل كيلومتر:

  • التكلفة لكل كيلومتر أقل من الحدّ الأدنى (50) مضروبة في إجمالي المسافة التي تم قطعها أقل من الحدّ الأدنى (450 متر = 0.45 كيلومتر)
  • التكلفة لكل كيلومتر فوق الحدّ (1) مضروبة في إجمالي المسافة التي تم قطعها فوق الحدّ (3710 متر = 3.71 كيلومتر).

وبالتالي، تكون التكلفة الإجمالية هي 0.45 * 50 + 3.71 * 1 = 22.5 + 3.71 = 26.21.

الحلّ 2: تنفيذ "أ" و"ب" و"ج" في طريق الذهاب، وعدم تنفيذ أيّ إجراء في طريق العودة

في هذا الحلّ، على عكس الحلّ 1، يتم تسليم الشحنات الثلاث "كمجموعة" أثناء رحلة واحدة على الطريق. في عملية العبور الأخرى، لا تتوقف المركبة على الإطلاق. مرة أخرى، هناك 5 انتقالات، ولكن تختلف أطوالها و تركيباتها:

الانتقال المسافة أقل من الحدّ الأدنى أعلى من الحدّ الأدنى
المسافة التكلفة المسافة التكلفة
depot →أ 1,000 متر 100 متر 5 900 متر 0.9
أ←ب 50 مترًا 50 مترًا 2.5 0 م 0
ب→ج 30 مترًا 30 مترًا 1.5 0 م 0
ج→غير ذلك 1,000 متر 100 متر 5 900 متر 0.9
other→depot 2080 متر 100 متر 5 1,980 مترًا 1.98
المجموع 380 مترًا 19 3780 مترًا 3.78

باستخدام العملية الحسابية نفسها الواردة في الحلّ 1، تبلغ التكلفة الإجمالية ‎0.38 * 50 + ‎3.78 * 1 = 19 + 3.78 = 22.78، ويكون إجراء جميع الزيارات في مجموعة زمنية واحدة أقل تكلفة من إجرائها في مجموعتَين. يمكنك تعزيز هذا التأثير من خلال زيادة DistanceLimit.cost_per_kilometer_below_soft_max.

سبب عدم فعالية التكلفة المنخفضة لكل كيلومتر دون الحدّ الأدنى

بما أنّك تريد تفضيل الانتقالات القصيرة على الانتقالات الطويلة، قد تتمثّل رغبتك في تحديد تكلفة عالية لكل كيلومتر للتنقّل لمسافات طويلة، مع إبقاء التكلفة المنخفضة لكل كيلومتر للتنقّل لمسافات قصيرة. ولكن لهذا الإجراء تأثير عكسي: بما أنّ أوّل 100 متر من عملية النقل هي الأقل تكلفة، يستخدم مُحسِّن الأداء هذه الأجزاء "الرخيصة" من عملية النقل لتحقيق أكبر تأثير من خلال تفضيل عمليات النقل التي تبلغ مسافتها 100 متر تقريبًا أو أكثر.

يمكنك الاطّلاع على هذا التأثير في مثالَي الحلّ. في حال تبديل التكلفة لكل كيلومتر إلى ما دون الحدّ الأدنى أو فوقه، تتغيّر تكاليف المسار:

تكلفة عالية تتجاوز الحدّ تكلفة عالية أقل من الحدّ الأدنى
الحل 1 الحل 2 الحل 1 الحل 2
عدد الكيلومترات التي تقلّ عن الحدّ الأدنى 0.45 0.38 0.45 0.38
التكلفة لكل كيلومتر أقل من الحدّ الأدنى 1.00 1.00 50.00 50.00
كيلومترات تتجاوز الحدّ 3.71 3.78 3.71 3.78
التكلفة لكل كيلومتر أعلى من الحدّ الأدنى 50.00 50.00 1.00 1.00
إجمالي التكلفة 185.95 189.38 26.21 22.78

في كل إصدار، يتم تمييز إجمالي التكلفة الأقل للحلَّين بخط عريض. يمكنك ملاحظة أنّه عند استخدام تكلفة عالية أعلى من الحدّ الأدنى، يصبح إجمالي تكلفة المسار الآن أعلى للمسار الذي يتم فيه تجميع الزيارات، وهو عكس ما أردت تحقيقه.