مصفوفة المسافات هي شبكة من أزمنة السفر والمسافات بين عدة نقاط انطلاق وعدة وجهات. هي بنية البيانات وراء كل ترتيب لـ"أقرب متجر"، وكل قرار توزيع توصيل، وكل حلّال أمثلة للمسارات. كلما كان على تطبيق ما اختيار الأفضل من بين عدة مرشحين بحسب زمن القيادة، فإن مصفوفة مسافات تقوم بالعمل من تحت.
يشرح هذا الدليل ما هي مصفوفة المسافات فعلًا، وكيف يختلف زمن السفر عن المسافة المستقيمة، وأين تظهر المصفوفات في أنظمة الإنتاج، وأي العقبات تنال من الفرق حين تكبر مجموعة المُدخلات إلى أكثر من حفنة من النقاط.
ما هي مصفوفة المسافات فعلًا
في أبسط أشكالها، مصفوفة المسافات جدول ثنائي الأبعاد. الصفوف هي نقاط الانطلاق، الأعمدة هي الوجهات، وكل خلية تحتوي رقمين: مسافة ومدة زمنية. مع N نقطة انطلاق وM وجهة، تحتوي المصفوفة على N×M خلية. طلب من 25 سائقًا و25 مهمة يُنتج 625 خلية في استدعاء واحد.
القيم في تلك الخلايا تأتي من محرك توجيه يسير على رسم بياني لشبكة طرق حقيقية. يختار أسرع مسار من كل نقطة انطلاق إلى كل وجهة، ويجمع تكاليف المقاطع، ويُعيد المجموع. هذا يختلف جوهريًا عن حساب الهافرسين، الذي يرسم خطًا مستقيمًا بين إحداثيتين ويتجاهل أن المباني والأنهار والشوارع باتجاه واحد موجودة فعلًا.
زوج إحداثيات يُخبرك بمكان نقطتين. مصفوفة المسافات تُخبرك بما يكلّف فعلًا الوصول بينهما.
المسافة مقابل المدة
ثلاثة أرقام مختلفة تُسمَّى غالبًا "مسافة"، وخلطها هو أكثر الأخطاء شيوعًا في كود التوجيه.
مسافة الهافرسين هي مسافة الدائرة العظمى بين زوجي خط العرض وخط الطول. سريعة الحساب، لا تتطلب استدعاء شبكة، وخاطئة لأي مهمة تتضمن قيادة. مسافة هافرسين تساوي 2 كم قد تتحول إلى قيادة 7 كم حين تأخذ في الحسبان النهر الذي لا يمكنك عبوره.
مسافة شبكة الطرق هي طول المسار القابل للقيادة الفعلي. تأخذ في الحسبان الشوارع باتجاه واحد وقيود الانعطاف وطوبولوجيا رسم الطرق. هذا ما تُعيده API مصفوفة المسافات في حقل distance.
المدة مع حركة المرور هي الوقت الذي ستستغرقه الرحلة بناءً على ظروف حركة المرور الحالية أو المتوقعة. مقطع طريق سريع طوله 12 كم يستغرق ست دقائق في 02:00 وخمسًا وعشرين دقيقة في 17:30. أنظمة الإنتاج التي تهتم بالأوقات المتوقعة للوصول تطلب مدة واعية بحركة المرور وتُمرر وقت المغادرة كي يستطيع محرك التوجيه نمذجة الازدحام بشكل صحيح.
للترتيب والتوزيع، المدة تتفوق دائمًا تقريبًا على المسافة. السائق لا يكترث بأن المهمة الأقرب أبعد بـ800 متر إن كان ذلك سيختصر أربع دقائق من القيادة.
أين تظهر مصفوفات المسافات
مصفوفات المسافات تعمل بهدوء تحت معظم ميزات اللوجستيات والميزات الواعية بالموقع.
- إسناد سائقي التوصيل: كل طلب معلق يُطابَق مع كل سائق متاح. يختار الموزِّع الخلية ذات أقل مدة بحيث تحترم سعة المركبة وقيود الورديات
- توزيع الأساطيل وإعادة توازنها: منصات النقل التشاركي والميل الأخير تحسب مصفوفات بين المركبات ومناطق الطلب كل بضع ثوانٍ لإبقاء السيارات قريبة من الركاب
- ترتيب موقع المتاجر والأماكن: بدلًا من إعادة أقرب خمسة متاجر بحسب الهافرسين، يحسب محدد الموقع مصفوفة صغيرة من موقع المستخدم إلى المرشحين ويرتبهم بحسب زمن القيادة
- حسابات الأوقات المتوقعة للوصول على نطاق واسع: الأسواق التي بها طلبات متزامنة كثيرة تجمع الأوقات المتوقعة في استدعاءات مصفوفة بدلًا من إطلاق آلاف الطلبات الفردية للتوجيه
- حلّالات VRP: حلّالات مسائل توجيه المركبات (OR-Tools، jsprit، الحلّالات التجارية) تتطلب مصفوفة تكلفة كاملة كمدخل. جودة حل التوجيه محدودة بجودة المصفوفة التي تُغذيها بها
- اختيار المواقع وتخطيط المناطق: يحسب المحللون مصفوفات بين المواقع المرشحة وتجمعات العملاء لاختيار المستودع الذي يُقلّل إجمالي زمن القيادة
في كل هذه، المصفوفة هي بدائية الحساب بالجملة. هي ما يُتيح لنظام أن يستدل على "الأفضل من بين الكثير" دون دفع تكلفة N×M استدعاء توجيه فردي.
عقبات في الإنتاج
مصفوفات المسافات سهلة في اليوم الأول وتزداد صعوبتها بسرعة.
عدم التماثل هو الأصل. شبكات الطرق الحقيقية تحتوي على شوارع باتجاه واحد، وطرق مُقسَّمة، وتكاليف انعطاف غير متماثلة. الخلية في (A, B) نادرًا ما تساوي الخلية في (B, A). معاملة المصفوفة على أنها متماثلة لتوفير الذاكرة هي أحد الأسباب الكلاسيكية للتوجيه الخاطئ في أنظمة التوزيع.
تكلفة N×M. مصفوفة 100×100 هي 10,000 خلية. مصفوفة 500×500 هي 250,000 خلية. التكاليف وزمن الاستجابة تنمو بشكل تربيعي. معظم أنظمة الإنتاج تُجزّئ المصفوفات إلى قطع (50×50 أو 100×100)، وتُوازي الطلبات، وتُخزّن مؤقتًا النتائج التي لا تتغير غالبًا، مثل المصفوفة بين مجموعة ثابتة من المستودعات ومجموعة ثابتة من المتاجر.
تباين الوقت من اليوم. مصفوفة محسوبة في 03:00 ليست صالحة في 17:00. إذا كان منطق التوزيع لديك يعتمد على حركة المرور، إما أن تطلب مصفوفة واعية بحركة المرور وقت اتخاذ القرار، أو احسب مسبقًا مجموعة صغيرة من المصفوفات المُجزَّأة زمنيًا (ذروة الصباح، خارج الذروة، ذروة المساء) واختر الصحيحة.
الجمع وحدود المعدل. واجهات API لمصفوفة المسافات تحاسب لكل عنصر، لا لكل طلب، ومعظم المزودين يضعون حدًا لحجم الاستدعاء الواحد. خطّط للتجزئة وللحد من الضغط من اليوم الأول بدلًا من اكتشاف ذلك على نطاق واسع.
جودة الإحداثيات في المُدخل، نفايات في المُخرج. المصفوفة جيدة بقدر جودة الإحداثيات التي تُغذيها. ترميز جغرافي وقع على الجانب الخاطئ من طريق سريع مُقسَّم سيُنتج مدة خاطئة بشكل كبير. تحقق من إحداثيات الإدخال قبل دخولها طلب المصفوفة.
مصفوفات المسافات في MapAtlas
تحسب MapAtlas Distance Matrix API مصفوفات N×M كاملة من أزمنة السفر والمسافات على شبكة طرق أوروبية وعالمية حقيقية. تدعم ملفات السيارات والشاحنات والدراجات والمشاة، وتقبل الطلبات الواعية بحركة المرور مع وقت مغادرة، وهي مبنية لأحجام الدفعات التي تحتاجها أعباء التوزيع والأمثلة الحقيقية.
لأعباء العمل التي تتجاوز الترتيب، تتكامل Distance Matrix API بشكل طبيعي مع Optimize Route API، التي تأخذ مصفوفة ومجموعة محطات وتُعيد مسارًا مُرتَّبًا يُقلّل إجمالي زمن القيادة، ومع Isochrone API لمرشحات "كل شيء يمكن الوصول إليه خلال X دقيقة" التي تُقلّص مجموعة المرشحين قبل استدعاء المصفوفة.
مصفوفة المسافات ليست ملفتة. هي مجرد شبكة من الأرقام. لكنها شبكة الأرقام التي تحول "ابحث عن الأفضل من بين الكثير" من كابوس توجيه N×M إلى طلب جماعي واحد، وضبط هذه القطعة الواحدة من البيانات بشكل صحيح هو ما يفصل بين منتج لوجستي حقيقي وعرض توضيحي بخمسة دبابيس على خريطة.
الأسئلة الشائعة
ما هي مصفوفة المسافات؟
مصفوفة المسافات هي شبكة بأبعاد N×M من أزمنة السفر والمسافات بين مجموعة من نقاط الانطلاق ومجموعة من الوجهات. كل خلية تُجيب على سؤال واحد: كم تستغرق الرحلة من نقطة الانطلاق i إلى الوجهة j، وكم المسافة. واجهات API الحديثة لمصفوفة المسافات تحسب القيم على شبكة طرق حقيقية بدلًا من المسافات الهوائية المستقيمة، فتأخذ في الحسبان الشوارع باتجاه واحد وقيود الانعطاف والهندسة القابلة للتوجيه.
ما الفرق بين المسافة والمدة الزمنية؟
المسافة هي طول السفر على شبكة الطرق بالأمتار أو الكيلومترات. المدة الزمنية هي الوقت الذي يستغرقه ذلك بالثواني، مع مراعاة حدود السرعة وحركة المرور وفئة الطريق. الاثنان ليسا قابلين للاستبدال. مساران قد يكون لهما نفس المسافة ومدتان مختلفتان جدًا، ومعظم حالات الاستخدام في الإنتاج (الوقت المتوقع للوصول، التوزيع، الترتيب) تهتم بالمدة. واجهة API جيدة لمصفوفة المسافات تُعيد كليهما لكل خلية.
متى ينبغي استخدام مصفوفة المسافات بدلًا من المسارات الفردية؟
استخدم مصفوفة المسافات كلما احتجت إلى مقارنة عدة مرشحين: ترتيب أقرب خمسة متاجر من بين خمسين، أو إسناد توصيلة إلى أقرب سائق متاح من بين عشرين، أو تغذية حلال مسائل توجيه المركبات. استدعاء نقطة طرف توجيه مفردة N×M مرة بطيء ومكلف. نقطة طرف المصفوفة تُعيد البيانات نفسها في طلب واحد، مُحسَّنة للحساب بالجملة.
هل مصفوفات المسافات متماثلة؟
نادرًا جدًا في شبكات الطرق الحقيقية. القيادة من A إلى B نادرًا ما تساوي القيادة من B إلى A بسبب الشوارع باتجاه واحد، والطرق السريعة المُقسَّمة، وقيود الانعطاف، وحركة المرور غير المتماثلة. واجهة API إنتاجية لمصفوفة المسافات تُعيد شبكة N×M كاملة، لا نصفًا مثلثيًا. إن قمت بتقليص المصفوفة لتوفير الذاكرة، فستوجّه السائقين على الجانب الخاطئ من الطريق.

