Sokoban يابانية لحارس Warehouse ولعبة فيديو تقليدية. اللعبة هي لغز النقل ، حيث يتعين على اللاعب دفع جميع الصناديق في الغرفة على مواقع/ أهداف التخزين. إن إمكانية ارتكاب أخطاء لا رجعة فيها تجعل هذه الألغاز صعبة للغاية خاصة بالنسبة لخوارزميات التعلم التعزيز ، والتي تفتقر في الغالب إلى القدرة على التفكير في المستقبل.
ينفذ المستودع لعبة Sokoban بناءً على القواعد التي قدمت خيال DeepMind الورقي المعزز عوامل لتعلم التعزيز العميق. إن توليد الغرفة عشوائي وبالتالي سيسمح بتدريب الشبكات العصبية العميقة دون أن يتفوق على مجموعة من الغرف المحددة مسبقًا.
| مثال لعبة 1 | مثال اللعبة 2 | مثال اللعبة 3 |
|---|---|---|
![]() | ![]() | ![]() |
pip install gym-sokobangit clone [email protected]:mpSchrader/gym-sokoban.git
cd gym-sokoban
pip install -e .الخروج عن الأمثلة على كيفية استخدام بيئة صالة رياضية خارجية.
تتكون كل غرفة من خمسة عناصر رئيسية: الجدران والأرضيات والصناديق وأهداف الصندوق ولاعب. قد يكون لديهم حالات مختلفة سواء كانت تتداخل مع هدف مربع أم لا.
| يكتب | ولاية | رسم بياني | TinyWorld |
|---|---|---|---|
| حائط | ثابت | ![]() | ![]() |
| أرضية | فارغ | ![]() | ![]() |
| مربع الهدف | فارغ | ![]() | ![]() |
| صندوق | خارج الهدف | ![]() | ![]() |
| صندوق | على الهدف | ![]() | ![]() |
| لاعب | خارج الهدف | ![]() | ![]() |
| لاعب | على الهدف | ![]() | ![]() |
توفر اللعبة 9 إجراءات للتفاعل مع البيئة. ادفع وتحريك الإجراءات في الاتجاهات لأعلى ، لأسفل ، اليسار واليمين. إجراء عدم التشغيل هو إجراء باطل ، والذي لا يغير أي شيء في البيئة. يبدو أن تعيين أرقام الإجراءات للإجراءات الفعلية على النحو التالي
| فعل | بطاقة تعريف |
|---|---|
| لا توجد عملية | 0 |
| رفع | 1 |
| دفع لأسفل | 2 |
| ادفع اليسار | 3 |
| ادفع اليمين | 4 |
| تحرك | 5 |
| تحرك لأسفل | 6 |
| تحرك اليسار | 7 |
| تحرك يمينًا | 8 |
تحرك ببساطة يتحرك إذا كان هناك حقل مجاني في الاتجاه ، مما يعني عدم وجود صندوق أو جدار حظر.
Push Push يحاول نقل مربع مجاور إذا كان الحقل التالي خلف الصندوق مجانيًا. هذا يعني أنه لا يوجد سلسلة من الضغط على الصناديق ممكنة. في حالة عدم وجود مربع في الحقل المجاور ، يتم التعامل مع إجراء الدفع بنفس طريقة عمل الحركة في نفس الاتجاه.
إن الانتهاء من اللعبة عن طريق دفع كل شيء على الأهداف يعطي مكافأة 10 في الخطوة الأخيرة. أيضا دفع مربع على أو خارج الهدف يعطي مكافأة 1 على التوالي من -1. بالإضافة إلى ذلك ، يتم إعطاء مكافأة -0.1 لكل خطوة ، وهذا يعاقب الحلول مع العديد من الخطوات.
| سبب | جائزة |
|---|---|
| أداء خطوة | -0.1 |
| مربع الضغط على الهدف | 1.0 |
| دفع صندوق قبالة الهدف | -1.0 |
| ادفع جميع الصناديق على الأهداف | 10.0 |
في كل مرة يتم تحميل بيئة سوكوبان أو إعادة ضبط غرفة جديدة يتم إنشاءها بشكل عشوائي. يتكون الجيل من 3 مراحل: توليد طوبولوجيا ، وضع الأهداف واللاعبين ، واللعب العكسي.
لتوليد الطوبولوجيا الأساسية للغرفة ، التي تتكون من الجدران والأرضية الفارغة ، يعتمد على المشي العشوائي ، مما يغير اتجاهه عند الاحتمال 0.35. في كل خطوة تمركز في الموضع الحالي ، يتم ضبط نمط من الحقول على المساحات الفارغة. يمكن العثور على الأنماط المستخدمة في الشكل 2.

