استخدمت بايثون والبحث الأول ذو الوجهين لحل مكعب روبيك 2×2.
مستوحاة من المشروع في معهد ماساتشوستس للتكنولوجيا 6.006. تم إنشاؤها من الصفر بشكل فريد.
https://youtu.be/ZHxLO6fubaU
إنشاء واجهة برمجة تطبيقات المكعب والخوارزمية وواجهة المستخدم الرسومية من البداية. يحتوي كل جانب من الجوانب الستة على 4 مربعات مختلفة ينتج عنها 24 مربعًا. علاوة على ذلك، هناك إجمالي 8 قطع زاوية تشكل المكعب، لكل منها 3 اتجاهات وبالتالي تتماشى مع المربعات الـ 24.
لقد حددت كل قسم من الأقسام الفرعية الـ 24 لكل جانب كسلسلة مع "xyz" كتنسيق حيث x هو اللون المواجه مباشرة ويتحرك y وz بترتيب اتجاه عقارب الساعة حول المكعب لتلك الزاوية.
لقد قمت بالتجول حول المكعب وقمت بتعيين رقم ثابت لكل جانب يمثل الحالة التي تم حلها. على سبيل المثال، 0، 1، 2، 3 هي الأجزاء الأربعة من الجانب الأمامي التي تواجه الجانب الأبيض حيث يكون 0 في أعلى اليسار ويتحرك الجزء الأكبر في اتجاه عقارب الساعة.
هناك 12 حركة يمكن إجراؤها على المكعب. يمين، يسار، أعلى، أسفل، أمام، خلف. كل من هذه أيضًا لها حركات عكس اتجاه عقارب الساعة، لذا 6x2 = 12 حركة. يتلاعب كل واحد من هؤلاء الـ 12 بنصف المكعب بحيث يصبح 12 مربعًا. للقيام بهذه التحركات، قمت بإنشاء قواميس لكل من الـ 6 في اتجاه عقارب الساعة والتي يدور فيها المربع الفرعي من الأصل إلى الموضع التالي. للقيام بالأعداد الأولية، قمت فقط بتبديل المفاتيح والقيم.
يعد حل هذه المشكلة أمرًا صعبًا بشكل خاص نظرًا للكم الهائل من التباديل المحتملة للمكعب. هناك 24 مربعًا فرعيًا وبذلك يصبح 24P24 = 24!. هذا بحجم 10 ^ 23. وهناك أقل من هذا المبلغ لظروف معينة ولكن العدد لا يزال هائلا.
لإنشاء الشجرة، يجب أن أقوم بتشغيل كل الحركات وتشغيل جميع الحركات من الحركات التي تصبح كبيرة جدًا. 12^ارتفاع الشجرة لقد تمكنت من تحديد هذا الحجم من خلال إنشاء إملاء للمواضع التي تمت زيارتها حتى لا يعيد الإجراء للتباديل التي تمت زيارتها مسبقًا.
لقد بدأت بإنشاء BFS من جانب واحد ولكن ذلك قد يصل إلى حد التكرار نظرًا لأن الشجرة المتفرعة ستصبح كبيرة جدًا. لإصلاح ذلك، استخدمت BFS على الوجهين بالتناوب في إنشاء الفروع من البداية والحل النهائي. سيؤدي ذلك إلى إنشاء الأشجار والتحقق مما إذا كان الجانب الآخر قد وجد النقطة بالفعل. إذا فعلت ذلك، فإنه سيتم إرجاع نقطة الاتصال.
خلال كل هذا، تقوم كل عقدة بحفظ أصلها (للتفرع الأمامي) أو عقدة فرعية (للتفرع الخلفي). للعثور على المسار الذي سلكته، وجدت بشكل متكرر الأصل من العقدة المتصلة ثم جميع العناصر الفرعية لتلك النقطة. أدى ذلك إلى مجموعة من المواقف التي اتخذتها من التدافع إلى الحل.
طبق هذا المشروع استخدامي لنظرية الرسم البياني وبحث العرض الأول . لقد قمت بتحسين قدرتي في بايثون والتكرار. لقد وجدت أيضًا بشكل تجريبي أن الحد الأقصى للحركات لحل مكعب 2 × 2 هو 11 حركة لأنني لم أتمكن أبدًا من العثور على حل يستغرق وقتًا أطول
تعلمت كيفية استخدام مكتبة tkinter لإنشاء واجهة المستخدم الرسومية للمشروع