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

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

قبل البدء

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

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

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

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

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

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