إسماعيل بن علا

MountainCar RL

جميع عائلات التعلم المعزز على مهمة واحدة نادرة المكافأة

التعلم المعزز · أكتوبر 2026 · مكتمل

سيارة أضعف من أن تصعد التل، وكل عائلات التعلم المعزز تحاول تعلّم حركة التأرجح التي توصلها إلى العلم.

التقنياتPyTorchGymnasiumNumPyMatplotlibpytest

MountainCar RL — نظرة عامة

نظرة عامة

تمنح بيئة MountainCar مكافأة -1 في كل خطوة حتى الوصول إلى العلم، لذا تحصل كل حلقة فاشلة على -200 بالضبط، ولا يتلقى المتعلم أي تلميح إلى أن يصل إلى العلم مرة واحدة. المحرك أضعف من الجاذبية، فعلى السيارة أن تتأرجح ذهاباً وإياباً لتجميع الطاقة. إنها مسألة الاستكشاف الكلاسيكية، وهي صغيرة بما يكفي لتتدرب كل طريقة على خيط معالج واحد في ثوانٍ إلى بضع دقائق.

كتبتُ قاعدة شيفرة صغيرة تكون فيها كل طريقة وكيلاً (Agent) بالدوال الخمس نفسها، وتشغّلها جميعاً حلقة تدريب واحدة: Q-learning وSARSA بعد التقطيع، والترميز بالبلاطات (tile coding)، وDQN / Double / Dueling DQN مع إعادة التشغيل ذات الأولوية (prioritized replay) وعوائد n-step، وREINFORCE وA2C وPPO وDDPG وTD3 وSAC وطريقة الإنتروبيا المتقاطعة. أدوات المساعدة على الاستكشاف (تشكيل قائم على دالة جهد للطاقة أو الارتفاع، ومكافآت العدّ وRND، وجداول epsilon) مغلِّفات للبيئة تُفعَّل بخيارات، فلا تعرف الخوارزميات أبداً ما إذا كانت المكافأة مشكَّلة، وكل جدول يعرض المكافأة الحقيقية.

تجيب المقارنة عن سؤال واحد: أي الطرق تجد العلم بنفسها وأيها تحتاج إلى مساعدة. يحل الترميز بالبلاطات وCEM المهمة المتقطعة في نحو 25 حلقة دون مساعدة. لا تصل DQN وDueling DQN وREINFORCE وA2C إلى العلم أبداً بالمكافأة الخام ضمن ميزانيتها؛ ومع تشكيل الطاقة تحلها جميع الطرق، ومكافأة حداثة قائمة على العدّ لا تعرف شيئاً عن الفيزياء تفعل الشيء نفسه مع DQN. وفي النسخة المستمرة تتقارب PPO وDDPG وTD3 وSAC جميعها نحو عدم فعل أي شيء دون تشكيل، لأن الإشارة الوحيدة قبل أي نجاح هي كلفة الفعل.

السؤال

في مهمة تحصل فيها كل حلقة فاشلة على -200 بالضبط، ما طرق التعلم المعزز (Reinforcement Learning) التي تكتشف الهدف بنفسها، وماذا تغيّر الإشارة الكثيفة (تشكيل قائم على دالة جهد أو مكافأة حداثة) بالنسبة إلى الطرق التي لا تكتشفه؟

أهم الميزات

