क्या जीआईएस डेटाबेस में नए राउटिंग एल्गोरिदम (डीजकस्ट्रा, ए * से) हैं?


46

की तरह काम करता है कर रहे हैं ए * के लिए रीच माइक्रोसॉफ्ट शोधकर्ताओं और से राजमार्ग पदानुक्रम सैंडर्स और Schtolz (अगर मैं नाम सही लिखा हो) से द्वारा कार्लज़ूए विश्वविद्यालय । दोनों गणनाओं को बहुत कम करते हैं, और बड़े ग्राफ़ पर हजार गुना गति करते हैं (लिंक किए गए दस्तावेज़ों में परिणाम देखें)। बाद के काम ने ओपन सोर्स रूटिंग मशीन का नेतृत्व किया , जो दुर्भाग्यपूर्ण रूप से लोकप्रिय नहीं है और अनुकूलित नहीं है (मैं इसे संकलित नहीं कर सका हालांकि कठिन प्रयास किया गया)।

उसी समय, मैंने जो dbs की कोशिश की, स्पैटियालाईट और PgRout, उनके डॉक्स के अनुसार, बस दिक्जस्त्र और ए * एल्गोरिदम प्रदान करते हैं । मैंने द्वि-दिशात्मक खोज का उल्लेख भी नहीं देखा है, जो मेरे अनुभव में दो बार गणना समय बचाता है।

क्या डेटाबेस या अन्य अनुप्रयोगों के लिए बेहतर एल्गोरिदम हैं?


1
क्या आपने अपना सवाल pgRout उपयोगकर्ताओं या डेवलपर्स ईमेल सूची में पोस्ट किया है? आपको उस समुदाय से सीधे बेहतर प्रतिक्रिया मिल सकती है। उपयोगकर्ता सूची: ( lists.osgeo.org/mailman/listinfo/pgrout-users ) डेवलपर सूची: ( lists.osgeo.org/mailman/listinfo/pgrout-dev )
RyanDalton

+1 महान प्रश्न। मुझे आश्चर्य है कि Get Directions के लिए कौन सा एल्गोरिथ्म Google उपयोग करता है । संबंधित प्रश्न यहाँ
कर्क कूकेन्डल

1
चूँकि Google ने Karlsruhe टीम का समर्थन किया ( algo2.iti.uni-karlsruhe.de/english/index.php ) मुझे लगता है कि वे अपने सॉफ़्टवेयर का उपयोग करते हैं, जो अनिवार्य रूप से ओपन सोर्स रूटिंग मशीन है।
1962 में culbrón

जवाबों:


23

सच्चाई यह है कि अधिकांश लोग ए * एल्गोरिथ्म के एक कस्टम भिन्नता का उपयोग करते हैं । आप इसे अधिकांश "बड़े लोगों" में देखेंगे (मैं यह नहीं कह सकता कि वे सार्वजनिक मंच पर कौन हैं, लेकिन मैं आपको बता सकता हूं कि आप शायद उनमें से एक का उपयोग करते हैं - गारंटीकृत), जहां उत्तराधिकार का संशोधन है उन डेटासेट पर बहुत निर्भर करता है जिनका वे उपयोग करते हैं।

आपने पहले ही pgrouting का उल्लेख किया है , जिसे मैं "पारंपरिक" विकल्प मानूंगा । यह सरल रूटिंग एल्गोरिदम करने और अधिकांश समस्याओं के लिए अच्छा है। अपने बैकएंड पर एक पारंपरिक डेटाबेस का उपयोग करना और उपयोग करना भी आसान है।

फिर भी, यह वास्तव में उस समस्या के पैमाने और प्रकार पर निर्भर करता है जिसे आप हल करने की कोशिश कर रहे हैं और रूटिंग एक ग्राफ समस्या है।

एक बार फिर, "बड़े लोगों" के पास आमतौर पर बहुत सारे डेटा होते हैं जो उनके ग्राफ़ (उदाहरण के लिए, ट्रैफ़िक डेटा, बस मार्ग, पैदल पथ) से जुड़े होते हैं जो रूटिंग एल्गोरिदम को प्रभावित करते हैं। इन्हें मल्टी-मॉडल ट्रिप प्लानर्स के रूप में जाना जाता है (जहां आपके पास "मोड" की योजना भी है - कोई बाइक पथ नहीं - केवल सार्वजनिक पारगमन - उस तरह की चीज)। यदि आप चलना कैसे यात्रा की योजना भी एक समय संवेदनशील मुद्दा (यानी हो जाता है सोच सकते हैं वापस कुछ किनारों वापस, आप मेट्रो है कि आप अपने गंतव्य के लिए ले जाता है को पकड़ने के लिए सक्षम हो जाएगा आगे की तुलना में अगर आप सिर्फ किनारों नेविगेट करने के लिए करने की कोशिश की बहुत तेजी से सबसे कम लागत का उपयोग करना)।

