मेरे पास बस/ट्रेन/डेटाबेस का प्रत्येक डेटाबेस है ... प्रत्येक तारीख पर आगमन और प्रस्थान/प्रस्थान का समय। मैं दो स्थानों के बीच सबसे तेज़ (सबसे कम/सस्ती/कम से कम संक्रमण) यात्रा की खोज करने का एक तरीका ढूंढ रहा हूं। मैं भविष्य में मनमाने ढंग से स्थानों को देखना चाहता हूं, स्टॉप और स्टॉप से स्टार्ट/स्टॉप के बीच चलने के लिए OpenStreetMap डेटा का उपयोग करके, हालांकि समय के लिए मैं डेटाबेस में दो स्टॉप के बीच पथ ढूंढना चाहता हूं।पथ प्रतिबंध (रूटिंग, यात्रा योजना, ...) समय प्रतिबंधों के साथ ग्राफ पर एल्गोरिदम
समस्या यह है कि मुझे इस विषय के बारे में अधिक जानकारी नहीं मिल रही है, उदाहरण के लिए this Wikipedia page में इसमें कोई उपयोगी जानकारी नहीं है।
जो मुझे मिला है वह GTFS प्रारूप है, जो Google Transit में उपयोग किया गया है। जबकि मेरा शहर सार्वजनिक डेटा फीड (यहां तक कि एक निजी भी नहीं) प्रदान नहीं करता है, मेरे पास पहले से ही सभी महत्वपूर्ण जानकारी है कि जीटीएफएस में बदलाव और परिवर्तन करना तुच्छ होगा।
वहाँOpenTripPlanner वह भी पैदल यात्री/कार/बाइक OpenStreetMap का उपयोग कर मार्ग से कर सकते हैं की तरह की तरह, कुछ GTFS आधारित सॉफ्टवेयर है।
हालांकि, रूटिंग कोड अच्छी तरह से प्रलेखित नहीं है (कम से कम मुझे मिला है) और मुझे पूरी चीज़ की आवश्यकता नहीं है।
मैं जो कुछ भी देख रहा हूं वह एल्गोरिदम का कुछ अच्छा अवलोकन है जिसका उपयोग मैं कर सकता था, उनके प्रदर्शन, शायद कुछ छद्म कोड।
तो, प्रश्न है, स्टॉप, मार्ग और आगमन/प्रस्थान/यात्रा के समय की एक सूची दी गई है, मैं आसानी से रोकने के लिए स्टॉप ए से सबसे तेज़ पथ कैसे ढूंढ सकता हूं?
हाँ करने के लिए भेजा जाना चाहिए, आप डिज्कस्ट्रा एल्गोरिथ्म की तुलना में तेजी लाने के लिए नहीं जा रहे हैं इसके लिए इसके लिए तब तक बाधाएं हैं जब आप रोक रहे हैं जो आगे अनुकूलन की अनुमति देते हैं। समय के अलावा मीट्रिक के लिए, आपको 'वज़न' तैयार करना होगा जो समय, लागत और परेशानी का संयोजन है। आपको यह भी निर्धारित करने के लिए उपयोगकर्ता को छोड़ना होगा कि वे वजन क्या हैं और फ्लाई पर पुनः कंप्यूट्यूट हैं, या कुछ पूर्वनिर्धारित परिदृश्य हैं (100% समय, 100% सस्ता, 50/50/0, 40/40/20, और पसंद है) और डिजस्ट्रा लुकअप टेबल का कैश संस्करण रखें। – corsiKa
जब तक मुझे कुछ याद नहीं आ रहा है, यह काम नहीं करेगा। डिज्कास्ट्रा केवल "स्थिर" ग्राफ़ के लिए स्पेस डोमेन के साथ बढ़िया है, लेकिन इसमें समय डोमेन है। उदाहरण के लिए, यदि आप एक बस द्वारा एक नोड तक पहुंचते हैं जो 1 मिनट लेता है, तो वहां पर किनारों से 5 मिनट लगने से अलग होंगे। आप बस को याद कर सकते हैं ताकि वजन बढ़ जाए क्योंकि आपको इंतजार करना है। इसके अलावा, कुछ किनारों को गायब हो सकता है यदि आप एक निश्चित तरीके से नोड (दिन की आखिरी बस याद करते हैं) पर जाते हैं, लेकिन अगर आप वहां किसी अन्य तरीके से वहां जाते हैं तो वहां रहें। AFAIK, Dijkstra इसके लिए अनुमति नहीं देता है, लेकिन अगर मैं गलत हूं तो कृपया मुझे सही करें। – lacop
@albwq: डिजस्ट्रा का एल्गोरिदम अगली बस के लिए कोने में 'प्रतीक्षा' के साथ संभाल नहीं करता है, आप इसके बारे में सही हैं। हालांकि, यह आपके द्वारा पूछे जाने वाले अन्य दो मानदंडों के लिए मान्य है: लागत और संक्रमण की संख्या। [संक्रमण के नंबर को अनुकूलित करने के बारे में मेरा अंतिम खंड देखें]। – amit