وضع نماذج لمنطق العمل باستخدام سمات الانتقال

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

قبل البدء

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

الانتقال هو جزء من المسار يربط موقعًا جغرافيًا بآخر.

يشير الموقع الجغرافي إلى أيّ من النقاط التالية في مسار المركبة:

  • نقطة بداية المسار
  • محطة يتم فيها استلام الطلب أو تسليمه
  • نقطة نهاية المسار

يمكنك تحديد جميع سمات الانتقال الخاصة بالتصميم من خلال إضافتها إلى القائمة ShipmentModel.transition_attributes. يحدّد كل عنصر في القائمة مجموعة واحدة من سمات الانتقال، ويتم مطابقته مع عمليات الانتقال في المسارات باستخدام علامات في الموقع الجغرافي لبداية الانتقال ونهايته. لمزيد من المعلومات حول سمات الانتقال، راجِع مستندات المرجع الخاصة بـ TransitionAttributes.

إنشاء نماذج لسيناريوهات من العالم الواقعي

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

حجز وقت لوقوف السيارة

في هذا السيناريو، على السائق إيقاف السيارة قبل أن يتمكّن من زيارة الموقع الجغرافي (أ). يقع الموقع الجغرافي (ب) في مكان قريب، ويمكن للسائق استخدام موقف السيارة نفسه في الزيارتين. إذا توجّه السائق إلى النقطة B مباشرةً بعد النقطة A، سيوفر الوقت لأنّه لن يحتاج إلى مغادرة مكان وقوف السيارة وإيقافها مرة أخرى. في واجهة برمجة التطبيقات Route Optimization API، يمكنك استخدام سمات الانتقال لإضافة وقت إضافي لإيقاف المركبة فقط عندما ينتقل السائق من مكان إيقاف إلى آخر.

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

اتّبِع الخطوات التالية لإجراء ذلك في طلب Route Optimization API:

  1. استخدِم VisitRequest.duration فقط للمدة اللازمة لإجراء الزيارة. على سبيل المثال، لتسليم الحزمة وجمع توقيع من العميل.

  2. لكل مكان مخصّص للاصطفاف مختلف مستخدَم في النموذج، استخدِم علامة جديدة غير مستخدَمة لأي شيء آخر في النموذج، مثل PARKING_123.

  3. أضِف هذه العلامة إلى ما يلي:

    1. VisitRequest.tags في جميع طلبات الزيارة التي تستخدم مكان وقوف السيارات هذا.

    2. Vehicle.start_tags إذا بدأت المركبة مسارها من مكان وقوف السيارات هذا.

    3. Vehicle.end_tags إذا بدأت المركبة رحلتها وانتهت في موقف السيارات هذا

  4. لكل علامة موقف سيارات جديدة، أضِف إدخالاً إلى ShipmentModel.transition_attributes يضيف تأخيرًا للموقف عند القدوم من موقف سيارات مختلف من خلال اتّباع الخطوات التالية:

    1. اضبط TransitionAttributes.excluded_src_tag وTransitionAttributes.dst_tag على PARKING_123.

    2. اضبط TransitionAttributes.delay على الوقت اللازم لإيقاف المركبة.

    على سبيل المثال، عندما تكون علامة الموقع الجغرافي PARKING_123 ويستغرق ركن المركبة 150 ثانية، يمكنك إضافة الإدخال التالي إلى ShipmentModel.transition_attributes:

    {
      "excluded_src_tag": "PARKING_123",
      "dst_tag": "PARKING_123",
      "delay": "150s"
    }
    

التنظيف الإلزامي في نهاية المسار

في هذا السيناريو، يجب تنظيف المركبة في نهاية المسار، مع الالتزام بالقيود الإضافية التالية:

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

