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

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

قبل البدء

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

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

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

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

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

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