मैं यहां बताए गए ज्योथन स्क्रिप्टिंग पद्धति का उपयोग करके ओपन ट्रिप प्लानर का उपयोग कर रहा हूं: http:// docs.opentripplanner.org/hi/latest/Scripting/ (विशेष रूप से 'लाइब्रेरी के रूप में ओटीपी का उपयोग') और मैं उनके उदाहरण स्क्रिप्ट

परीक्षण उद्देश्यों के लिए मेरे पास दो सीएसवी फाइलें हैं जिनमें प्रत्येक में 40 स्थान हैं। स्थान नीदरलैंड के अंदर हैं और मैंने डच gtfs और मानचित्र दोनों को लोड किया है। अजीब बात यह है कि कोड जो सार्वजनिक परिवहन यात्रा के समय की गणना करता है (उदाहरण स्क्रिप्ट में लाइन 32: res = spt.eval(colleges), मोड WALK,TRANSIT का उपयोग करके) जब मैं आज के अलावा एक दिन निर्दिष्ट करता हूं तो अधिक समय लगता है।

एक उदाहरण:

req.setDateTime(2018, 12, 8, 16, 00, 00) # today
spt.eval(my_data) # -> takes ~7 - 10 seconds

req.setDateTime(2018, 12, 7, 16, 00, 00) # yesterday
spt.eval(my_data) # -> takes ~30 - 40 seconds

req.setDateTime() को सेट न करने पर, spt.eval() और भी तेज़ हो जाता है। ध्यान दें कि मैंने 6 तारीख को, 6 तारीख को भी स्क्रिप्ट चलाई थी, और यह तब भी तेज थी, इसलिए यह निश्चित रूप से "आज" से संबंधित है, न कि विशेष रूप से 8 वें स्थान पर।

बेशक मेरा प्राथमिक प्रश्न यह है कि मैं इसे आज के अलावा अन्य दिनों के लिए कैसे उपवास करूं? (मेरी मुख्य रुचि वास्तव में कल है)

क्या यह ओटीपी इंस्टेंस शुरू होने से संबंधित है या यह कुछ आंतरिक अनुकूलन है? मुझे नहीं लगता कि यह ग्राफ के निर्माण से संबंधित है क्योंकि यह कुछ दिन पहले बनाया गया था। मैं ओटीपी प्रारंभ करते समय एक दिन या डेटाटाइम सेटिंग प्रदान करने की तलाश में था लेकिन दस्तावेज़ों में इसे खोजने में असमर्थ हूं।

(मैंने अभी तक अपने सिस्टम समय के साथ खिलवाड़ करने की कोशिश नहीं की है, लेकिन यह भी एक ऐसा विकल्प है जो मुझे बहुत पसंद नहीं है)। किसी भी विचार या टिप्पणी का स्वागत है। यदि आवश्यक हो तो मैं कल एक प्रतिलिपि प्रस्तुत करने योग्य नमूना प्रदान करूंगा।

2
Deruijter 9 पद 2018, 01:54

1 उत्तर

सबसे बढ़िया उत्तर

यह समस्या वास्तव में इस कारण से हुई थी कि मैंने req.setDateTime() को req.setMaxTimeSec() के संयोजन में कैसे उपयोग किया।

मूल रूप से, setMaxTimeSec() एक प्रारंभिक बिंदु के रूप में setDateTime() द्वारा निर्धारित दिनांक का उपयोग करता है, और उस दिनांक समय + maxTimeSec के लिए सबसे खराब समय (उर्फ अंतिम संभव समय) को परिभाषित करता है। हालांकि, अगर setMaxTimeSec() को कॉल करते समय setDateTime() अभी तक सेट नहीं किया गया था, तो इसके बजाय वर्तमान दिनांक समय का उपयोग किया जाता है। इसके परिणामस्वरूप जब आप setDateTime() बाद में कॉल करते हैं तो यह समस्या पैदा करेगा। उदाहरण:

setMaxTimeSec(60*60) # Sets worst time to now + 1 hour
setDateTime(yesterday) # Sets departure time to yesterday

इस उदाहरण में समाधान खोजने के लिए बहुत लंबा समय है! केवल एक घंटे के भीतर देखने के बजाय, अब हम 25 घंटे की खिड़की में देख रहे हैं!

वैसे भी, एक आसान समाधान पहले setDateTime() को कॉल करना है, और फिर setMaxTimeSec():

setDateTime(yesterday) # Sets departure time to yesterday
setMaxTimeSec(60*60) # Sets worst time to yesterday + 1 hour

वैकल्पिक रूप से, यदि, किसी कारण से, आप इन विधियों को स्विच नहीं कर सकते हैं, तो आप हमेशा सेटमैक्सटाइमसेक () को अभी और अपने सेटडेटटाइम () - मान के बीच के अंतर के साथ सही कर सकते हैं:

date = datetime.strptime('2019-01-08 21:00', '%Y-%m-%d %H:%M')
date_seconds = time.mktime(date.timetuple())
now_seconds = time.mktime(datetime.now().timetuple())
date_diff_seconds = int(round(date_seconds - now_seconds))
req.setMaxTimeSec(60*60 + date_diff_seconds) 
req.setDateTime(date.year, date.month, date.day, date.hour, date.minute, 00)
0
Deruijter 9 जिंदा 2019, 23:42