يمكنك تصميم هذا الشرط من خلال السماح فقط بالمسارات التي تكون إما فارغة أو التي تمت زيارتها آخر مرة في منشأة تنظيف. في Route Optimization API، يمكنك إجراء ذلك من خلال حظر الانتقال إلى نقطة الطريق النهائية من أي موقع جغرافي باستثناء منشأة التنظيف أو نقطة بداية الطريق:

  1. اختَر علامتَين جديدتَين غير مستخدَمتَين في أي مكان في النموذج، مثل CLEANED وROUTE_END. يُستخدم الخيار الأول للمواقع الجغرافية التي تكون فيها المركبة نظيفة أو ستصبح كذلك، بينما يُستخدم الخيار الثاني لنهاية المسار.
  2. لكل مركبة، أضِف شحنة جديدة مخصّصة للتسليم فقط تمثّل الزيارة إلى مركز تنظيف مع السمات التالية:
    1. يجب تمثيل كل موقع جغرافي لمرفق التنظيف كطلب زيارة تسليم لهذه الشحنة.
    2. أضِف CLEANED إلى VisitRequest.tags لكل طلب زيارة لشحنة مرفق التنظيف. ويشير إلى أنّ المركبة التي تغادر هذا الموقع الجغرافي لا تنبعث منها أي انبعاثات. يجب ألا تستخدم طلبات الزيارة الأخرى في النموذج هذه العلامة حتى يتم اعتبار المركبة "غير نظيفة" عند مغادرتها.
    3. يمكنك السماح لأداة التحسين بتخطّي هذه الشحنة عندما لا تكون المركبة مستخدَمة لأي غرض آخر، وذلك من خلال ضبط قيمة penalty_cost على رقم صغير.
  3. أضِف CLEANED إلى Vehicle.start_tags لكل مركبة. يتم استخدام هذه السمة للإشارة إلى أنّ المركبة نظيفة قبل أن تبدأ في تنفيذ أي عمليات استلام أو تسليم، على افتراض أنّه تم تنظيفها في نهاية يوم العمل السابق، وللسماح لها بالانتقال من نقطة البداية مباشرةً إلى نقطة النهاية. وحتى إذا لم تحدث هذه المسارات في الواقع، فإنّ السماح بهذا السيناريو يساعد أداة التحسين في البحث عن مسارات محسّنة بكفاءة أكبر.

  4. أضِف ROUTE_END إلى Vehicle.end_tags لكل مركبة.

  5. أضِف إدخالاً جديدًا إلى ShipmentModel.transition_attributes يمنع المركبات من الوصول إلى نقطة طريق نهاية المركبة عندما تكون غير نظيفة، مع السمات التالية:

    1. اضبط السمة TransitionAttributes.excluded_src_tag على CLEANED.

    2. اضبط السمة TransitionAttributes.dst_tag على ROUTE_END.

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

    على سبيل المثال، عندما يكون المقياس الزمني للنموذج يوم عمل واحد، يمكنك استخدام تأخير لمدة 24 ساعة (86400 ثانية) لمنع الانتقال إلى نهاية المسار من أي مكان باستثناء مرفق التنظيف وبداية المسار:

    {
      "excluded_src_tag": "CLEANED",
      "dst_tag": "ROUTE_END",
      "delay": "86400s"
    }
    

كيفية الاختيار بين التأخير والتكاليف

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

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

يستخدم مثال ركن السيارة تأخيرًا قصيرًا يتوافق مع الوقت الإضافي اللازم لركن السيارة. يمكنك أيضًا استخدام التكاليف مع التأخيرات، إذا توقّف السائق في موقف سيارات مدفوع.

كيفية إضافة سمة انتقال تطابق جميع طلبات الزيارات

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

لا يمكنك حذف العلامات، لأنّ كل رسالة TransitionAttributes يجب أن تتضمّن إحدى العلامات TransitionAttributes.src_tag وTransitionAttributes.excluded_src_tag، وإحدى العلامات TransitionAttributes.dst_tag وTransitionAttributes.excluded_dst_tag.

ومع ذلك، يمكنك مطابقة جميع العلامات من خلال ضبط TransitionAttributes.excluded_src_tag أو TransitionAttributes.excluded_dst_tag على علامة غير مستخدَمة في أي مكان في النموذج. سيؤدي ذلك إلى مطابقة جميع المواقع الجغرافية التي لا تحتوي على هذه العلامة، ولكن بما أنّك اخترت عمدًا علامة لا يستخدمها أي موقع جغرافي، ستتطابق سمات الانتقال هذه مع جميع المواقع الجغرافية.

محتوى إضافي للقراءة