"बड़े लोग" अपने डेटा को प्रति पारंपरिक डेटाबेस में संग्रहीत नहीं करते हैं, वे पूर्व-संकलित ग्राफ़ (स्वागत हडूप / मैप्रेड्यूस क्लस्टर!) का उपयोग करते हैं। जैसा कि आप कल्पना कर सकते हैं, ये रेखांकन वास्तव में बड़े हो जाते हैं, इसलिए आसन्न रेखांकन के किनारों को कनेक्ट करना जानना एक चुनौती हो सकता है।

वैसे भी, मैं आपको कुछ मल्टी-मोडल रूटिंग ग्राफ प्रोजेक्ट्स देखने की सलाह दूंगा:

ग्राफसर्वर के दिमाग में आता है। बहुत सारे दस्तावेज़ीकरण नहीं बल्कि बहुत सारे शुद्ध कोडिंग awesomeness (AFAIK, मेरा मानना ​​है कि MapQuest उनके कुछ रूटिंग उत्पादों के लिए इस परियोजना की भिन्नता का उपयोग करता है)।

एक अन्य विकल्प OpenTripPlanner होगा, जिसके पीछे बहुत सारे स्मार्ट लोग हैं (ग्राफसर से लोगों सहित)।


15

यकीन नहीं है कि यह नया है, लेकिन pgRout में एक शूटिंग-स्टार एल्गोरिथ्म है :

शूटिंग-स्टार एल्गोरिथ्म सबसे छोटा पथ एल्गोरिदम है। इसकी खासियत यह है कि यह लिंक से लिंक करने के लिए रूट करता है, न कि वर्टेक्स से वर्टेक्स तक, जैसा कि दिक्जस्ट्रा और ए-स्टार एल्गोरिदम करते हैं। यह उदाहरण के लिए लिंक के बीच संबंधों को परिभाषित करना संभव बनाता है, और यह "समानांतर लिंक" जैसे कुछ अन्य शीर्ष-आधारित एल्गोरिथ्म मुद्दों को हल करता है, जिसमें समान स्रोत और लक्ष्य लेकिन अलग-अलग लागतें होती हैं।

ईएसआरआई का नेटवर्क एनालिस्ट एक्सटेंशन आपके द्वारा हल किए गए समय को सीमित करने के लिए उल्लिखित पदानुक्रमित दृष्टिकोण का उपयोग करता है :

एक राष्ट्रव्यापी नेटवर्क डेटासेट पर सटीक सबसे छोटा रास्ता खोजना बड़ी संख्या में किनारों की वजह से समय लेने वाला है, जिसे खोजना होगा। प्रदर्शन में सुधार के लिए, नेटवर्क डेटासेट एक परिवहन प्रणाली में प्राकृतिक पदानुक्रम को मॉडल कर सकता है, जहां अंतरराज्यीय राजमार्ग पर ड्राइविंग स्थानीय सड़कों पर ड्राइविंग के लिए बेहतर है। एक बार जब एक पदानुक्रमित नेटवर्क बनाया गया है, तो द्विदिश Dijkstra का एक संशोधन मूल और गंतव्य के बीच मार्ग की गणना करने के लिए उपयोग किया जाता है।

ईएसआरआई साइट पर इस दृष्टिकोण पर उदाहरण के साथ एक बहुत विस्तृत श्वेत पत्र है - हालांकि इसे आपको डाउनलोड करने के लिए लॉग इन करने की आवश्यकता है (आर्कगैस नेटवर्क विश्लेषक श्वेत पत्र में पदानुक्रमित रूट)।


11

संकुचन पदानुक्रम एक बहुत तेज़ एल्गोरिथम है:

यह एल्गोरिथ्म एक क्वेरी निष्पादित करते समय रैम के अनुकूल है (अनुबंधित ग्राफ़ को रखने के लिए कुछ अधिक रैम आवश्यक है और साथ ही बड़े पैमाने पर प्रीप्रोसेसिंग भी)

कुछ अन्य एल्गोरिदम हैं - जिनमें सार्वजनिक पारगमन मार्ग को हल करना शामिल है:

Microsoft कुछ शोध भी कर रहा है:

(ठीक है, डैनियल डेलिंग कर्ल्सुहे से भी है)

आप उपलब्ध एल्गोरिदम का एक अच्छा परिचय और अवलोकन प्राप्त कर सकते हैं:

चेतावनी: जर्मन (!) व्याख्यान। लेकिन कम से कम हेडर आपको अधिक जानकारी (ALT, Arc-Flags, CHASE, ...) या एप्लाइड साहित्य प्राप्त करने में मदद कर सकते हैं!

अपडेट करें

ग्राफहॉपर अब संकुचन पदानुक्रम और अन्य एल्गोरिदम को भी लागू करता है, आप डेमो भी आज़मा सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.