मैं फ्लॉवरज़ नामक गेम के लिए C # .NET में एक सॉल्वर लिखने की कोशिश कर रहा हूं। अपने संदर्भ के लिए, आप इसे एमएसएन पर यहाँ खेल सकते हैं: http://zone.msn.com/gameplayer/gameplayer.aspx?game=flowerz । मैं इसे मज़े के लिए लिख रहा हूँ, किसी प्रकार के असाइनमेंट या संबंधित किसी भी काम के लिए नहीं। इसके कारण, एकमात्र सीमा मेरा कंप्यूटर (एक इंटेल i7 कोर है, जिसमें 8 जीबी रैम है)। जहां तक मेरा सवाल है, इसे कहीं और चलाने की जरूरत नहीं है।
संक्षेप में, इसके नियम इस प्रकार हैं:
- रंगीन फूलों से भरी एक कतार है। इसकी लंबाई मनमानी है
- कतार को प्रभावित नहीं किया जा सकता है
- स्तर की शुरुआत में कतार उत्पन्न होती है
- फूलों के एक या दो रंग होते हैं।
- यदि दो रंग हैं, तो एक बाहरी रंग है, और एक आंतरिक रंग है। दो रंगों के मामले में, बाहरी रंग मिलान के लिए उपयोग किया जाता है।
- यदि कोई मेल होता है, तो बाहरी रंग गायब हो जाता है और फूल अब एक ही रंग का फूल होता है जिसमें आंतरिक फूल होता है
- खेल का लक्ष्य एक ही रंग के तीन (या अधिक) के मैच बनाना है
- जब एक एकल रंग का फूल एक मैच का हिस्सा होता है, तो इसे खाली जगह बनाते हुए, खेल के मैदान से हटा दिया जाता है
- आप एक दो रंग के फूल के बाहरी रंग के खिलाफ एक ही रंग के फूल से मेल खा सकते हैं। इस मामले में, एकल रंग का फूल गायब हो जाता है, बाहरी रंग का दो रंगों का फूल गायब हो जाता है और आंतरिक रंग बना रहता है
- आप तब जीतते हैं जब कतार खाली होती है और कम से कम एक खाली जगह बची होती है
- कैस्केडिंग मैच संभव हैं। एक झरना तब होता है जब तीन (या अधिक) बाहरी फूल गायब हो जाते हैं, और जब उनके आंतरिक रंग 3 (या अधिक फूल) की एक और श्रृंखला बनाते हैं।
- खेल का मैदान हमेशा 7x7 होता है
- मैदान के कुछ स्थान चट्टानों से ढके हुए हैं
- तुम चट्टानों पर फूल नहीं रख सकते
- कतार में एक कुदाल भी हो सकती है, जिसका उपयोग आप किसी भी रखे हुए फूल को किसी खाली जगह पर ले जाने के लिए कर सकते हैं
- आपको कुदाल का उपयोग करना है, लेकिन आपको वास्तव में फूल को हिलाने की ज़रूरत नहीं है: यह पूरी तरह से कानूनी है कि इसे सही जगह पर रखें जहां से यह आया
- कतार में रंगीन तितली भी हो सकती है। जब आप एक फूल पर इस तितली का उपयोग करते हैं, तो फूल को तितली का रंग मिलता है
- एक तितली को दो रंगों के साथ एक फूल पर लगाने से फूल को केवल एक ही रंग मिलता है, अर्थात् तितली
- आप एक खाली जगह या एक फूल पर तितली को बर्बाद कर सकते हैं जिसमें पहले से ही यह रंग है
- मैदान साफ़ करने से खेल नहीं जीता जाता
सॉल्वर का लक्ष्य सरल है: कतार को खाली करने का एक तरीका ढूंढें, जितना संभव हो खेल मैदान पर कई बचे हुए स्थान। मूल रूप से, AI मेरे लिए खेल खेलता है। सॉल्वर का आउटपुट एक सूची है जिसमें यह पाया जाता है। मुझे स्कोर में दिलचस्पी नहीं है, लेकिन जब तक संभव हो, तब तक जीवित रहने में, इसलिए मैं उन चालों में दिलचस्पी रखता हूं जो संभव के रूप में कई खुली जगहों को छोड़ देता है।
कहने की जरूरत नहीं है, खोज स्थान जल्दी से बढ़ता है जितनी बड़ी कतार मिलती है, इसलिए एक क्रूर बल प्रश्न से बाहर है। कतार 15 से शुरू होती है, और यदि मुझे सही याद है तो 5 हर दो या तीन स्तरों के साथ बढ़ती है। और, निश्चित रूप से, पहला फूल (0,0) पर रखना और दूसरा (0,1) पर पहला फूल (1,0) और दूसरा फूल (0,0) पर रखने से अलग है, खासकर जब मैदान पहले से ही पहले दौर के फूलों से आबाद है। इस तरह के एक साधारण निर्णय इसे बनाने या न करने में अंतर कर सकते थे।
मेरे पास निम्नलिखित प्रश्न हैं:
- यह कैसी समस्या है? (थिंक ट्रैवलिंग सेल्समैन, नैकपैक, या कुछ अन्य कॉम्बिनेटरियल समस्या)। यह जानने के बाद मेरे Google-fu को और बेहतर बनाया जा सकता है।
- किस तरह का एल्गोरिथ्म मुझे अच्छे परिणाम दे सकता है, तेज?
उत्तरार्द्ध के बारे में: सबसे पहले, मैंने अपनी खुद की हेरास्टिक एल्गोरिथ्म लिखने की कोशिश की (मूल रूप से: मैं इसे कैसे हल करूंगा, अगर मुझे पता था कि कतार?), लेकिन इसके परिणामस्वरूप बहुत सारे किनारे मामले और स्कोरिंग मिलान होते हैं जो मुझे याद हो सकते हैं।
मैं एक आनुवंशिक एल्गोरिथ्म का उपयोग करने के बारे में सोच रहा था (क्योंकि मुझे कम से कम पता है कि इसका उपयोग कैसे करना है ...), लेकिन मुझे बोर्ड के द्विआधारी प्रतिनिधित्व पर निर्णय लेने में कुछ समस्याएं हो रही हैं। फिर क्रॉसओवर मुद्दा है, लेकिन इसे एक ऑर्डर किए गए क्रॉसओवर ऑपरेटर या इसी तरह के ऑपरेशन के साथ हल किया जा सकता है।
मेरा अनुमान है कि सॉल्वर को हमेशा बोर्ड कॉन्फ़िगरेशन और खाली करने की कोशिश कर रही कतार को जानना चाहिए।
मैं कुछ अन्य अनुमानी एल्गोरिदम जैसे कि तंत्रिका नेटवर्क और फ़ज़ी लॉजिक सिस्टम के बारे में जानता हूं, लेकिन मुझे यह जानने के लिए अनुभव की कमी है कि कौन सा सबसे अच्छा लागू होता है, या यदि कोई अन्य है जो हाथ में कार्य के लिए बेहतर अनुकूल है।