توضّح هذه الصفحة دورة حياة خطة المسار باستخدام Route Optimization API، بدءًا من تحديد احتياجات المسار وانتهاءً بخطة مسار متكاملة في نظامك.
عندما تتبع مراحل خطة المسار، يمكنك تحقيق الأهداف التالية:
- تحديد عمليات الأسطول: يمكنك ترجمة أسطولك الفعلي والقيود المعقّدة وأهداف النشاط التجاري إلى رمز لواجهة برمجة التطبيقات.
- تحسين خطط المسارات لنشاطك التجاري: تعرَّف على كيفية تحسين خطة المسار لتلبية أهدافك وتحسين عملياتك اليومية.
- النشر في مرحلة الإنتاج: يمكنك تنفيذ خطة المسار من خلال تضمينها في عملياتك اليومية.
يوضّح المخطّط البياني التالي دورة حياة خطة المسار.
تبدأ مرحلة التنفيذ لخطة المسار عند دمج واجهة برمجة التطبيقات لأول مرة أو عند حدوث تغيير كبير في متطلبات نشاطك التجاري. ويغطي المراحل من 1 إلى 5.
تكون مرحلة العمليات اليومية أكثر بساطة، ويكون التحسين في حده الأدنى. ويشمل المراحل من 2 إلى 4.
في ما يلي مراحل دورة حياة المسار:
- تحديد نطاق المشكلة: حدِّد أهدافك ومواردك ومهامك والقيود التي تواجهها ونظِّمها للحصول على صورة كاملة عن عملياتك قبل البدء في استخدام واجهة برمجة التطبيقات.
- تحديد بياناتك: يمكنك ترجمة واقع نشاطك التجاري إلى مَعلمات واجهة برمجة التطبيقات لتعكس خطة المسار طريقة تشغيل أسطولك.
- إنشاء طلب والحصول على خطة مسار: أدخِل بياناتك في واجهة برمجة التطبيقات واحصل على خطة مسار محسّنة.
- تحسين خطة المسار: اختبِر خطة المسار وكرِّرها من خلال تعديل القيود والأهداف للتأكّد من أنّها تغطي جميع احتياجاتك.
- دمج خطة المسار: يمكنك ربط خطة المسار بأنظمتك الحالية لتوفير ميزة تنقّل قابلة للتنفيذ.
تحديد نطاق مشكلتك
قبل استخدام واجهة برمجة التطبيقات، عليك تنظيم تفاصيل عملياتك اليومية في فئات بيانات واضحة. يتيح لك ذلك بدء عملية التنفيذ بوضوح بشأن الموارد والمهام الحالية، وما يقيّدها، والأهداف التي تريد تحقيقها من خلال أسطولك.
تحديد الموارد والمهام
من الخطوات المهمة عند التخطيط لمسارك تحديد الموارد والمهام، وهي المركبات والشحنات.
| المركبات | الشحنات |
|---|---|
|
|
تحديد القيود
القيود هي الحدود والشروط المفروضة على كيفية استخدام المركبات والتعامل مع الشحنات. فهي تحدد معظم عملياتك وهي حيوية عند إنشاء خطة مسار محسّنة.
تندرج القيود بشكل عام ضمن فئتَين:
| القيود الصارمة | القيود المرنة |
|---|---|
| وهذه الحدود لا يمكن تجاوزها. على سبيل المثال، لا يمكن للشاحنة أن تحمل وزنًا أكبر من سعتها القصوى، ولا يمكن للسائق استلام شحنة بعد إغلاق المتجر. | وهي الإعدادات المفضّلة التي يمكن مخالفتها إذا لزم الأمر، وعادةً ما تكون بتكلفة جزائية. على سبيل المثال، قد تفضّل تحميل شاحنة بنسبة% 80 فقط من سعتها، أو التسليم قبل وقت مستهدَف، ولكن لا مانع لديك من تجاوز هذه الحدود للحصول على مسار أفضل. |
تشمل القيود الشائعة ما يلي:
- حدود السعة: الحد الأقصى للوزن أو الحجم أو عدد السلع التي يمكن للمركبة حملها
- الفترات الزمنية: هي الفترات الزمنية المحدّدة التي يكون فيها الموقع الجغرافي مفتوحًا للزيارة، أو ساعات المناوبة المحدّدة للسائق.
- التكاليف: تكلفة تشغيل مركبة أو تخطّي شحنة من الأهداف الرئيسية لواجهة برمجة التطبيقات هو إنشاء خطة مسار فعّالة من حيث التكلفة.
- فترات استراحة السائق: هي فترات استراحة السائق التي تتطلّبها عادةً قوانين العمل بعد عدد معيّن من ساعات العمل.
تحديد أهدافك التجارية
بعد تحديد الموارد والمهام والقيود، يحين الوقت لتحديد المقاييس الأكثر أهمية لمؤسستك. تتكامل هذه الأهداف مع القيود، وتساعدك في تحديد ما يهمك أكثر عند التخطيط لمسار.
في ما يلي بعض الأمثلة على الأهداف التجارية:
| حجم الأسطول | المسافة | الوقت | التكلفة |
|---|---|---|---|
| هل تريد تقليل عدد المركبات المستخدَمة، أم استخدام أسطولك بالكامل لإنهاء يوم العمل في وقت مبكر؟ | هل تريد أقصر مسار لتوفير الوقود، أم تفضّل مسارًا أسرع قد يكون أطول بسبب استخدام الطرق السريعة؟ | هل تريد تقليل إجمالي ساعات العمل، أو إعطاء الأولوية للوصول في أوقات محددة يمكن أن تطيل الوقت الذي تقضيه في الطريق؟ | هل تريد تقليل النفقات التشغيلية مثل الأجور والوقود، أم قبول تكاليف أعلى للوفاء بالمواعيد النهائية الصارمة؟ |
تعيين بياناتك
بعد جمع بياناتك، عليك ربطها لتتطابق مع سمات واجهة برمجة التطبيقات. يوفّر ذلك لأداة التحسين جميع المعلومات اللازمة لعرض خطة مسار تأخذ في الاعتبار واقع نشاطك التجاري.
استخدِم المَعلمات في الجداول التالية لربط الموارد والمهام والقيود والأهداف التي ربطتها في قسم تحديد نطاق المشكلة.
تعيين المتغيّرات
| مفهوم من الواقع | مَعلمة واجهة برمجة التطبيقات | الوصف |
|---|---|---|
| السائق أو المركبة | model.vehicles[] |
تمثّل هذه الفئة مركبة واحدة في أسطولك. |
| المواقع الجغرافية للمستودعات |
vehicles[].startWaypointvehicles[].endWaypoint
|
الموقع الجغرافي الذي تبدأ منه المركبة مسارها وتنتهي فيه |
| ساعات العمل |
model.globalStartTimemodel.globalEndTime
|
أقرب وقت بدء وآخر وقت انتهاء لعملية الأسطول بأكمله. |
| المهمة أو الحزمة | model.shipments[] |
تمثّل هذه السمة وظيفة. يمكن أن يكون pickup أو delivery أو كليهما. |
| الموقع الجغرافي للمهمة |
pickups[].arrivalWaypointdeliveries[].arrivalWaypoint
|
الموقع الجغرافي الذي يتم فيه تنفيذ الوظيفة |
| وقت الخدمة |
pickups[].durationdeliveries[].duration
|
الوقت المستغرَق في الموقع الجغرافي لإكمال المهمة (على سبيل المثال، تفريغ الحمولة)، ولا يشمل ذلك مدة الرحلة. |
ربط القيود
| قيود العالم الحقيقي | مَعلمة واجهة برمجة التطبيقات | الوصف |
|---|---|---|
| سعة المركبة | vehicles[].loadLimits |
يضبط هذا الإجراء الحدّ الأقصى أو الأدنى لسعة المركبة. إذا تجاوزت قيمة loadDemand للشحنة الحدّ المتبقي، لن يتم تعيينها. |
| حجم الطرد | shipments[].loadDemands |
مقدار سعة المركبة التي تستهلكها الشحنة |
| القيود المفروضة على المركبات | shipments[].allowedVehicleIndices |
يفرض قيودًا على شحنة معيّنة بحيث لا يمكن استلامها أو تسليمها إلا من خلال مركبات أو سائقين محدّدين. |
| ساعات التوفر | shipments[].pickups[].timeWindows أو shipments[].deliveries[].timeWindows |
تحدّد هذه السمة الساعات المتاحة لزيارة موقع جغرافي معيّن. إذا تعذّر وصول مركبة خلال هذه الفترة الزمنية، يتم تخطّي الشحنة. |
| الحد الأقصى لمدة المناوبة | vehicles[].routeDurationLimit |
تحدّد هذه السمة حدًا أقصى صارمًا أو مرنًا لمدة عمل سائق معيّن (على سبيل المثال، 8 ساعات كحد أقصى)، بغض النظر عن وقت الانتهاء العام. |
| فترات استراحة السائق | vehicles[].breakRule |
يفرض قواعد راحة محدّدة، مثل فترات الراحة الإلزامية بعد ساعات عمل معيّنة. |
| القيود المفروضة على الطرق | vehicles[].travelMode |
تحدّد وسيلة النقل (على سبيل المثال، DRIVE أو BICYCLE). يؤدي ذلك إلى حصر المسار بالطرق القانونية ويحدّد السرعات المستخدَمة لاحتساب مدة الرحلة. |
ربط الأهداف
| الهدف الواقعي | مَعلمة واجهة برمجة التطبيقات | الوصف |
|---|---|---|
| تقليل حجم الأسطول | vehicles[].fixedCost |
تطبّق هذه السمة تكلفة لمرة واحدة مقابل استخدام مركبة. تفرض التكلفة الثابتة العالية على المسار إعطاء الأولوية لاستخدام عدد أقل من المركبات بدلاً من زيادة إجمالي المسافة أو وقت العمل. |
| تقليل المسافة | vehicles[].costPerKilometer |
يتم تطبيق تكلفة لكل كيلومتر يتم قطعه. يمنح الأولوية للمسارات الأقصر لتوفير الوقود وتقليل تآكل الإطارات. |
| تقليل الوقت الإجمالي | vehicles[].costPerHour |
تطبّق هذه السمة تكلفة لكل ساعة تكون فيها المركبة نشطة (بما في ذلك وقت السفر وأوقات الانتظار). يتم إعطاء الأولوية لإكمال المهام بشكل أسرع. |
| تقليل وقت القيادة | vehicles[].costPerTraveledHour |
يتم تطبيق تكلفة خاصة بالوقت المستغرَق في التنقّل. يساعد ذلك في التمييز بين الانتظار في حركة المرور (مكلف) والانتظار في محطة(قد يكون أرخص). |
| تحديد أولويات مهام معيّنة | shipments[].penaltyCost |
تطبّق هذه السمة تكلفة في حال تخطّي شحنة معيّنة. يضمن ضبط هذا الإعداد على مستوى عالٍ منح الأولوية للمهام المهمة على حساب المهام الاختيارية. |
إنشاء الطلب والحصول على رد
يتضمن استخدام Route Optimization API لإنشاء خطة مسار الخطوات التالية:
- إعداد بيئتك: يمكنك إعداد مشروعك على Google Cloud وتفعيل واجهة برمجة التطبيقات وضبط المصادقة. للحصول على التعليمات، يُرجى الاطّلاع على البدء. ما عليك سوى اتّباع هذه الخطوة مرة واحدة.
- إرسال الطلب: أنشئ نص الطلب باستخدام تعيين البيانات المحدّدة في القسم السابق. للحصول على معلومات عن نقاط النهاية والعناوين وتنسيق الطلبات، يُرجى الاطّلاع على إرسال طلب بيانات من واجهة برمجة التطبيقات.
- فهم الردّ: بعد تلقّي ردّ من واجهة برمجة التطبيقات، عليك فهم خطة المسار ومعنى كل مَعلمة. يُرجى الاطّلاع على تفسير الردّ.
تحسين خطة المسار
إنّ ترجمة الخدمات اللوجستية الواقعية إلى تكاليف وقيود لواجهة برمجة التطبيقات هي مهمة معقّدة. قد لا تتطابق خطة المسار الأولية مع أهداف نشاطك التجاري أو توقعات السائق. تحسين خطة المسار هي عملية تكرارية لاختبار المسارات التي تم عرضها وتعديل المَعلمات إلى أن يتم العثور على إعداد يحقّق أهدافك.
تعديل الأهداف والقيود
إذا لم تلبِّ خطة المسار التي تم إنشاؤها احتياجاتك، يمكنك تعديل بعض المَعلمات لتحقيق نتائج مختلفة. يؤدي تضييق المَعلمات أو توسيعها إلى تغيير كيفية حلّ الأهداف المتعارضة في خطة المسار، ويُعدّ توسيع المَعلمات طريقة فعّالة لاكتشاف المَعلمات التي تسبّب أخطاء في خطط المسارات.
يسرد الجدول التالي مشاكل المسارات الشائعة والمَعلمات التي يمكنك تعديلها لحلّها.
| السيناريو | المَعلمة | التعديل | الوصف |
|---|---|---|---|
| تم تخطّي شحنة مهمة | shipments[].penaltyCost |
زيادة قيمتها أو إضافة تكاليف جزائية إلى الشحنات الأخرى | إذا كانت الشحنة اختيارية، يمكنك زيادة تكلفة الغرامة لإعطائها الأولوية. إذا كانت الشحنة إلزامية (لا تتضمّن تكلفة غرامة)، أضِف تكاليف الغرامة إلى الشحنات الأخرى الأقل أهمية. وهذا يجعلها اختيارية، ما يوفّر وقت المركبة وسعتها للشحنة المهمة. |
| تم تخطّي الشحنة بسبب التوقيت | softStartTime / softEndTime |
إضافة نوافذ زمنية مرنة | تؤدي الفترات الزمنية الصارمة إلى إسقاط المهام التي تتأخر ولو دقيقة واحدة. تسمح النوافذ المرنة للسائق بالوصول متأخرًا قليلاً عن الجدول الزمني من خلال دفع "تكلفة" بدلاً من عدم إكمال المهمة. |
| تم تخطّي الشحنة بسبب الوزن | loadLimits[].softMaxLoad وcostPerUnitAbove |
إضافة متطلبات التحميل المرن | يسمح هذا الإعداد للمركبة بتجاوز سعتها المثالية قليلاً (مقابل غرامة) بدلاً من ترك طرد خلفها. |
| تم تخطّي الشحنة بسبب زيادة الحمل على الأسطول | model.vehicles[] أو shipments[].timeWindows |
إضافة مركبات أو توسيع النوافذ الزمنية | إذا كان هناك عدد كبير جدًا من الشحنات لأسطول المركبات الحالي، خاصةً خلال ساعات الذروة، أضِف المزيد من المركبات أو وسِّع فترات التسليم لتوزيع عبء العمل. |
| المسارات طويلة جدًا أو غير فعّالة | vehicles[].costPerKilometer / costPerHour |
إضافة تكاليف أو زيادة قيمتها | يُعلم واجهة برمجة التطبيقات بأنّ السفر مكلف، ما يشجّعها على تجاهل محطات التوقف البعيدة والمعزولة لإنشاء مسارات أكثر تقاربًا لأسطول المركبات. |
| نوبات عمل السائقين طويلة جدًا | vehicles[].routeDurationLimit أو model.vehicles[] |
إضافة حدود للمدة أو إضافة مركبات وحدود | يفرض حدًا أقصى صارمًا (على سبيل المثال، 8 ساعات) على إجمالي الوقت الذي يقضيه السائق على الطريق. لن تؤدي إضافة المركبات وحدها إلى تقصير المسارات ما لم تطبّق أيضًا حدودًا للمدة لإجبار أداة الحلّ على توزيع عبء العمل على الأسطول الأكبر. |
تعديل خطة مسار
غالبًا ما تحتاج إلى تعديل خطة مسار مع الحفاظ على الأساس نفسه، مثل إضافة عملية استلام إلى جدول السائق النشط. لإجراء ذلك، استخدِم مَعلمات الإدخال التي تزوّد واجهة برمجة التطبيقات بنقطة بداية استنادًا إلى الحلّ السابق، ما يسمح لها بتعديل الخطة الحالية بدلاً من احتساب خطة جديدة من البداية.
في ما يلي الطرق المختلفة التي يمكنك من خلالها تعديل خطة مسار باستخدام مَعلمات الحقن:
- مرِّر المسارات من استجابة سابقة إلى حقل
injectedFirstSolutionRoutesفي طلبك الجديد. يؤدي ذلك إلى تسريع عملية البحث عن التحسينات، وهو مفيد لإعادة التخطيط قبل بدء العمليات اليومية، مثل دمج الشحنات في اللحظة الأخيرة. - يمكنك التحكّم في درجة التغيير باستخدام حقل
injectedSolutionConstraint. يكون ذلك مفيدًا عندما تكون العمليات جارية، ما يتيح لك الحفاظ على التسلسل الحالي للسائق أو إصلاح أجزاء من الخطة التي تم تنفيذها. - تأكَّد من أنّ المسار المعدَّل لا يزال مخصّصًا للمركبة الصحيحة من خلال ضبط
interpretInjectedSolutionsUsingLabelsعلىtrue. هذا مفيد في التجربة عند إضافة أو إزالة الشحنات والمركبات، لأنه يطابق المسارات باستخدام التصنيفات بدلاً من الفهارس. يتطلب ذلك أن تكون جميع تصنيفات المركبات والشحنات فريدة.
دمج خطة المسار
خطة المسار النهائية هي عنصر بيانات يمثّل إدارة محسّنة لمواردك ومهامك، مع الالتزام بالقيود والأهداف. استخدِم خطة المسار هذه في عملياتك اليومية من خلال دمجها في نظامك. يتضمّن ذلك عادةً عرض خطة المسار لمدراء الأساطيل وإرسال اتّجاهات مفصّلة إلى السائقين.
التمثيل البصري
للسماح لمديري الأساطيل بالتحقّق من خطة المسار ومراقبتها، يمكنك عرض خطة المسار بالطرق التالية:
للسماح لمديري الأساطيل بالتحقق من خطة مسارك ومراقبتها، يمكنك عرضها على خريطة لوحة المعلومات. بناءً على مرحلة التطوير الحالية، يمكنك تصوّر خطة المسار بالطرق التالية:
- الاستكشاف بدون رمز: يمكنك استخدام تطبيق تحسين المسار المفتوح المصدر لمعرفة كيفية ترجمة واجهة برمجة التطبيقات لبياناتك إلى مسارات فعلية على الخريطة. يُعدّ تطبيق الويب هذا أداة استكشافية تتيح لك إنشاء سيناريوهات وضبط مَعلمات القيود وعرض خطط المسارات الناتجة بشكل مرئي قبل كتابة أي رمز برمجي.
- عرض ترتيب الزيارات: يمكنك عرض تسلسل الزيارات كنقاط مرقّمة على خريطة لتقييم خطط التحسين والإرسال في نظامك الخاص. لإجراء ذلك، ابحث عن الصفيفة
visitsداخل كل مسار في الردّ من واجهة برمجة التطبيقات. يتم ترتيب العناصر في هذه المصفوفة تمامًا كما يجب أن ينفذها السائق. يمكنك تكرار هذه القائمة واستخدامshipmentIndexلاسترداد إحداثيات الموقع الجغرافي لكل محطة، واستخدام مكتبة الخرائط لعرض علامات مرقّمة على الخريطة استنادًا إلى ترتيبها في القائمة. - رسم المسار الفعلي: يمكنك عرض المسار المخطَّط له بدقة على خريطة لفهم سبب اختيار المحسِّن لتسلسل معيّن. يمثّل هذا الشكل المتعدّد الخطوط المسار المقصود للتخطيط والتقييم، وليس المسار في الوقت الفعلي الذي يسلكه السائق. اضبط
populatePolylines: trueفي طلبك للحصول على حقلencodedPolylineلكل مسار، وفك ترميزه باستخدام طريقةgoogle.maps.geometry.encoding.decodePath()من Maps JavaScript API.
إرسال الطلبات إلى السائقين
يمكنك دمج الاتجاهات المفصّلة في تطبيق السائق باستخدام حزمة تطوير البرامج (SDK) للتنقّل، أو توفير روابط لصفحات معيّنة في تطبيق المستهلك في "خرائط Google".
- حزمة تطوير البرامج للتنقّل: إذا كان لديك تطبيق مخصّص للسائقين، يمكنك دمج حزمة تطوير البرامج للتنقّل على أجهزة Android أو iOS للحصول على إرشادات مفصّلة داخل التطبيق.
يمكنك دمج معلومات المهمة من الردّ من واجهة برمجة التطبيقات في نظامك
واستخدام حزمة تطوير البرامج (SDK) للتنقّل. لتمرير المسارات من الردّ من واجهة برمجة التطبيقات إلى حزمة تطوير البرامج (SDK)، اضبط
populateTransitionPolylines: trueفي طلبك. يؤدي ذلك إلى إنشاءrouteTokenلكل انتقال في الردّ. - Fleet Engine: لإدارة الأسطول بشكل متقدّم، يمكنك استيراد خطة المسار التي أنشأتها واجهة برمجة التطبيقات إلى Fleet Engine لمراقبة تنفيذ المسار في الوقت الفعلي. في حين توفّر واجهة برمجة التطبيقات خطوطًا متعدّدة للمسار المقصود لتقييمه، يربط Fleet Engine تسلسل الزيارات المخطّط له بتتبُّع المركبات في الوقت الفعلي.