2010-05-10 11 views
8

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

तो मैंने केआई में सुधार के बारे में सोचा, लेकिन समस्याओं को हल करने के लिए कई कठिन हैं। सबसे पहले मैंने नजदीकी गेंद को चुनने और इसे सीधे निकटतम छेद में रखने की कोशिश करने के बारे में सोचा। यह बुरा नहीं है, लेकिन यदि लाइन में अन्य गेंदें हैं, तो यह वास्तव में काम नहीं कर रही है। इसके अतिरिक्त यह आवेग की तीव्रता की गणना करने की टी समस्या को हल नहीं करता है।

तो क्या कोई सामान्य सलाह है? या कोई विचार? सर्वोत्तम प्रथाएं?

उत्तर

7

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

इस तरह, आप विभिन्न स्तरों के कंप्यूटर प्लेयर प्राप्त कर सकते हैं - उच्च एन (और टी) उच्च खेल स्तर से मेल खाता है।

+2

इस समाधान के साथ मुझे 2 चीजें पसंद हैं I सबसे पहले यह समानांतर है, क्योंकि आप आसानी से 3/4 विभिन्न विकल्पों की गणना कर सकते हैं। दूसरा, एन चुनने के बजाय आप बस एक समय चुन सकते हैं और जब यह पहुंचा जा सके कंप्यूटिंग को रोक सकता है, इस प्रकार गारंटी नहीं लेती है कि यह बहुत लंबा (जो अच्छा है)। –

+0

-1 यादृच्छिक शॉट एक बहुत खराब एआई बना देगा। यह किसी ऐसे गेम में कोई अंतर्दृष्टि भी नहीं दिखाता है जिसमें पहले से ही गणित और भौतिकी निर्मित होनी चाहिए। – phkahler

+0

सुझाव के लिए धन्यवाद, लेकिन मुझे लगता है कि एक से अधिक कदम संभव नहीं होंगे क्योंकि यह वास्तव में धीमी डिवाइस है;) – RoflcoptrException

0

मुझे लगता है कि यह शायद ही यादृच्छिक है। क्यू, गेंद, बंपर्स और जेब की बातचीत के मॉडल के लिए आप physics engine चाहते हैं। यह एआई की तरह कम और भौतिकी की तरह मुझे लगता है।

+0

हो सकता है कि मैं अंग्रेजी शब्द ऐ गलत समझा;) मैं सिर्फ एक अधिक जानकारी प्राप्त करना चाहते हैं या एक कंप्यूटर खेला जाने वाला खिलाड़ी लागू करने के लिए कम सरल तरीका/एल्गोरिदम वाथीवर जो एक यादृच्छिक एक – RoflcoptrException

+2

एआई के रूप में बुरा नहीं है, एक शब्द नहीं, एक शब्द नहीं है। और समस्या की सादगी के बारे में आपका निर्णय भौतिकी और वफादारी की आपकी समझ पर निर्भर करता है जिसे आप मॉडल में एम्बेड करना चाहते हैं। – duffymo

1

मैं दो व्यापक दृष्टिकोणों के बारे में सोच सकता हूं।

  1. क्यू गेंद और बल के स्तर के आस-पास के सभी संभव क्यू पदों की एक सूची बनाएँ, और उसके बाद पहले एक आप एक गेंद सिंक देता है कि खोजने के लिए सूची की खोज। यह काफी बड़ी सूची है, आप इसे बल के स्तरों की एक छोटी संख्या और किसी भी "स्पष्ट रूप से" खराब शॉट्स को छोड़कर इसे ट्रिम कर सकते हैं।

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

मुझे समाधान 1 सबसे अच्छा पसंद है; यह आपको ऐसी परिस्थितियों को खोजने देता है जहां आप एक बार में दो या दो से अधिक गेंदों को डुबो सकते हैं।

1

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

4

बिलियर्ड्स के खेल के आधार पर आप आमतौर पर दो कार्यों

है मेज पर स्थिति का आकलन (संभव शॉट्स मिलता है)

  • सही परिदृश्य में (सही उद्देश्य, सही शॉट) सभी संभावित शॉट्स समान रूप से कठिन होते हैं और यदि आप केवल एक गेंद पर सीधे शॉट्स पर विचार करते हैं तो अधिकतम 6 छेद xn गेंद स्थितियां होंगी जिन्हें आपको विश्लेषण करने की आवश्यकता है (सरल तोपों का विश्लेषण करना - दो गेंदों को मारना केवल अतिरिक्त n^2 गेंद x 6 छेद की आवश्यकता है स्थितियों)। इन स्थितियों में से प्रत्येक के लिए यदि संभव हो तो स्थापित करने के लिए सरल विश्लेषण की आवश्यकता होती है (जब तक कि आप बहुत यथार्थवादी टकराव सिमुलेशन नहीं कर रहे हों)। तो बहुत सरल सिमुलेशन में आप सभी संभावित परिस्थितियों को बनाने और उन्हें रैंक करने का प्रयास करना चाहेंगे। बैंक से शॉट्स का विश्लेषण करने के लिए आप गेंदों और छेदों को दर्पण करना चाहेंगे।

  • वैकल्पिक रूप से संभव स्थितियों की गणना में आप बस तालिका की एक पंक्ति स्कैन, जिन क्षेत्रों शॉट्स और गणना और की तरह संभावित शॉट्स के निर्माण के लिए गैर-कानूनी हैं अंकन कर सकता ...

angle1, ball1 , pocket2
angle2, ball1, pocket3
angle3, ball1, ball2, pocket1
angle4, cushion2, ball2, pocket1

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

  • एक और बात को देखने के लिए (संभावित लाभ पर न केवल कठिनाई के आधार पर, लेकिन यह भी) सफेद गेंद छेद में जा रहा है, या अन्य अवैध शॉट्स

शॉट चयन का खतरा है

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