حالة المشروع: لم يعد صيانته!
ولسوء الحظ، لم أعد قادرًا على مواصلة تطوير المشروع أو تقديم الدعم له.
Reaver هو إطار عمل معياري للتعلم المعزز العميق مع التركيز على العديد من المهام المستندة إلى StarCraft II، ويتبع خطى DeepMind التي تدفع بأحدث ما توصلت إليه التكنولوجيا في هذا المجال من خلال عدسة لعب لعبة فيديو حديثة بواجهة تشبه الإنسان و القيود. يتضمن ذلك مراقبة الميزات المرئية المشابهة (وإن لم تكن متطابقة) لما قد يراها اللاعب البشري واختيار الإجراءات من مجموعة مماثلة من الخيارات التي قد يمتلكها اللاعب البشري. راجع مقالة StarCraft II: تحدي جديد للتعلم المعزز لمزيد من التفاصيل.
على الرغم من أن التطوير يعتمد على الأبحاث، إلا أن الفلسفة الكامنة وراء Reaver API تشبه لعبة StarCraft II نفسها - فهي تحتوي على ما تقدمه للمبتدئين والخبراء في هذا المجال. يقدم Reaver للمبرمجين الهواة جميع الأدوات اللازمة لتدريب وكلاء DRL عن طريق تعديل جزء صغير ومعزول فقط من الوكيل (مثل المعلمات الفائقة). بالنسبة للباحثين المخضرمين، يقدم Reaver قاعدة بيانات بسيطة ولكن مُحسَّنة الأداء مع بنية معيارية: يتم فصل الوكيل والنموذج والبيئة ويمكن تبديلهما حسب الرغبة.
في حين أن تركيز Reaver ينصب على StarCraft II، فإنه يتمتع أيضًا بدعم كامل للبيئات الشائعة الأخرى، ولا سيما Atari وMuJoCo. يتم التحقق من صحة خوارزميات وكيل Reaver مقابل النتائج المرجعية، على سبيل المثال، يكون وكيل PPO قادرًا على مطابقة خوارزميات تحسين السياسة القريبة. يرجى الاطلاع أدناه لمزيد من التفاصيل.
أسهل طريقة لتثبيت Reaver هي من خلال مدير حزم PIP
:
pip install reaver
يمكنك أيضًا تثبيت إضافات إضافية (مثل دعم gym
) من خلال العلامات المساعدة:
pip install reaver[gym,atari,mujoco]
إذا كنت تخطط لتعديل قاعدة تعليمات Reaver
، فيمكنك الاحتفاظ بوظيفة الوحدة النمطية الخاصة بها عن طريق التثبيت من المصدر:
$ git clone https://github.com/inoryy/reaver-pysc2
$ pip install -e reaver-pysc2/
من خلال التثبيت باستخدام العلامة -e
، ستبحث Python
الآن عن reaver
في المجلد المحدد، بدلاً من تخزين site-packages
.
يرجى الاطلاع على صفحة wiki للحصول على إرشادات مفصلة حول إعداد Reaver على نظام التشغيل Windows.
ومع ذلك، إذا كان ذلك ممكنًا، يرجى التفكير في استخدام Linux OS
بدلاً من ذلك - نظرًا لاعتبارات الأداء والاستقرار. إذا كنت ترغب في رؤية أداء وكيلك مع تمكين الرسومات الكاملة، فيمكنك حفظ إعادة تشغيل الوكيل على Linux وفتحه على Windows. هذه هي الطريقة التي تم بها تسجيل الفيديو المذكور أدناه.
إذا كنت ترغب في استخدام Reaver مع بيئات أخرى مدعومة، فيجب عليك تثبيت الحزم ذات الصلة أيضًا:
يمكنك تدريب وكيل DRL مع بيئات StarCraft II المتعددة التي تعمل بالتوازي مع أربعة أسطر فقط من التعليمات البرمجية!
import reaver as rvr
env = rvr . envs . SC2Env ( map_name = 'MoveToBeacon' )
agent = rvr . agents . A2C ( env . obs_spec (), env . act_spec (), rvr . models . build_fully_conv , rvr . models . SC2MultiPolicy , n_envs = 4 )
agent . run ( env )
علاوة على ذلك، يأتي Reaver مزودًا بأدوات سطر أوامر قابلة للتكوين بدرجة عالية، لذلك يمكن اختصار هذه المهمة إلى سطر واحد قصير!
python -m reaver.run --env MoveToBeacon --agent a2c --n_envs 4 2> stderr.log
باستخدام السطر أعلاه، سيقوم Reaver بتهيئة إجراء التدريب باستخدام مجموعة من المعلمات الفائقة المحددة مسبقًا، والتي تم تحسينها خصيصًا للبيئة والوكيل المحددين. بعد فترة قصيرة، ستبدأ في رؤية السجلات التي تحتوي على إحصائيات مفيدة متنوعة في شاشتك الطرفية.
| T 118 | Fr 51200 | Ep 212 | Up 100 | RMe 0.14 | RSd 0.49 | RMa 3.00 | RMi 0.00 | Pl 0.017 | Vl 0.008 | El 0.0225 | Gr 3.493 | Fps 433 |
| T 238 | Fr 102400 | Ep 424 | Up 200 | RMe 0.92 | RSd 0.97 | RMa 4.00 | RMi 0.00 | Pl -0.196 | Vl 0.012 | El 0.0249 | Gr 1.791 | Fps 430 |
| T 359 | Fr 153600 | Ep 640 | Up 300 | RMe 1.80 | RSd 1.30 | RMa 6.00 | RMi 0.00 | Pl -0.035 | Vl 0.041 | El 0.0253 | Gr 1.832 | Fps 427 |
...
| T 1578 | Fr 665600 | Ep 2772 | Up 1300 | RMe 24.26 | RSd 3.19 | RMa 29.00 | RMi 0.00 | Pl 0.050 | Vl 1.242 | El 0.0174 | Gr 4.814 | Fps 421 |
| T 1695 | Fr 716800 | Ep 2984 | Up 1400 | RMe 24.31 | RSd 2.55 | RMa 30.00 | RMi 16.00 | Pl 0.005 | Vl 0.202 | El 0.0178 | Gr 56.385 | Fps 422 |
| T 1812 | Fr 768000 | Ep 3200 | Up 1500 | RMe 24.97 | RSd 1.89 | RMa 31.00 | RMi 21.00 | Pl -0.075 | Vl 1.385 | El 0.0176 | Gr 17.619 | Fps 423 |
يجب أن يتقارب Reaver بسرعة إلى حوالي 25-26 RMe
(متوسط مكافآت الحلقة)، وهو ما يطابق نتائج DeepMind لهذه البيئة. يعتمد وقت التدريب المحدد على أجهزتك. تم إنتاج السجلات أعلاه على جهاز كمبيوتر محمول مزود بوحدة المعالجة المركزية Intel i5-7300HQ (4 مراكز) ووحدة معالجة الرسومات GTX 1050، واستغرق التدريب حوالي 30 دقيقة.
بعد انتهاء Reaver من التدريب، يمكنك الاطلاع على كيفية أدائه من خلال إلحاق علامتي --test
و --render
بالخط الواحد.
python -m reaver.run --env MoveToBeacon --agent a2c --test --render 2> stderr.log
يتوفر دفتر ملاحظات مصاحب من Google Colab لتجربة Reaver عبر الإنترنت.
تعتمد العديد من خوارزميات DRL الحديثة على تنفيذها في بيئات متعددة في نفس الوقت بالتوازي. نظرًا لأن Python تمتلك GIL، فيجب تنفيذ هذه الميزة من خلال المعالجة المتعددة. تحل غالبية التطبيقات مفتوحة المصدر هذه المهمة من خلال النهج القائم على الرسائل (مثل Python multiprocessing.Pipe
أو MPI
)، حيث تتواصل العمليات الفردية عن طريق إرسال البيانات عبر IPC. يعد هذا نهجًا صالحًا ومعقولًا على الأرجح للمناهج الموزعة واسعة النطاق التي تعمل عليها شركات مثل DeepMind وopenAI.
ومع ذلك، بالنسبة للباحث النموذجي أو الهاوي، فإن السيناريو الأكثر شيوعًا هو الوصول إلى بيئة جهاز واحد فقط، سواء كان جهاز كمبيوتر محمولًا أو عقدة على مجموعة HPC. تم تحسين Reaver خصيصًا لهذه الحالة من خلال الاستفادة من الذاكرة المشتركة بطريقة خالية من القفل. يؤدي هذا النهج إلى زيادة كبيرة في الأداء تصل إلى 1.5 مرة في معدل أخذ العينات في StarCraft II (وتسريع يصل إلى 100 مرة في الحالة العامة)، حيث يتم تقييده بشكل حصري تقريبًا بواسطة خط أنابيب الإدخال/الإخراج لوحدة معالجة الرسومات.
وحدات Reaver الثلاث الأساسية - envs
، models
، agents
منفصلة تمامًا عن بعضها البعض تقريبًا. ويضمن ذلك دمج الوظائف الموسعة في إحدى الوحدات بسلاسة في الوحدات الأخرى.
تتم معالجة جميع التكوينات من خلال gin-config ويمكن مشاركتها بسهولة كملفات .gin
. يتضمن ذلك جميع المعلمات الفائقة ووسائط البيئة وتعريفات النموذج.
عند تجربة أفكار جديدة، من المهم الحصول على ردود الفعل بسرعة، وهو ما لا يكون واقعيًا في كثير من الأحيان مع البيئات المعقدة مثل StarCraft II. نظرًا لأن Reaver تم تصميمه باستخدام بنية معيارية، فإن تطبيقات الوكيل الخاصة به ليست مرتبطة فعليًا بـ StarCraft II على الإطلاق. يمكنك إجراء عمليات استبدال فورية للعديد من بيئات الألعاب الشائعة (مثل openAI gym
) والتحقق من عمل التطبيقات مع تلك البيئات أولاً:
python -m reaver.run --env CartPole-v0 --agent a2c 2> stderr.log
import reaver as rvr
env = rvr . envs . GymEnv ( 'CartPole-v0' )
agent = rvr . agents . A2C ( env . obs_spec (), env . act_spec ())
agent . run ( env )
حاليًا يتم دعم البيئات التالية بواسطة Reaver:
CartPole-v0
)PongNoFrameskip-v0
)InvertedPendulum-v2
و HalfCheetah-v2
) رسم خريطة | ريفر (A2C) | ديب مايند SC2LE | ديب مايند ريدريل | خبير بشري |
---|---|---|---|---|
MoveToBeacon | 26.3 (1.8) [21، 31] | 26 | 27 | 28 |
جمع القطع المعدنية | 102.8 (10.8) [81، 135] | 103 | 196 | 177 |
هزيمة الصراصير | 72.5 (43.5) [21، 283] | 100 | 303 | 215 |
البحث عن وهزيمة Zerglings | 22.1 (3.6) [12، 40] | 45 | 62 | 61 |
هزيمة ZerglingsAndBanelings | 56.8 (20.8) [21، 154] | 62 | 736 | 727 |
جمع المعادن والغاز | 2267.5 (488.8) [0, 3320] | 3,978 | 5,055 | 7,566 |
بناء مشاة البحرية | -- | 3 | 123 | 133 |
Human Expert
بواسطة DeepMind من لاعب بمستوى GrandMaster.DeepMind ReDRL
إلى أحدث النتائج الحالية، الموضحة في مقالة التعلم التعزيزي العميق العلائقي.DeepMind SC2LE
هي نتائج منشورة في مقالة StarCraft II: تحدي جديد للتعلم المعزز.Reaver (A2C)
هي النتائج التي تم جمعها من خلال تدريب وكيل reaver.agents.A2C
، وتكرار بنية SC2LE
بأكبر قدر ممكن على الأجهزة المتاحة. يتم جمع النتائج عن طريق تشغيل العميل المُدرب في وضع --test
لعدد 100
حلقة، وحساب إجمالي مكافآت الحلقة. المدرجة هي المتوسط، والانحراف المعياري (بين قوسين)، والحد الأدنى والحد الأقصى (بين قوسين مربعين).رسم خريطة | عينات | الحلقات | تقريبا. الوقت (ساعة) |
---|---|---|---|
MoveToBeacon | 563,200 | 2,304 | 0.5 |
جمع القطع المعدنية | 74,752,000 | 311,426 | 50 |
هزيمة الصراصير | 172,800,000 | 1,609,211 | 150 |
البحث عن وهزيمة Zerglings | 29,760,000 | 89,654 | 20 |
هزيمة ZerglingsAndBanelings | 10,496,000 | 273,463 | 15 |
جمع المعادن والغاز | 16,864,000 | 20,544 | 10 |
بناء مشاة البحرية | - | - | - |
Samples
إلى العدد الإجمالي observe -> step -> reward
في بيئة واحدة .Episodes
إلى العدد الإجمالي لعلامات StepType.LAST
التي أرجعها PySC2.Approx. Time
هو وقت التدريب التقريبي على laptop
مزود بوحدة المعالجة المركزية Intel i5-7300HQ
(4 مراكز) ووحدة معالجة الرسومات GTX 1050
. لاحظ أنني لم أخصص الكثير من الوقت لضبط المعلمة الفائقة، مع التركيز في الغالب على التحقق من قدرة الوكيل على التعلم بدلاً من تعظيم كفاءة العينة. على سبيل المثال، تطلبت المحاولة الأولى الساذجة على MoveToBeacon
حوالي 4 ملايين عينة، ولكن بعد بعض التجارب، تمكنت من تقليلها إلى 102000 (تقليل ~ 40x) باستخدام وكيل PPO.
متوسط مكافآت الحلقة التي تحتوي على std.dev المملوءة بينهما. انقر للتكبير.
يتوفر تسجيل فيديو للعميل الذي يؤدي جميع الألعاب الصغيرة الستة عبر الإنترنت على: https://youtu.be/gEyBzcPU5-w. في الفيديو الموجود على اليسار، يظهر العميل وهو يتصرف بأوزان مبدئية عشوائيًا وبدون تدريب، بينما على اليمين يتم تدريبه على تحقيق النتائج.
لقد أصبحت مشكلة تكرار الأبحاث مؤخرًا موضوعًا للعديد من المناقشات في العلوم بشكل عام، والتعلم المعزز ليس استثناءً. أحد أهداف Reaver كمشروع علمي هو المساعدة في تسهيل الأبحاث القابلة للتكرار. ولتحقيق هذه الغاية، يأتي Reaver مزودًا بأدوات متنوعة تعمل على تبسيط العملية:
لقيادة الطريق مع إمكانية التكرار، تم تضمين Reaver مع أوزان مدربة مسبقًا وسجلات ملخص Tensorboard كاملة لجميع الألعاب الصغيرة الستة. ما عليك سوى تنزيل أرشيف التجربة من علامة تبويب الإصدارات وفك الضغط في دليل results/
.
يمكنك استخدام الأوزان المدربة مسبقًا عن طريق إلحاق علامة --experiment
بالأمر reaver.run
:
python reaver.run --map <map_name> --experiment <map_name>_reaver --test 2> stderr.log
تتوفر سجلات Tensorboard إذا قمت بتشغيل tensorboard --logidr=results/summaries
.
يمكنك أيضًا مشاهدتها مباشرة عبر الإنترنت عبر Aughie Boards.
Reaver هي وحدة Protoss خاصة جدًا ولطيفة ذاتيًا في عالم ألعاب StarCraft. في إصدار اللعبة StarCraft: Brood War، اشتهر Reaver بكونه بطيئًا وأخرقًا وغالبًا ما يكون عديم الفائدة إذا ترك بمفرده بسبب الذكاء الاصطناعي الموجود داخل اللعبة. ومع ذلك، في أيدي اللاعبين المتفانين الذين استثمروا الوقت في إتقان الوحدة، أصبح Reaver واحدًا من أقوى الأصول في اللعبة، وغالبًا ما يلعب دورًا رئيسيًا في المباريات الفائزة بالبطولات.
تم تطوير سلف Reaver، المسمى ببساطة pysc2-rl-agent
، باعتباره الجزء العملي من أطروحة البكالوريوس في جامعة تارتو تحت إشراف إيليا كوزوفكين وتامبيت ماتيسن. لا يزال بإمكانك الوصول إليه على فرع v1.0.
إذا واجهت مشكلة متعلقة بقاعدة التعليمات البرمجية، فيرجى فتح تذكرة على GitHub ووصفها بأكبر قدر ممكن من التفاصيل. إذا كان لديك المزيد من الأسئلة العامة أو مجرد طلب المشورة فلا تتردد في مراسلتي عبر البريد الإلكتروني.
أنا أيضًا عضو فخور في مجتمع SC2AI عبر الإنترنت النشط والودي، ونحن نستخدم Discord في الغالب للتواصل. الأشخاص من جميع الخلفيات ومستويات الخبرة مدعوون للانضمام!
إذا وجدت أن Reaver مفيد في بحثك، فيرجى التفكير في الاستشهاد به مع bibtex التالي:
@misc{reaver,
author = {Ring, Roman},
title = {Reaver: Modular Deep Reinforcement Learning Framework},
year = {2018},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/inoryy/reaver}},
}