كيف يعمل

  1. تمثيل الحالة

    الحالة هي (الموضع، السرعة). تستخدم الطرق الجدولية شبكة 16x16، ويستخدم الترميز بالبلاطات 8 تبليطات 8x8 مُزاحة مع Q خطية، وتأخذ الطرق العصبية الحالة مطبَّعة إلى [-1, 1]^2.

  2. تغليف المكافأة (اختياري)

    يضيف ShapingWrapper القيمة gamma * Phi(s') - Phi(s) حيث Phi الطاقة الميكانيكية أو الارتفاع، وهذا يترك السياسة المثلى دون تغيير. ويضيف IntrinsicWrapper القيمة 0.1 / sqrt(N(cell)) أو خطأ التنبؤ في RND. تُحفظ المكافأة الحقيقية في info، وهي ما تعرضه كل الجداول.

  3. حلقة واحدة لكل الوكلاء

    يستدعي train.py الدالتين act وobserve لكل طريقة: مدخل جدول واحد لـ Q-learning، و8 أوزان للترميز بالبلاطات، وخطوة على دفعة صغيرة لـ DQN / DDPG / TD3 / SAC، أو تخزين الانتقال حتى يكتمل المسار (rollout) لـ A2C وPPO وREINFORCE وCEM.

  4. تقييم جشع من بدايات ثابتة

    يعيد evaluate.py التهيئة بالبذور 1000-1019، ويعطّل epsilon وضجيج الأفعال والتشكيل، ويسجل معدل النجاح والعائد وعدد الخطوات، فتواجه كل طريقة حالات البداية نفسها.

  5. المقارنة

    يشغّل compare.py مجموعة تجارب (جدولية، عميقة متقطعة، استكشاف، مستمرة)، ويكتب جداول markdown ويرسم منحنيات التدريب وخرائط الزيارات الحرارية وخرائط السياسة من التشغيلات المحفوظة.

أمثلة

MountainCar-v0 من حالة البداية نفسها: وكيل عشوائي (يساراً) لا يجمع طاقة كافية أبداً وينتهي وقته عند 200 خطوة؛ وبعد 300 حلقة من الترميز بالبلاطات (يميناً) تندفع السيارة أولاً إلى اليسار وتصل إلى العلم في الخطوة 107.
MountainCarContinuous-v0: وكيل عشوائي (يساراً) مقابل SAC مع تشكيل الطاقة بعد 30 حلقة تدريب (يميناً)، يتأرجح مرة واحدة ثم يصعد إلى العلم.
كل طريقة حلّت المهمة المتقطعة، بالسياسة الجشعة ومن حالة البداية نفسها: تصل أحد عشر لوحاً إلى العلم بين الخطوتين 107 و169؛ أما Q-learning (نجاح جشع بنسبة 55%) فيصادف أن ينتهي وقته في هذه البداية.
كيف يتعلم الترميز بالبلاطات: الفعل الجشع على (الموضع، السرعة) كل 4 حلقات. يبدأ ضجيجاً، ثم ينمو حلزون «الدفع باتجاه السرعة» (الأحمر = يسار، الأزرق = يمين) انطلاقاً من العلم كلما انتشرت النجاحات إلى الخلف.
الترميز بالبلاطات (هدف Q) بعد 300 حلقة: الأماكن التي زارتها السيارة أثناء التدريب، وأقصى قيمة Q متعلَّمة، والسياسة الجشعة التي تقسم المستوى إلى «ادفع يساراً حين تتحرك يساراً، وادفع يميناً حين تتحرك يميناً».
الترميز بالبلاطات (هدف Q) بعد 300 حلقة: الأماكن التي زارتها السيارة أثناء التدريب، وأقصى قيمة Q متعلَّمة، والسياسة الجشعة التي تقسم المستوى إلى «ادفع يساراً حين تتحرك يساراً، وادفع يميناً حين تتحرك يميناً».
زيارات التدريب للطرق العصبية الست مع تشكيل الطاقة ودونه: تبقى التشغيلات الفاشلة في بقعة حول الوادي، بينما ترسم الناجحة حلزونات تمتد حتى العلم (الخط المتقطع).
زيارات التدريب للطرق العصبية الست مع تشكيل الطاقة ودونه: تبقى التشغيلات الفاشلة في بقعة حول الوادي، بينما ترسم الناجحة حلزونات تمتد حتى العلم (الخط المتقطع).
منحنيات التحكم المستمر: دون تشكيل تبقى PPO وDDPG وTD3 وSAC عند عائد 0 (لا تفعل شيئاً)؛ ومع تشكيل الطاقة تبلغ الأربعة 90-95 في بضع حلقات، ويحلها CEM دون مساعدة.
منحنيات التحكم المستمر: دون تشكيل تبقى PPO وDDPG وTD3 وSAC عند عائد 0 (لا تفعل شيئاً)؛ ومع تشكيل الطاقة تبلغ الأربعة 90-95 في بضع حلقات، ويحلها CEM دون مساعدة.

المدخل

mountaincar-eval runs/tabular/tile-coding_q --episodes 100

المخرج

success 100%, mean return -118.9 (std 15.2), 119 steps

تقييم جشع أطول لوكيل الترميز بالبلاطات المدرَّب 300 حلقة (6 ثوانٍ على خيط معالج واحد).

التقنيات المستخدمة

ما تعلمته

الحدود

الكلمات المفتاحية

التعلم المعزز · MountainCar · مكافأة نادرة · الاستكشاف · Q-learning · الترميز بالبلاطات · DQN · PPO · SAC · طريقة الإنتروبيا المتقاطعة · تشكيل المكافأة · Random Network Distillation · إعادة تشغيل التجارب ذات الأولوية · Gymnasium · PyTorch