2011-04-22 17 views
9

सबसे पहले, मैं एक नोब हूं। मैं एक जानीटर भी हूं जिसने कभी डाइम लेखन कोड नहीं बनाया है। यह सिर्फ कुछ है जो मुझे करना पसंद है। यह मजेदार है :) यह कहा जा रहा है कि, मैंने इस कंसोल आधारित टिक-टेक-टो गेम लिखा है जिसमें प्रत्येक गेम को खोने के लिए पर्याप्त ऐआई नहीं है। (मुझे लगता है कि एआई वह है जिसे इसे बुलाया जाना चाहिए।) यदि कंप्यूटर के लिए बयान बदलते हैं तो इसमें 70 की तरह कुछ है। मैंने 3 int arrays का उपयोग किया:यदि(), और अगर() सी ++ में विकल्प (क्या यह एआई है?)

int L[2], M[2], R[2]; 

0 = खाली; 1 = एक्स; 2 = ओ;
बोर्ड तब 'दिखता है' जैसे
एल [0] | एम [0] | आर [0]
एल [1] | एम [1] | आर [1]
एल [2] | एम [2] | आर [2]

तो मैं मूल रूप से बाहर हर संभव परिदृश्य मैं की तरह कुछ सोच सकता है लिखा है:

if(M[0]==1 & M[1]==1 & M[2]==0){M[2] = 2;}//here the computer prevents a win 
else if(L[0] ==2&M[1]==2&R[2]==0){R[2]=2;}//here the computer wins 
//and so on....68 more times! 

मैं अपने प्रश्न (रों) है (हैं) लगता है:
वहाँ एक बेहतर तरीका है?
क्या कोड के कम लाइनों के साथ एक ही परिणाम प्राप्त करने का कोई तरीका है?
क्या यह आर्टिफिशियल इंटेलिजेंस माना जाता है?

+0

एक छवि-मैक्रो के रूप में संभवतः एक टिक-टैक-टो-प्लेइंग एल्गोरिदम का एक दिलचस्प कार्यान्वयन, पीएनजी छवि को http://xkcd.com/832/ (यानी wget http: //imgs.xkcd पर पढ़ा जाएगा। कॉम/कॉमिक्स/tic_tac_toe_large.png) और इससे अपना जवाब निकालें ... कोई भी लेने वाला? –

+1

मज़ेदार रहें! स्पष्ट रूप से, प्रतिक्रियाओं के आधार पर, आपके लिए सीखने के लिए बहुत सी चीजें हैं। इसकी सुंदरता यह है कि नीचे फैंसी buzzwords में से एक सीखना और भी खेलने के लिए और अधिक सामान खुलता है। समस्या के कुछ दृष्टिकोण खोजने के लिए "टिक-टैक-टो एआई" पर एक खोज करें। और इसलिए आप जानते हैं, सही प्रतिक्रिया है "क्या यह प्रोग्राम करने का एक बेहतर तरीका है?" है "हाँ, मेरा रास्ता।" :) – gregg

+2

जीतने के लिए खेल खेल रहे कंप्यूटरों का अध्ययन कृत्रिम बुद्धि के क्षेत्र का हिस्सा है। खेल वास्तव में कृत्रिम बुद्धि में पहला केस अध्ययन किया गया था। कहा जा रहा है कि, हर संभव कदम के लिए एक डिब्बाबंद प्रतिक्रिया प्रदान करना वास्तव में एआई नहीं है। :-) आप बुद्धिमानी प्रदान कर रहे हैं; कंप्यूटर खुद के लिए "figuring" नहीं है। किसी भी प्रारंभिक एआई पाठ्यपुस्तक के बारे में कॉलिन के उत्तर में वर्णित मिनिमैक्स एल्गोरिदम पर चर्चा होगी। –

उत्तर

5

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

1

हां बेहतर तरीके हैं।

सबसे स्पष्ट यह विचार करना होगा कि बोर्ड के अलग-अलग दर्पण विचार मामलों की संख्या को सरल बना देंगे।

इसके अलावा, एरे में पूर्व-संग्रह "दिलचस्प" पैटर्न पर विचार करें और फिर डेटा के खिलाफ गेम स्थिति की तुलना करें। उदाहरण के लिए, पैटर्न की एक श्रृंखला अगले कदम में एक खिलाड़ी जीत सकती है।

