2013-04-21 4 views
8

विशेष रूप से, मैं इस प्रतियोगिता के लिए प्रोग्रामिंग के बारे में बात कर रहा हूँ: http://www.nodewar.com/aboutकुछ प्रासंगिक एआई क्या हैं। इकाइयों के झुंड प्रोग्रामिंग के लिए तकनीकें?

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

मैंने कुछ अपेक्षाकृत बुनियादी तकनीकों को प्रोग्राम करने का प्रयास किया है, लेकिन मुझे लगता है कि मुझे कुछ मौलिक याद आ रही है।

उदाहरण के लिए, मैंने कुछ बोलियों के व्यवहार (http://www.red3d.com/cwr/boids/) को लागू किया, लेकिन उन्हें बोलने के लिए ... लक्ष्य, कमी का अभाव लग रहा था।

क्या इस तरह के गेम के लिए कोई आम तकनीक (या, अधिमानतः, तकनीकों के संयोजन) हैं?

संपादित

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

boundary_field = (o, position) -> 
    distance = (o.game.moon_field - o.lib.vec.len(o.lib.vec.diff(position, o.game.center))) 
    return distance 

moon_field = (o, position) -> 
    return o.lib.vec.len(o.lib.vec.diff(position, o.moons[0].pos)) 

ai.step = (o) -> 
    torque = 0; 
    thrust = 0; 
    label = null; 

    fields = [boundary_field, moon_field] 

    # Total the potential fields and determine a target. 
    target = [0, 0] 
    score = -1000000 
    step = 1 
    square = 1 

    for x in [(-square + o.me.pos[0])..(square + o.me.pos[0])] by step 
    for y in [(-square + o.me.pos[1])..(square + o.me.pos[1])] by step 
     position = [x, y] 
     continue if o.lib.vec.len(position) > o.game.moon_field 
     value = (fields.map (f) -> f(o, position)).reduce (t, s) -> t + s 
     target = position if value > score 
     score = value if value > score 

    label = target 

    { torque, thrust } = o.lib.targeting.simpleTarget(o.me, target) 
    return { torque, thrust, label } 

मैं संभावित क्षेत्रों गलत ढंग से लागू हो सकता है, हालांकि, के बाद से सभी उदाहरण मैं मिल सकता है असतत आंदोलनों के बारे में कर रहे हैं (जबकि NodeWar निरंतर है और सटीक नहीं): निम्नलिखित मेरी NodeWar कोड है।

मुख्य समस्या मेरे एआई होने के नाते। कभी भी ऑफ-स्क्रीन उड़ान भरने या चंद्रमा में दुर्घटनाग्रस्त होने के बिना गेम क्षेत्र में 10 सेकंड से अधिक समय तक रहता है।

+0

(एक और 'ए' जो आप शारीरिक प्रणाली और कुछ अन्य मैट्रिक्स जो आप नियंत्रण पैरामीटर्स दे देता है में एक अलग) कर सकते हैं की आवश्यकता होगी ऑफ़लाइन मॉडल ट्रेन करें? –

+0

@ थॉमसजंगब्लूट नहीं, मुझे उन सभी खेलों को मैन्युअल रूप से चलाने के लिए है। – sdasdadas

उत्तर

7

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

मेरा मानना ​​है कि इस दृष्टिकोण आप पहले से ही एक अपेक्षाकृत मजबूत आधारभूत प्लेयर, जिस पर आप सहयोगात्मक रणनीति को जोड़ना आदि

+0

मैं वास्तव में सुझाव की सराहना करता हूं (और मुझे यह वाकई पसंद है), लेकिन मैं जीए का उपयोग करने के लिए खेल खेलने की प्रक्रिया को स्वचालित करने में असमर्थ हूं। – sdasdadas

+0

जीए का उपयोग करना सिर्फ एक विकल्प है, आप मैन्युअल रूप से आकर्षण/प्रतिकृति बल को भी ट्यून कर सकते हैं। लेकिन मूल रूप से, बोलियां एल्गोरिदम इस प्रकार के गेम के लिए एक मजबूत दृष्टिकोण प्रदान करता है। इसके अतिरिक्त, आप संभावित फ़ील्ड (http://aigamedev.com/open/tutorials/potential-fields/) पर एक नज़र डाल सकते हैं, जो रीयल टाइम रणनीति गेम –

+0

खेलने के लिए एक और तरीका है, धन्यवाद! मैं आपका जवाब स्वीकार करूंगा लेकिन अगर किसी के पास वैकल्पिक दृष्टिकोण हैं तो भी मुझे और सुझाव पसंद आएंगे। मैं इस सप्ताह संभावित क्षेत्रों की कोशिश करूँगा। – sdasdadas

1

आप नियंत्रण सिद्धांत का उपयोग कर सर्वोत्तम संभव flocking व्यवहार प्राप्त कर सकते हैं शुरू कर सकते हैं देना होगा। हम एक जहाज की स्थिति (पदों और वेगों का एक वेक्टर) को चर एक्स के रूप में व्यक्त करके शुरू कर सकते हैं। हम कुछ राज्य X0 से छोटे विचलन का प्रतिनिधित्व करने के लिए एक्स का उपयोग करेंगे। प्रत्येक नोड के लिए, राज्य के चारों ओर linearize आप पर होना व्यक्तिगत जहाजों हैं:

घ/डीटी (एक्स) = च (एक्स - X 0)

जहां X 0 राज्य आप जहाज पर रहना चाहता हूँ है । एफ() nonlinear हो सकता है (जैसा कि आपके संभावित क्षेत्र के मामले में)। इस बिंदु के निकट, आज्ञा का पालन करेंगे

घ/डीटी (x) = कुल्हाड़ी

एक एक निश्चित मैट्रिक्स जो आप स्थिरता प्राप्त करने के लिए tweak चाहिए। नियंत्रण सिद्धांत के अधिकांश क्षेत्र आपको बताते हैं कि यह कैसे करें। यह आपके लिए बहुत महत्वपूर्ण है कि एक स्थिर प्रणाली की ओर जाता है और यह तेजी से अभिसरण करता है। अब आपको MATLAB या GNU Octave को तोड़ना चाहिए। आपको नियंत्रण सिद्धांत में कौन से ध्रुवों का अर्थ है, और लेपलेस ट्रांसफॉर्म पर भी पढ़ना चाहिए।सिस्टम के ध्रुव (मैट्रिक्स ए के eigenvalues) जहाज की प्रतिक्रिया किसी भी तरह की गड़बड़ी, इसकी स्थिरता, और इसकी अभिसरण गति की विशेषता होगी। यह आपको यह भी बताएगा कि जहाज X0 की ओर बढ़ जाएगा या X0 के आसपास ओसीलेटर होगा।

वहाँ एक (आप शायद खेल की सीमित भौतिक विज्ञान की वजह से एक पर पूरा नियंत्रण नहीं मिलता है) चुनने ज्यादा विश्लेषण खुद कर के बिना के कई तरीके हैं। ऐसे दो एल्गोरिदम इष्टतम नियंत्रण हैं (आप X0 से विचलन की लागत बनाम सिस्टम को नियंत्रित करने की लागत को परिभाषित करते हैं), और ध्रुव प्लेसमेंट (आप चुनते हैं कि ध्रुव कहाँ जाएंगे)।

राज्य अंतरिक्ष सिद्धांत भी जहाजों की एक पूरी झुंड पर लागू होता है, विन्यास समय में उस बिंदु पर हर जहाज द्वारा वांछित से भी घूम। अगर सिस्टम nonlinear है, तो आप गारंटी नहीं दे सकते कि सभी विन्यास स्थिर हैं।

निष्कर्ष:

उपयोग नियंत्रण व्यक्तिगत स्थिरता की गारंटी करने के सिद्धांत की गणना आपके आस-पास जहाजों के आधार पर X 0 और eachother और चन्द्रमाओं में जोड़ने से से जहाजों को रोकने के लिए एक संभावित क्षेत्र जोड़ें।

अस्वीकरण:

वहाँ एक राज्य अंतरिक्ष प्रणाली को व्यक्त करने के कई तरीके हैं। यह सबसे सरल है, लेकिन आप अलग तरह से आप इसे व्यक्त करने के लिए जब खुला लूप प्रणाली पर विचार

+0

यह बहुत अच्छा लगता है लेकिन यह मेरे लिए थोड़ा उच्च स्तर है क्योंकि मुझे पहले सिद्धांत को नियंत्रित करने के लिए पेश नहीं किया गया है। मैंने यह पाया: http://ctms.engin.umich.edu/CTMS/index.php?example=Introduction§ion= सिस्टम मॉडलिंग लेकिन यदि आपके पास कोई लिंक है जो आपने शुरू किया है तो यह बहुत अच्छा होगा! – sdasdadas

+0

यह भी सहायक रहा है: http://www.mast.queensu.ca/~andrew/teaching/math332/pdf/chapter1.pdf – sdasdadas

संबंधित मुद्दे

 संबंधित मुद्दे