कैसे एक "यातायात एअर इंडिया" बनाने के लिए?


21

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

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

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

वर्णन करना मुश्किल है, लेकिन मुझे लगता है कि आपको मेरा मतलब है। क्या आपके पास मेरे लिए कोई सिफारिशें हैं कि मैं कहां से शुरू करूं? कोई भी कागजात, नमूना परियोजनाएं या इसी तरह की चीजें जो मुझे शुरू कर सकती हैं?

तुम्हारी सहायता सराहनीय है!


सहयोगात्मक प्रसार आपको कुछ करने में मदद कर सकता है। यह एक सरल तरीका है कि एक ही समय में कई एजेंटों के लिए पथ खोज को कैसे हल किया जाए + एजेंट खुद को टाल रहे हैं। कृपया, अपने अनुभव को इसके साथ कहीं साझा करें, धन्यवाद। ;)
user712092

जवाबों:


12

इस समस्या का समाधान करने के बहुत सारे तरीके हैं जिन्हें मैं यहाँ एक सभ्य और व्यापक उत्तर देने के लिए संघर्ष करूँगा। लेकिन यहां कुछ उच्च स्तरीय डिज़ाइन बिंदु हैं।

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

    पता लगाना - यह पहचानना कि आप और आने वाली कार दुर्घटनाग्रस्त हो जाएगी जब तक आप एक दूसरे से बचते हैं

    प्रतिक्रिया - धीमा हो जाना और एक बातचीत चरण में प्रवेश करना।

    बातचीत - ड्राइवरों में से एक को आगे बढ़ना है, दूसरे को उपज लेना है। यह कैसे तय किया जाए, इसके नियम अस्पष्ट हैं, लेकिन मूल रूप से आप ऐसा कुछ चाहते हैं, जहां एक ड्राइवर मनमाने ढंग से (या दूसरी दिशा में कितनी कारें आ रही हैं, इस बारे में) प्राथमिकता लेने का फैसला करता है। जैसे ए 1 समय पर प्राथमिकता लेता है, बी ए को प्राथमिकता लेता है, और पैदावार (रास्ते से हटकर और रोककर) करता है। यदि ए और बी दोनों प्राथमिकता लेने की कोशिश करते हैं, तो उन्हें दोनों को रोकना चाहिए, यादृच्छिक समय की प्रतीक्षा करें (या एक दूसरे को संकेत दें) और फिर से प्रयास करें। अंततः एक दूसरे के लिए उपज होगा।

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

  • सबसे बुरा मान लें। एक आदर्श प्रणाली में भी, विषम परिस्थितियाँ आ सकती हैं, और आपके अभिनेताओं को समझदारी से काम लेना चाहिए। यह और भी अधिक संभावना है अगर खिलाड़ी हस्तक्षेप कर सकता है (कृत्रिम रूप से क्षेत्रों को बंद कर सकता है, आदि) अक्सर, पूरी तरह से रोकना एक ही समझदार प्रतिक्रिया है (ग्रिडलॉक!) मौके पर घूमना या स्पष्ट रूप से टूटी हुई अवस्था में होना AI की विफलता है। पूरी तरह से रोकना वास्तविक दुनिया के संदर्भ में कम से कम प्रशंसनीय है।

    आप अपने अभिनेता के एआई को सरल वास्तविक दुनिया के तर्क से जोड़ते हैं, यह आसान एआई को आश्वस्त करने वाला होगा। यदि वे अपने लक्ष्य तक नहीं पहुंच पाते हैं तो असली लोग पीछे नहीं रुकते हैं और आगे नहीं बढ़ते हैं। यदि एआई के गंतव्य के लिए एकमात्र सड़क अवरुद्ध है, तो उन्हें पहचानना चाहिए और एक प्रतिक्रिया चुननी चाहिए (पूरी तरह से रोकें, घर छोड़ दें और घर छोड़ दें, कहीं और ड्राइव करें)।

  • आप जो चाहते हैं उसे पाने के लिए परत व्यवहार करें। याद रखें, पहला लक्ष्य दुर्घटनाग्रस्त होना नहीं है। इसलिए परिहार (स्टीयरिंग) तर्क को हमेशा चालक के कार्यों पर हावी होना चाहिए। उस दिशा में शीर्ष पर ले जाने वाला दिशा-निर्देश तर्क से आता है ('मैं अगले जंक्शन पर एक अधिकार लेना चाहता हूं')। उच्च स्तर के तर्क के साथ पथ के उस सामयिक पुनर्मूल्यांकन के ऊपर परत ('आगे जाना पसंद करते हैं, लेकिन अगर मैं प्रगति नहीं कर सकता, तो एक नए पथ की अनुमति दें जिसमें यू-टर्न शामिल हो)।

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

  • सूचना की गुणवत्ता। आपका व्यवहार सरल होना चाहिए, लेकिन यह सुनिश्चित करने के लिए कि आपको अच्छी क्वेरी कार्यक्षमता चाहिए। आपको अपने पर्यावरण के प्रश्न पूछने में सक्षम होने की आवश्यकता है जैसे "क्या वह आने वाली कार मेरी लेन पर कब्जा कर रही है?", "कितनी कारें आने वाली हैं?", "क्या मेरे पीछे कोई कार हैं", "क्या मैं यू-टर्न ले सकता हूं" ।


आपके विस्तृत जवाब के लिए धन्यवाद। जब मैं नियमित सड़क यातायात के लिए आपकी सलाह वास्तव में उपयोगी होनी चाहिए। लेकिन मैं शायद अपने शुरुआती पोस्ट में दो महत्वपूर्ण पहलुओं पर ध्यान देने से चूक गया: 1. खिलाड़ी खुद यातायात में भाग नहीं लेता है। यह एक बिजनेस सिम की तरह है और वह नेटवर्क बनाता है। 2. यूनिडायरेक्शनल रास्ते विशेष रूप से हवाई अड्डों पर होते हैं, लेकिन हवाई अड्डों पर एजेंट "खुद पर" नहीं होते हैं, लेकिन एक टॉवर उन्हें बताता है कि कहां जाना है। टॉवर को मुश्किल स्थितियों की पहचान करनी है, लेकिन कुल ज्ञान भी है इसलिए मुझे लगता है कि आपके द्वारा वर्णित स्थितियों / व्यवहार के ऊपर एक परत है।
लूनिकॉन

5

जारी किए गए खेलों में कुछ भयानक असफलताएं देखने के बाद मेरे पास कुछ सुझाव हैं:

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

2) यातायात जाम को कम करने के लिए किसी प्रकार का तर्क यदि ऐसा होता है। मैंने ऐसी परिस्थितियाँ देखी हैं जहाँ ट्रैफ़िक जाम से निपटने वाले वाहनों पर ही लागू होते हैं जो एक-दूसरे में चलने की कोशिश कर रहे थे लेकिन जब -> -> <- <- पैटर्न के साथ सामना करते हुए पूरी तरह से विफल रहे। मुझे याद है कि एक नक्शा जो इसके लिए प्रवण था - यह एक चोकेपॉइंट था जिसका मतलब एआई बेस को हमला करने के लिए कठिन बनाना था, लेकिन जितनी जल्दी या बाद में दो संसाधन हार्वेस्टर आएंगे, जबकि एक हमला समूह बाहर निकल रहा था और वह था। संपर्क में इकाइयाँ एक मार्ग का पता लगाने की कोशिश में घूमती रहेंगी लेकिन उनके पास कोई कानूनी कदम नहीं था। यह पीछे नहीं हटता और यह पता लगाता है कि किसी अन्य इकाई को पहले स्थानांतरित करना था, और इस तरह एआई ने कोई उपयोगी कार्रवाई नहीं की जब तक कि सड़क को हटा नहीं दिया गया। (आप संपर्क स्पिन में इकाइयों को चारों ओर देख सकते हैं और कुछ भी नहीं करते हैं।)

