একটি প্যাটার্ন ডাটাবেসে সূচীকরণ - কর্ফের অনুকূল রুবিকের কিউব সমাধান


11

একটি মজাদার প্রকল্প হিসাবে, আমি রিচার্ড কর্ফের সি # বাস্তবায়নে কাজ করছি - প্যাটার্ন ডেটাবেসগুলি ব্যবহার করে রুবিকের কিউবে সর্বোত্তম সমাধান সন্ধান করা।

https://www.cs.princeton.edu/courses/archive/fall06/cos402/papers/korfrubik.pdf

আমার আসলে এটি কাজ করছে, আমি আমার সমাধানটি আরও উন্নত করার চেষ্টা করছি।

কর্ফ তার কাগজে এক নজরে চেয়েছিলেন যে সে কীভাবে প্যাটার্নের ডাটাবেসে সংরক্ষণ করে এবং সূচী করে। আদর্শভাবে, আমি মনে করি যে আমরা কোনও রুবিক ঘনক্ষেত্রের একটি উদাহরণটি অ্যারেতে সূচক তৈরি করতে চাই।

আমার প্রশ্নটি এই সূচকটি উত্পন্ন করার সর্বোত্তম উপায় সম্পর্কে।

আমার সমাধানটি হ'ল ন্যূনতম নিখুঁত হ্যাশ তৈরি করা। এর মধ্যে সমস্ত কিউবকে মেমোরিতে রাখা অবধি জড়িত থাকে যতক্ষণ না আমি পুরো প্যাটার্ন ডাটাবেসটি আবিষ্কার করেছি ততক্ষণে এটির তুলনায় একটি সর্বনিম্ন নিখুঁত হ্যাশ তৈরি করা। প্যাটার্ন ডাটাবেসের আকারের উপর নির্ভর করে এমপিএইচ চালাতে কয়েক ঘন্টা সময় লাগে, তবে ডিস্কে সংরক্ষণ করার পরে আমার কেবল এটি করা দরকার। শেষ পর্যন্ত, আমি কেবল এমপিএইচ সংরক্ষণ করে কিউবগুলি ফেলে দিতে পারি। এইভাবে আমি কোনও এলোমেলো রুবিকের কিউব নিতে পারি, প্যাটার্নটি প্রয়োগ করতে পারি, তারপরে একটি আনুমানিক সমাধানের দৈর্ঘ্য পেতে এমপিএজে অ্যারে সূচকটি সন্ধান করতে পারি।

আমি বিশ্বাস করি যে কর্ফ এবং শাল্টজ তাদের 2005 সালের কাগজে "বড় আকারের স্কোরের প্রস্থ-প্রথম অনুসন্ধান" নামক কিউবেজের সূচী নির্ধারণ করার আরও ভাল পদ্ধতির বর্ণনা দিয়েছেন believe

https://www.aaai.org/Papers/AAAI/2005/AAAI05-219.pdf