الشكل 2: أقنعة لإنشاء طوبولوجيا
خلال هذه المرحلة ، يتم وضع اللاعب بما في ذلك جميع أهداف Box على مساحات فارغة تم اختيارها عشوائيًا.
هذه هي المرحلة الحاسمة لضمان غرفة قابلة للحل. الآن يتم لعب Sokoban بطريقة عكسية ، حيث يمكن للاعب التحرك وسحب الصناديق. الهدف من هذه المرحلة هو العثور على حالة الغرفة ، مع أعلى درجة الغرفة ، مع البحث الأول عن العمق. لكل غرفة يتم استكشافها أثناء البحث ، يتم حساب درجة الغرفة بالمعادلة الموضحة أدناه. المعادلة هي نهج إرشادي لتقييم صعوبة الغرفة. يحسب Boxswaps عدد مرات تغيير اللاعب المربع لسحبه. BoxDisplacement هي مسافة مانهاتن بين مربع معين وهدف مربع الأصل. طالما أن صندوق واحد على الأقل على هدف ، يكون منظر الغرفة دائمًا 0.
لدى Sokoban العديد من الاختلافات المختلفة ، مثل: حجم الغرفة ، وعدد الصناديق ، أو أوضاع التقديم ، أو القواعد.
إلى جانب عرض Sokoban العادي ، يمكن تقديم كل تكوين باعتباره TinyWorld ، والذي يحتوي على حجم بكسل يساوي حجم الشبكة. للحصول على بيئة يتم تقديمها كعالم صغير ، فقط أضف tiny_ أمام وضع العرض. على سبيل المثال: env.render('tiny_rgb_array', scale=scale_tiny) . يسمح المقياس بزيادة حجم الملاحظة العالمية الصغيرة المقدمة. باستخدام المقياس بالاقتران مع أوضاع التقديم ، لا يؤثر human أو rgb_array ، على حجم الإخراج. أوضاع العرض المتاحة هي:
| وضع | وصف |
|---|---|
| RGB_ARRAY | حسن المظهر 2D صورة RGB |
| بشر | يعرض الحالة الحالية على الشاشة |
| tiny_rgb_array | كل بكسل يصف عنصرًا واحدًا في الغرفة |
| tiny_human | يعرض RGB_Array الصغير على الشاشة |
يتم عرض تكوينات الغرفة المتاحة في الجدول أدناه.
| معرف الغرفة | حجم الشبكة | بكسل | #boxes | مثال | TinyWorld |
|---|---|---|---|---|---|
| Sokoban-V0 | 10x10 | 160x160 | 3 | ![]() | ![]() |
| Sokoban-V1 | 10x10 | 160x160 | 4 | ![]() | ![]() |
| Sokoban-V2 | 10x10 | 160x160 | 5 | ![]() | ![]() |
| Sokoban-Small-V0 | 7x7 | 112x112 | 2 | ![]() | ![]() |
| Sokoban-Small-V1 | 7x7 | 112x112 | 3 | ![]() | ![]() |
| Sokoban-Large-V0 | 13x11 | 208x176 | 3 | ![]() | ![]() |
| Sokoban-Large-V1 | 13x11 | 208x176 | 4 | ![]() | ![]() |
| Sokoban-Large-V2 | 13x11 | 208x176 | 5 | ![]() | ![]() |
| Sokoban-Huge-V0 | 13x13 | 208x208 | 5 | ![]() | ![]() |
يرجى ملاحظة أن الغرف الكبيرة قد تستغرق بعض الوقت لإنشاءها ، خاصة على جهاز كمبيوتر محمول.
إلى جانب اللعبة العادية لـ Sokoban ، ينفذ هذا المستودع أو سيقوم بتنفيذ الاختلافات ، مما قد يجعل اللعبة أسهل أو أكثر تعقيدًا. باستثناء الإشارة بشكل مختلف ، فإن الاختلافات لا تنفذ إصدارًا صغيرًا للعالم.
| تفاوت | ملخص | صعوبة متوقعة | مثال | عالم صغير | حالة | تفاصيل |
|---|---|---|---|---|---|---|
| أهداف ثابتة | يجب دفع كل صندوق على الهدف بنفس اللون. | أكثر صعوبة | ![]() | نعم | مُنفّذ | ReadMe |
| لاعب متعدد | هناك لاعبان في الغرفة. يمكن استخدام كل جولة واحدة من اللاعبين. لا يوجد أي ترتيب للحركات بين اللاعبين. | أكثر صعوبة | ![]() | نعم | مُنفّذ | ReadMe |
| دفع وسحب | لا يمكن للاعب دفع الصناديق فحسب ، بل يسحبها أيضًا. لذلك ، لا توجد حركات لا رجعة فيها. | أسهل | ![]() | نعم | مُنفّذ | ReadMe |
| Boxoban | يستخدم من قبل DeepMind الألغاز سوكوبان. | مشابه | ![]() | نعم | مُنفّذ | ReadMe |
إذا كنت تستخدم هذا المستودع لبحثك ، فيرجى الاستشهاد به بالمعلومات التالية:
@misc{SchraderSokoban2018,
author = {Schrader, Max-Philipp B.},
title = {gym-sokoban},
year = {2018},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/mpSchrader/gym-sokoban}},
commit = {#CommitId}
}
لا تتردد في الاتصال بي للحديث عن هذا أو مشاريع أخرى. إما عن طريق إنشاء مشكلة أو أرسل لي على LinkedIn.
إذا وصلت إلى النهاية وأحببت المشروع ، فيرجى إظهار تقديرك من خلال بدء هذا المشروع .
لا تتردد في المساهمة في هذا المشروع من خلال التغلب على الريبو وتنفيذ كل ما تفتقده. بدلاً من ذلك ، افتح مشكلة جديدة في حال كنت بحاجة إلى مساعدة أو ترغب في إضافة ميزة.