मेरा मानना ​​है कि यह एक अटकी हुई इकाई को पड़ोसी इकाइयों को रास्ते से हटाने के लिए कहकर हल किया जा सकता है - यह तब तक प्रचारित करेगा जब तक कि यह एक अस्थिर इकाई तक न पहुंच जाए जो पीछे हट सकती है। यह समस्या दूर होने तक उन्हें दूर रखने के लिए किसी प्रकार के तर्क को शामिल करना होगा।

ध्यान दें कि बस एक वैकल्पिक मार्ग की तलाश में अक्सर एक बुरा जवाब होता है। मैंने उस तरह की एक लाइवलॉक स्थिति देखी है - इकाई ए नोट जो बी आगे सड़क को अवरुद्ध कर रहा है और इसलिए यह एक अलग मार्ग का उपयोग करने के लिए घूमता है। यह अब बी के लिए सड़क को अवरुद्ध करता है जो चारों ओर मुड़ता है - अब सड़क को फिर से चालू किया जाता है ताकि दोनों फिर से घूम सकें। प्रत्येक मोड़ वे आगे बढ़ने और पीछे की ओर बढ़ने के बीच वैकल्पिक होते हैं।

एक ही खेल मैंने इसका एक अलग संस्करण देखा है, वह भी युद्ध के कोहरे के कारण। एक चॉकोपॉइंट पर एक दुश्मन इकाई थी। जब तक वास्तव में दुश्मन इकाई पर लक्षित नहीं किया जाता है, तब तक ऑटो-मूव पैथफाइंडिंग नहीं लड़ेंगे। यह आगे बढ़ेगा और सड़क अवरुद्ध हो जाएगा। यह फिर वापस चला गया, यह अब अवरोधक को नहीं देख सकता था और यह फिर से आगे बढ़ेगा। दोहराएं जब तक मानव को एहसास नहीं हो रहा था कि वह कहाँ जाना है।


