توضّح هذه الصفحة دورة حياة خطة مسار باستخدام واجهة برمجة التطبيقات 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) الخاصة بخدمة Navigation، أو توفير روابط لصفحات معيّنة في تطبيق "خرائط Google" المخصّص للمستهلكين.
- حزمة تطوير البرامج للتنقّل: إذا كان لديك تطبيق مخصّص للسائقين، يمكنك دمج حزمة تطوير البرامج للتنقّل على أجهزة Android أو iOS للحصول على إرشادات مفصّلة داخل التطبيق.
يمكنك دمج معلومات المهمة من استجابة واجهة برمجة التطبيقات في نظامك واستخدام حزمة SDK للتنقّل. لتمرير المسارات من الردّ الذي تقدّمه واجهة برمجة التطبيقات إلى حزمة تطوير البرامج (SDK)، اضبط
populateTransitionPolylines: trueفي طلبك. يؤدي ذلك إلى إنشاءrouteTokenلكل انتقال في الرد. - Fleet Engine: لإدارة الأساطيل المتقدّمة، يمكنك استيراد خطة المسار التي تم إنشاؤها بواسطة واجهة برمجة التطبيقات إلى Fleet Engine لتتبُّع تنفيذ المسار في الوقت الفعلي. في حين توفّر واجهة برمجة التطبيقات خطًا متعدد الأضلاع للمسار المقصود من أجل التقييم، تربط خدمة Fleet Engine تسلسل الزيارات المخطّط له بتتبُّع المركبة المباشر.