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

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

قبل البدء

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

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

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

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

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

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