2
अच्छा जवाब - मुझे 'अटके' संदेशों को प्रसारित करने की धारणा पसंद है, ताकि जो कोई भी बाहर निकल सकता है।
MrCranky

4

मैं ट्रैफ़िक सिमुलेशन के साथ बहुत अनुभवी नहीं हूँ, लेकिन कुछ चीजें दिमाग में बसती हैं।

सबसे पहले, पहली जगह में बाधाओं को रोकने के लिए मेरे पास दो लेन होंगी जो वाहनों को विपरीत दिशाओं में यात्रा करने की अनुमति देती हैं। उसी "सड़क" पर।

दूसरे, टकराव है कि हो सकता के लिए, आप चाहिए एक बड़े पैमाने पर ढेर को रोकने के लिए एक टक्कर परिहार स्टीयरिंग व्यवहार किया है। स्टीयरिंग व्यवहार निम्न स्तर हो सकता है, लेकिन वे यथार्थवादी दिखने वाले आकस्मिक व्यवहार बनाने में बहुत उपयोगी होते हैं।

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

हालाँकि, यदि एजेंट A सड़क पर है, तो वह उस सड़क के स्वामित्व का अनुरोध कर सकता है। सड़क के मालिक होने का मतलब यह होगा कि कोई दूसरा एजेंट उस किनारे पर नहीं जा सकता है (आप यह सुनिश्चित कर सकते हैं कि किनारे की लागत को बड़े पैमाने पर बदलकर यह सुनिश्चित करें कि ए * एक पथ की गणना करते समय सड़क का चयन नहीं करता है)। फिर जब एजेंट ए उस सड़क से मुक्त होता है तो वह स्वामित्व से मुक्त हो जाता है।

ईमानदारी से, यह एक घिनौना समाधान है जिसे मैं विशेष रूप से पसंद नहीं कर रहा हूं और अधिकांश ट्रैफ़िक सिमुलेशन (यदि सभी नहीं?) जो मैंने मल्टी-लेन दृष्टिकोण का उपयोग करते हुए देखा है।


