একটি distance matrix হলো অনেক origin এবং অনেক destination-এর মধ্যে travel time ও distance-এর একটি grid। এটি প্রতিটি "nearest store" ranking, প্রতিটি delivery dispatch decision এবং প্রতিটি route optimisation solver-এর পেছনের data structure। যখনই একটি application-কে drive time অনুযায়ী অনেক candidate-এর মধ্যে সেরাটি বেছে নিতে হয়, একটি distance matrix নিচে কাজ করছে।
এই guide ব্যাখ্যা করে একটি distance matrix আসলে কী, travel time কীভাবে সরলরেখা দূরত্ব থেকে আলাদা, কোথায় matrix production system-এ দেখা যায়, এবং input set কয়েকটি বিন্দুর বেশি বাড়লে কোন সমস্যাগুলি team-কে কামড়ায়।
একটি Distance Matrix আসলে কী
সবচেয়ে সহজ আকারে, একটি distance matrix একটি দ্বি-মাত্রিক table। সারিগুলি origin, column-গুলি destination, এবং প্রতিটি cell দুটি number ধরে রাখে: একটি distance এবং একটি duration। N origin এবং M destination সহ, matrix-এ N গুণ M cell থাকে। ২৫ জন driver এবং ২৫টি job-এর একটি request একটি single call-এ ৬২৫টি cell তৈরি করে।
ওই cell-এর value একটি routing engine থেকে আসে যা একটি প্রকৃত road network graph walk করে। এটি প্রতিটি origin থেকে প্রতিটি destination-এর সবচেয়ে দ্রুত path বেছে নেয়, segment cost-গুলি যোগ করে এবং মোট return করে। এটি একটি haversine গণনা থেকে মৌলিকভাবে আলাদা, যা দুটি coordinate-এর মধ্যে একটি সরলরেখা আঁকে এবং উপেক্ষা করে যে building, নদী এবং one-way street বিদ্যমান।
একটি coordinate pair আপনাকে বলে দুটি বিন্দু কোথায়। একটি distance matrix আপনাকে বলে তাদের মধ্যে যেতে আসলে কী খরচ হয়।
Distance বনাম Duration
তিনটি ভিন্ন number-কে প্রায়ই "distance" বলা হয়, এবং এদের গুলিয়ে ফেলা routing code-এর সবচেয়ে সাধারণ bug।
Haversine distance হলো দুটি latitude এবং longitude pair-এর মধ্যে great-circle দূরত্ব। এটি গণনা করা দ্রুত, কোনো network call প্রয়োজন নেই, এবং driving সম্পর্কিত যেকোনো task-এর জন্য ভুল। একটি ২ কিমি haversine দূরত্ব একটি ৭ কিমি drive হতে পারে যখন আপনি বুঝতে পারবেন যে আপনি যে নদীটি পার হতে পারবেন না সেটি বিবেচনা করতে হবে।
Road-network distance হলো প্রকৃত driveable path-এর দৈর্ঘ্য। এটি one-way street, turn restriction এবং road graph-এর topology বিবেচনা করে। একটি distance matrix API distance field-এ এটিই return করে।
Duration with traffic হলো বর্তমান বা পূর্বাভাসিত traffic পরিস্থিতি দেওয়া trip-এর সময়। ০২:০০-তে একটি ১২ কিমি motorway segment ছয় মিনিট এবং ১৭:৩০-তে পঁচিশ মিনিট। যে production system ETA নিয়ে চিন্তা করে তারা traffic-aware duration চায় এবং একটি departure time pass করে যাতে routing engine congestion সঠিকভাবে model করতে পারে।
Ranking এবং dispatch-এর জন্য, duration প্রায় সবসময় distance-এর উপর জয়ী হয়। একজন driver এ নিয়ে চিন্তা করে না যে কাছের job ৮০০ মিটার দূরে যদি এটি drive থেকে চার মিনিট কমিয়ে দেয়।
Distance Matrix কোথায় দেখা যায়
Distance matrix নীরবে বেশিরভাগ logistics এবং location-aware feature-এর underneath চলছে।
- Delivery driver assignment: প্রতিটি pending order প্রতিটি available driver-এর সাথে match করা হয়। dispatcher সবচেয়ে কম duration-এর cell বেছে নেয় যা vehicle capacity এবং shift constraint মেনে চলে
- Fleet dispatching ও rebalancing: ride-hailing এবং last-mile platform প্রতি কয়েক সেকেন্ডে vehicle এবং demand zone-এর মধ্যে matrix গণনা করে যাতে গাড়িগুলি rider-দের কাছে থাকে
- Store ও venue locator ranking: haversine অনুযায়ী পাঁচটি কাছের store return করার পরিবর্তে, locator user-এর location থেকে candidate পর্যন্ত একটি ছোট matrix গণনা করে এবং drive time অনুযায়ী rank করে
- Scale-এ ETA গণনা: অনেক simultaneous order সহ marketplace হাজার হাজার single-route request firing করার পরিবর্তে ETA-গুলিকে matrix call-এ batch করে
- VRP solver: vehicle routing problem solver (OR-Tools, jsprit, commercial optimiser) input হিসাবে একটি full cost matrix প্রয়োজন। routing solution-এর মান আপনার feed করা matrix-এর মান দ্বারা সীমাবদ্ধ
- Site selection ও territory planning: analyst candidate location এবং customer cluster-এর মধ্যে matrix গণনা করে এমন warehouse বেছে নিতে যা মোট drive time minimise করে
এই সব ক্ষেত্রে, matrix হলো bulk-computation primitive। এটি একটি system-কে N গুণ M individual routing call-এর খরচ না দিয়ে "অনেকের মধ্যে সেরা" সম্পর্কে reason করতে দেয়।
Production-এ সমস্যা
Distance matrix প্রথম দিনে সহজ এবং দ্রুত কঠিন হয়ে যায়।
Asymmetry হলো default. বাস্তব road network-এ one-way street, divided carriageway এবং asymmetric turn cost থাকে। (A, B)-এ cell খুব কমই (B, A)-এ cell-এর সমান। Memory সাশ্রয়ের জন্য matrix-কে symmetric হিসাবে treat করা dispatch system-এ wrong-way routing-এর classic কারণগুলির একটি।
N গুণ M খরচ. একটি ১০০ বাই ১০০ matrix হলো ১০,০০০ cell। একটি ৫০০ বাই ৫০০ matrix হলো ২,৫০,০০০ cell। খরচ এবং latency quadratically বৃদ্ধি পায়। বেশিরভাগ production system matrix-গুলিকে chunk-এ batch করে (৫০ বাই ৫০ বা ১০০ বাই ১০০), request-গুলিকে parallelise করে এবং এমন result cache করে যা প্রায়শই পরিবর্তন হয় না, যেমন একটি fixed warehouse set এবং একটি fixed store set-এর মধ্যে matrix।
Time-of-day variance. ০৩:০০-তে গণনা করা একটি matrix ১৭:০০-তে valid নয়। যদি আপনার dispatch logic traffic-এর উপর নির্ভর করে, decision time-এ একটি traffic-aware matrix request করুন বা time-bucketed matrix-এর একটি ছোট set pre-compute করুন (morning peak, off-peak, evening peak) এবং সঠিকটি বেছে নিন।
Batching ও rate limit. Distance matrix API per element charge করে, per request নয়, এবং বেশিরভাগ provider একটি single call-এর size cap করে। প্রথম দিন থেকেই chunking এবং back-pressure-এর জন্য plan করুন বরং scale-এ এটি আবিষ্কার করার চেয়ে।
Coordinate quality in, garbage out. একটি matrix কেবলমাত্র এটিকে feed করা coordinate-এর মতো ভাল। একটি geocode যা একটি divided highway-এর ভুল দিকে পড়েছে তা একটি wildly ভুল duration তৈরি করবে। matrix request-এ প্রবেশের আগে input coordinate validate করুন।
MapAtlas-এ Distance Matrix
MapAtlas Distance Matrix API একটি প্রকৃত European এবং global road network-এর উপর travel time ও distance-এর full N বাই M matrix গণনা করে। এটি car, truck, bicycle এবং pedestrian profile support করে, departure time সহ traffic-aware request গ্রহণ করে এবং বাস্তব dispatch ও optimisation workload-এর প্রয়োজনীয় batch size-এর জন্য তৈরি।
Ranking-এর বাইরে যায় এমন workload-এর জন্য, Distance Matrix API স্বাভাবিকভাবে Optimize Route API-এর সাথে pair হয়, যা একটি matrix এবং একগুচ্ছ stop নেয় এবং একটি ordered route return করে যা মোট drive time minimise করে, এবং Isochrone API-এর সাথে "X মিনিটে পৌঁছানো যায় এমন সবকিছু" filter-এর জন্য যা matrix call-এর আগে candidate set pre-shrink করে।
একটি distance matrix glamorous নয়। এটি শুধুমাত্র number-এর একটি grid। কিন্তু এটিই সেই grid যা "অনেকের মধ্যে সেরা খুঁজে নাও"-কে একটি N গুণ M routing nightmare থেকে একটি single bulk request-এ পরিণত করে, এবং সেই একটি data সঠিক পাওয়াই একটি বাস্তব logistics product-কে map-এ পাঁচটি pin সহ একটি demo থেকে আলাদা করে।
সাধারণ জিজ্ঞাসা
Distance matrix কী?
একটি distance matrix হলো origin-এর একটি set এবং destination-এর একটি set-এর মধ্যে travel time ও distance-এর একটি N বাই M grid। প্রতিটি cell একটি single প্রশ্নের উত্তর দেয়: origin i থেকে destination j-তে যেতে কত সময় লাগে এবং দূরত্ব কত। আধুনিক distance matrix API একটি প্রকৃত road network-এর উপর value গণনা করে, সরলরেখা দূরত্ব হিসাবে নয়, তাই ফলাফলে one-way street, turn restriction এবং routable geometry বিবেচনা করা হয়।
Distance এবং duration-এর মধ্যে পার্থক্য কী?
Distance হলো আপনি road network বরাবর কতদূর travel করেন, মিটার বা কিলোমিটারে। Duration হলো এতে কত সময় লাগে, সেকেন্ডে, speed limit, traffic এবং road class বিবেচনা করে। এগুলি বিনিময়যোগ্য নয়। দুটি route-এর একই distance থাকতে পারে এবং খুব ভিন্ন duration থাকতে পারে, এবং বেশিরভাগ production use case (ETA, dispatch, ranking) duration নিয়ে চিন্তা করে। একটি ভাল distance matrix API প্রতিটি cell-এর জন্য উভয়ই return করে।
Single route-এর পরিবর্তে কখন distance matrix ব্যবহার করব?
যখনই অনেক candidate তুলনা করতে হয় তখন একটি distance matrix ব্যবহার করুন: পঞ্চাশটির মধ্যে সবচেয়ে কাছের পাঁচটি দোকান rank করা, বিশটির মধ্যে নিকটতম available driver-এর কাছে একটি delivery assign করা, বা একটি vehicle routing problem solver-কে feed করা। একটি single routing endpoint-কে N বাই M বার call করা ধীর এবং ব্যয়বহুল। একটি matrix endpoint একই data এক request-এ return করে, bulk computation-এর জন্য optimised।
Distance matrix কি symmetric?
বাস্তব road network-এ প্রায় কখনোই নয়। A থেকে B-এর drive খুব কমই B থেকে A-এর সমান হয়, কারণ one-way street, divided highway, turn restriction এবং asymmetric traffic থাকে। একটি production distance matrix API একটি full N বাই M grid return করে, একটি triangular half নয়। যদি আপনি memory সাশ্রয়ের জন্য matrix-কে collapse করেন, আপনি driver-দের রাস্তার ভুল দিকে route করবেন।