এই কাগজটি কোনও ক্রম ছাড়ার লিক্সোগ্রাফিক ক্রম অনুসারে একটি সূচক তৈরি করতে একটি অ্যালগরিদম বর্ণনা করে। মূলত আপনি ক্রমটিশনটি {1, 2, 3 take নিতে পারেন এবং এটি নির্ধারণ করুন যে এটি 0.9 {1, 3, 2 of এর সূচক সহ সবচেয়ে ছোট এবং পরবর্তী 1 এবং আরও সূচক সহ with

আমি অনুভব করি যে কোনও প্যাটার্ন ডাটাবেসের মধ্যে সূচকটি পাওয়ার জন্য আমার এই অ্যালগরিদমটি একটি রুবিকের কিউবে প্রয়োগ করতে সক্ষম হওয়া উচিত তবে এটি অনুশীলনে কীভাবে কাজ করবে তা নির্ধারণ করতে আমার খুব কষ্ট হচ্ছে having

উদাহরণস্বরূপ কোণগুলির কেবলমাত্র প্যাটার্ন ডাটাবেসে সমস্ত রুবিকের কিউব রয়েছে যা তাদের প্রান্তের স্টিকারগুলি বন্ধ করে দিয়েছে। এই সেটে ঠিক 88,179,840 কিউব রয়েছে। কোনও রুবিক কিউবে থাকা যে কোনও কোণার কিউবি 24 টি পৃথক রাজ্যের মধ্যে একটি হতে পারে। 8 ম কোণার কিউবিকের অবস্থা অন্যান্য 7 এর উপর ভিত্তি করে গণনা করা যেতে পারে সুতরাং কোণে কিউব কেবল প্যাটার্ন ডেটাবেসগুলির প্রতিটিতে 0 এবং 23 এর মধ্যে 7 টি মান রয়েছে

উদাহরণস্বরূপ {0, 3, 6, 9, 12, 15, 18, 21 "সলভড" কিউবটিকে সমস্ত প্রান্তের স্টিকারগুলি সরিয়ে দিয়ে সংজ্ঞায়িত করে।

যদি আমি সম্মুখ মুখটি 90 ডিগ্রি ঘোরান তবে অনুমানটি হতে পারে: {0, 3, 11, 23, 12, 15, 8, 20}

এই ধরণের অনুমতি ছাড়াই একটি সূচক পাওয়ার উপায় আছে?


আপনি সম্ভবত পাবেন এই আকর্ষণীয়।
টম ভ্যান ডার জ্যান্ডেন

মজাদার! আপনি বলছেন যে তিনি কাগজে কিছু "তাকিয়ে আছেন"। যে বিভাগটি "ফলস্ আউট" হয় নি সে সম্পর্কে আরও সুনির্দিষ্ট হওয়া ভাল। আপনি এটা বলছেন যে এটি কাজ করে। আপনার প্রাথমিক সূচক বাস্তবায়ন কি? এটা কি কোন স্কুল প্রকল্প? এটি আরও কম্পিউটার বিজ্ঞান চ্যাট পরামর্শ । এছাড়াও উদাহরণস্বরূপ ব্লগিং করা বা কোডটি সোর্সিং করা ওপেন করা অন্যের পক্ষে সহায়ক হতে পারে এবং আরও বিশদ দিকে পরিচালিত করতে পারে। এছাড়াও কাগজে কোনও হ্যাশিং ফাংশন উল্লেখ করা হয়নি বলে মনে হচ্ছে ...
vzn

আমি কর্ফের অ্যালগরিদমটি প্রয়োগ করেছি: github.com/benbotto/rubiks-cube-cracker । : আমি খুব, পাওয়া ইন্ডেক্স কঠিন হয়ে তাই আমি মাঝারি তে এটি সম্পর্কে একটি নিবন্ধ লিখেছিলেন medium.com/@benjamin.botto/...
avejidah

উত্তর:


6

আপনি ব্যাখ্যা না 0 23 থেকে নম্বর গড় কিন্তু অনুযায়ী এই উত্তর , আপনি আট জোড়া ব্যবহার কোণে রাজ্যের উপস্থাপন করতে পারেন , যেখানে একটি বিন্যাস হয় , , এবং (বলুন) দ্বারা নির্ধারিত হয় । মোট, এই দেয় ডিগ্রি স্বাধীনতা। ধরে নেওয়া যাক যে আপনি আপনার পচা পারেন জোড়া জন্য , আপনি সহজেই একটি অবস্থান একটি সূচক আলাদাভাবে বিন্যাস এনকোডিং দ্বারা রূপান্তর করতে পারেন(pi,oi)(p0,,p7)(0,,7)oi{0,1,2}o7o0,,o68!37=88179840{0,,23}( পি 0 , , পি 7 ) 0 , , 6 3 7 পি + 8 ! + পি(pi,oi)(p0,,p7)(যা এএআইএআই কাগজটি কীভাবে করবেন তা ব্যাখ্যা করে) এবং মানগুলি ,, যা আপনি বেসে এনকোড করতে পারেন two দুটি মানকে সুস্পষ্ট উপায়ে একসাথে রেখে দেওয়া (উদাহরণস্বরূপ, বা ), আমরা একটি সূচক পাই।o0,,o637p+o8!o+p


আরে যুবাল, মন্তব্যের জন্য ধন্যবাদ। আমার জন্য, 0 থেকে 23 টি কীভাবে আমি অনন্য অবস্থান / ওরিয়েন্টেশনটি সনাক্ত করব যে কোনও কোণার ঘনক্ষেত্র হতে পারে 8 8 পজিশন প্রতি 3 অবস্থানের প্রতি 3 ওরিয়েন্টেশন = 24. ভাগ্যক্রমে আমি সহজেই এই মানটিকে পৃথক অবস্থান / অভিযোজন tuples মধ্যে বিভক্ত করতে পারি। আপনার উত্তর আমাকে এই কোডটিতে নিয়ে গেছে যা আপনি বর্ণনা করছেন সেই অ্যালগরিদমের একটি বাস্তবায়ন। github.com/brownan/Rubiks- কিউব- সলভার / ব্লব / মাস্টার/cornertable.c এটিকে আরও জেনেরিক করার জন্য আমাকে কিছুটা কাজ করতে হবে (যাতে আমি "কেবলমাত্র কোণ" -এর চেয়ে বিভিন্ন ধরণগুলি পরিচালনা করতে পারি) তবে এখন আমি সঠিক পথে রয়েছি!
মহাজাগতিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.