हां, दो लेन का उपयोग किया जाना चाहिए (क्योंकि बस दो लेन हैं) लेकिन यह किसी भी तरह की समस्याओं को हल नहीं करता है जो रास्ता देने से निपटते हैं (जो कि
पूछी गई

4

आपने कहा कि आपने स्टीयरिंग व्यवहार के बारे में कई लेखों को देखा, हालांकि सिर्फ मामले में, आपने निम्नलिखित को देखा है?

http://www.red3d.com/cwr/steer/

यदि नहीं, तो यह आपको कुछ उत्तर प्रदान कर सकता है, क्योंकि यह आपके द्वारा बताई गई कुछ समस्याओं को कवर करता है, उदाहरण के लिए टोंटी समस्या (क्व्यूइंग)।


0

मुझे लगता है कि आपको जो करने की आवश्यकता है वह एक पथ खोज एल्गोरिथ्म को लागू करना है।

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

A * (A स्टार) एक बहुत ही सरल पथ खोज एल्गोरिथ्म है जिसे आप शायद आसानी से अपनी पसंद की भाषा में विकिपीडिया में psuedo कोड का अनुवाद कर सकते हैं और यह काम करेगा: http://en.wikipedia.org/wiki/A*_search_ एल्गोरिथम


4
जैसा कि मैंने अपनी प्रारंभिक पोस्ट में उल्लेख किया है, मैंने पहले से ही एक ए * एल्गोरिथ्म लागू किया है और साथ ही साथ डेटा संरचनाओं का मिलान किया है। इसके अलावा, बस किसी भी एजेंट के वेग को कम करने से मेरे लिए बहुत आसान "आसान" ध्वनि होती है।
लूनिकॉन

यह एक रास्ता खोजने की समस्या नहीं है, यह एक एजेंट सिमुलेशन समस्या है। पथ खोज केवल बहुत कम स्तर की बुद्धिमत्ता है जिसे अभिनेताओं को लागू करने की आवश्यकता होती है।
MrCranky

बहुत आसान? haha। ठीक है कि जब मैं गाड़ी चला रहा हूं तो मैं क्या करूं! यदि मैं अपने वर्तमान पथ से टकराव की भविष्यवाणी कर सकता हूं तो मैं अपना वेग बदल सकता हूं।
justin.m.chase

और ट्रैफिक लाइट? और जब आपका मार्ग किसी अन्य वाहन द्वारा अवरुद्ध हो जाए तो क्या करें? जब आपका मार्ग आगे बढ़ता है तो क्या करना है, लेकिन टकराव से बचने के लिए आपका वेग शून्य है। एक अन्य कार के साथ एक टक्कर, जिसका मार्ग कहता है आगे (आपके माध्यम से), और उनका वेग शून्य है?
20

सिंगल-लेन परिदृश्य में, यदि आप दूसरी कारों के वेग का उपयोग अपने भविष्य के गंतव्यों की गणना के लिए करते हैं, जब पहली कार टक्कर का पता लगाती है और दूसरी कार को रोकती है, तो कार को रोकने की आवश्यकता नहीं होगी क्योंकि पहली कारों का वेग अब 0. है। यह मान लेता है कि आप 'लंबे सिंगल-लेन सड़कों के नीचे कारों के साथ टकराव देखने के लिए समय में काफी आगे देखने में सक्षम हो जाएगा। मेरे एक मित्र का सुझाव है कि आप अपने A * एल्गोरिथ्म में भी STOP नोड जोड़ें। इसके साथ किसी भी एक कार के परिप्रेक्ष्य से आप अन्य कारों को एक बाधा ही समझेंगे। यदि बहुत समय हो गया तो रोकना आपके रास्ते को बंद कर सकता है।
justin.m.chase

0

जब मैंने शत्रु राष्ट्र को लागू किया तो मेरी अंतिम गिरावट यह थी कि यदि कोई वाहन 2 सेकंड से अधिक के लिए अटक गया था, तो मैंने उसे अपने पथ पर आगे बढ़ाया। इसलिए जब वे मूल रूप से ले जाया गया एक इकाई अटक गया। किसी ने कभी शिकायत नहीं की इसलिए मुझे लगता है कि ऐसा हुआ था कि कोई भी इसे नहीं देख रहा था।

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