एक मजेदार प्रोजेक्ट के रूप में, मैं रिचर्ड कोरफ के - C # कार्यान्वयन पर काम कर रहा हूं - जो कि रुबिक के क्यूब के लिए ऑप्टिमल सॉल्यूशंस का उपयोग करते हुए माइग्रेशन डेटाबेस का उपयोग कर रहा है।
https://www.cs.princeton.edu/courses/archive/fall06/cos402/papers/korfrubik.pdf
मेरे पास वास्तव में यह काम कर रहा है, मैं सिर्फ अपने समाधान में सुधार करने की कोशिश कर रहा हूं।
एक बात यह है कि कोरफ अपने पेपर में चमकता है कि वह पैटर्न डेटाबेस में कैसे स्टोर और इंडेक्स करता है। आदर्श रूप से, मुझे लगता है कि हम एक सरणी में एक सूचकांक उत्पन्न करने के लिए एक रूबिक क्यूब के उदाहरण का उपयोग करना चाहते हैं।
मेरा प्रश्न इस सूचकांक को उत्पन्न करने के सर्वोत्तम तरीके के बारे में है।
मेरा उपाय है कि कम से कम सही हैश उत्पन्न किया जाए। इसमें सभी क्यूब्स को स्मृति में रखना शामिल है जब तक कि मैंने पूरे पैटर्न डेटाबेस की खोज नहीं की है, तब से एक न्यूनतम परिपूर्ण हैश उत्पन्न करना। MPH को पैटर्न डेटाबेस के आकार के आधार पर चलाने में एक दो घंटे लगते हैं, लेकिन मुझे इसे डिस्क पर सहेजने के बाद केवल एक बार करने की आवश्यकता है। अंत में, मैं खुद को केवल एमपीएच स्टोर करने वाले क्यूब्स को फेंक सकता हूं। इस तरह मैं एक यादृच्छिक रूबिक क्यूब ले सकता हूं, पैटर्न लागू कर सकता हूं, फिर अनुमानित समाधान लंबाई प्राप्त करने के लिए एमपीएच में सरणी सूचकांक को देख सकता हूं।
मेरा मानना है कि कोर्फ और शुल्ट्ज़ ने अपने 2005 के पेपर में क्यूब के इंडेक्स को निर्धारित करने के लिए एक बेहतर तरीका बताया है, जिसे "लार्ज स्केल ब्रेड-फर्स्ट सर्च" कहा जाता है।
https://www.aaai.org/Papers/AAAI/2005/AAAI05-219.pdf
यह पेपर एक क्रमांकन के लेक्सोग्राफिक क्रम से दूर एक सूचकांक बनाने के लिए एक एल्गोरिदम का वर्णन करता है। मूल रूप से आप क्रमचय {1, 2, 3} ले सकते हैं और यह पता लगा सकते हैं कि यह 0. {1, 3, 2} के सूचकांक के साथ सबसे छोटा है। 1 और 1 के सूचकांक के साथ अगला है।
मुझे लगता है कि मुझे इस एल्गोरिथ्म को एक रूबिक क्यूब में लागू करने में सक्षम होना चाहिए ताकि एक पैटर्न डेटाबेस के भीतर इसके सूचकांक को प्राप्त किया जा सके, लेकिन मुझे यह जानने में कठिन समय मिल रहा है कि यह अभ्यास में कैसे काम करेगा।
उदाहरण के लिए कोनों में केवल पैटर्न डेटाबेस में सभी रूबिकस क्यूब्स होते हैं, जिनके किनारे के स्टिकर हटा दिए गए होते हैं। इस सेट में बिल्कुल 88,179,840 क्यूब्स हैं। रूबिक्स क्यूब पर कोई भी कोने क्यूबी 24 अलग-अलग राज्यों में से एक में हो सकता है। 8 वें कोने के क्यूब की स्थिति की गणना अन्य 7 के आधार पर की जा सकती है, इसलिए कोनों में क्यूब्स केवल पैटर्न डेटाबेस में से प्रत्येक में 7 मान 0 और 23 हैं।
जैसे {0, 3, 6, 9, 12, 15, 18, 21} सभी हटाए गए स्टिकर के साथ "हल" क्यूब को परिभाषित करता है।
अगर मैं सामने वाले के चेहरे को 90 डिग्री पर घुमाऊं तो क्रमपरिवर्तन हो सकता है: {0, 3, 11, 23, 12, 15, 8, 20}
क्या इस तरह के क्रमपरिवर्तन से बाहर एक सूचकांक प्राप्त करने का एक तरीका है?