इसके अलावा, ध्यान दें कि घोषणा पूर्णांक L[2] के साथ, वहाँ सरणी L, अर्थात् L[0] और L[1] में केवल दो प्रविष्टियां होती हैं। आपके पास L[2], M[2] इत्यादि के संदर्भ हैं, जो त्रुटियों को संकलक द्वारा पकड़ा जाना चाहिए था। चेतावनी स्तर को बदलने पर विचार करें। यह कैसे किया जाता है संकलक पर निर्भर करता है। gcc के लिए यह -Wall है।

यह कृत्रिम बुद्धि के रूप में गिना जाता है। if कथन की श्रृंखला एकत्रित ज्ञान है: एक स्थिति को कैसे पहचानें और इसके लिए उचित सर्वोत्तम प्रतिक्रिया कैसे प्राप्त करें। http://en.wikipedia.org/wiki/Tic-tac-toe है जो मैं कई साल पहले एक टिक-टैक-पैर की अंगुली खेल बनाने के लिए इस्तेमाल:

+0

उस तरह मैंने जो सोचा था। ऐसा लगता है कि एक तंत्रिका नेटवर्क बहुत अधिक संभावित परिणामों के साथ कुछ के लिए उपयुक्त होगा। उससे मुझे बेहतर महसूस होता है। इसके अलावा मैंने कोड में एल [5] के रूप में सरणी घोषित की। मुझे नहीं पता कि यह अच्छा अभ्यास है या नहीं, लेकिन मुझे किसी कारण से कुछ अतिरिक्त होना पसंद है। (?) –

+0

अतिरिक्त स्थान आम तौर पर अच्छा अभ्यास होता है, खासकर अगर कोई स्पष्टीकरण (घोषणा के बगल में एक टिप्पणी में) "अब के लिए अप्रयुक्त"। इस मामले में, अतिरिक्त तत्व अप्रयुक्त बाइट से भरे हाथ में जोड़ते हैं। जैसा कि हो सकता है "मुक्त" के बगल में है। – wallyk

2

टिक-टैक-पैर की अंगुली पर विकिपीडिया पृष्ठ जीतने (या बांधने) हर खेल के लिए एक बहुत अच्छा एल्गोरिथ्म रूपरेखा है।

एल्गोरिदम को समझने के बाद, टिक-टैक-टो कंप्यूटर प्लेयर को लागू करने के सबसे अच्छे तरीकों में से एक जादू वर्ग के साथ है। विधि पर चर्चा की गई है here। जहां तक ​​आकार जाता है, मैंने इसे कोड की लगभग 50 पंक्तियों में लागू किया है, अगर मुझे लगता है तो मैं कोड पोस्ट करूंगा :)

यह तकनीकी रूप से कृत्रिम बुद्धि नहीं है, क्योंकि एआई आमतौर पर कृत्रिम न्यूरॉन्स को संदर्भित करता है , न्यूरॉन परतें, ढाल वंश, समर्थन वेक्टर मशीन, जटिल बहुपदों को हल करने, और इसी तरह। सॉलविंग टिक-टैक-टो

0

ऐसे एआई को हल करने के लिए वास्तविक एआई की सबसे नज़दीकी चीज एक कृत्रिम नेटवर्क को कोड करना और टिक्टैक्टो गेम के सभी संयोजनों के साथ ट्रेन करना होगा।

उस स्थिति में कोड समस्या को हल करने के लिए इतना कुछ नहीं करेगा, लेकिन सबसे उचित विकल्प लेकर समस्या को हल करेगा जो समस्या को प्रशिक्षित पैटर्न से हल करता है।

लेकिन एक तंत्रिका नेटवर्क कोडिंग एक छोटी सी बात :)

+0

आपको एक तंत्रिका नेटवर्क की आवश्यकता नहीं है - आप इसे सभी मैचबॉक्स और कुछ मोती के साथ कर सकते हैं। "Matchbox टिक टैक पैर की अंगुली" के लिए googling का प्रयास करें –

+0

एक मिनी-अधिकतम या अल्फा-बीटा एल्गोरिदम भी पूरे एआई क्षेत्र का हिस्सा माना जाता है और इस तरह की समस्या के लिए बहुत आसान और प्रभावी होगा – Voo

0

जब (ऐ आप निर्माण कर रहे हैं) की तरह एक नियम आधारित प्रणाली कोड करने के लिए जरूरत होती है, तो आप एक नियम के इंजन, उदाहरण के क्लिप की तरह उपयोग कर सकते हैं नहीं है (जो सी में लिखित विशेषज्ञ प्रणाली बनाने के लिए नासा में विकसित एक उपकरण है)।

http://en.wikipedia.org/wiki/CLIPS

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

मज़े करो!

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