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

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

قبل البدء

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

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

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

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

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

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

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

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

في هذا السيناريو، على السائق ركن السيارة قبل أن يتمكّن من زيارة الموقع الجغرافي (أ). يقع الموقع الجغرافي (ب) في مكان قريب، ويمكن للسائق استخدام موقف السيارة نفسه في الزيارتين. إذا توجّه السائق إلى النقطة "ب" مباشرةً بعد النقطة "أ"، سيوفر الوقت لأنّه لن يحتاج إلى مغادرة مكان وقوف السيارة وإيقافها مرة أخرى. في واجهة برمجة التطبيقات 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 على علامة غير مستخدَمة في أي مكان في النموذج. سيؤدي ذلك إلى مطابقة جميع المواقع الجغرافية التي لا تحتوي على هذه العلامة، ولكن بما أنّك اخترت عمدًا علامة لا يستخدمها أي موقع جغرافي، ستتطابق سمات الانتقال هذه مع جميع المواقع الجغرافية.

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