انطلق في التعلم التعزيزي: خطوتك الأولى الملموسة اليوم
بدء التعلم التعزيزي: الأساسيات في مقال واحد — كود حقيقي، مخططات وخطوات ملموسة، مقتطفات من دورة مكونة من 42 درسًا.
أفضل طريقة لتعلم Débuter Reinforcement Learning هي بالممارسة. يساعدك هذا المقال على البدء بخطوات عملية مستمدة من دورة تتكون من 42 درسًا — ما يمكنك من الحصول على نتيجة أولى اليوم.
- موارد الدورة وتثبيت البيئة
- مقدمة في التعلم التعزيزي
- المفاهيم الأساسية للتعلم التعزيزي
- MDP الجزء 1 - الحالات والإجراءات والمكافآت
- MDP الجزء 2 - السياسة ومعادلات بيلمان
الفصل 02 – بطاقة المصطلحات الكاملة
نموذج تعلم آلي يتعلم فيه الوكيل كيف يتصرف داخل بيئة من خلال تنفيذ إجراءات وتلقي مكافآت أو عقوبات في المقابل.
- يلاحظ الوكيل حالة البيئة
- يختار إجراءً للتنفيذ
- يلاحظ النتيجة : حالة جديدة + مكافأة (إيجابية أو سلبية)
- بتكرار هذه الدورة، يتعلم الإجراءات التي تعظم المكافأة على المدى الطويل
الحالة — State st مكون أساسي
وصف كامل لـالوضع الحالي للبيئة في اللحظة t. هي المعلومات المتاحة للوكيل ليقرر الإجراء المناسب.
| نوع الحالة | الوصف | مثال |
|---|---|---|
| الحالة الأولية | الموضع البدائي في بداية الحلقة | الخلية (1,1) في متاهة |
| الحالة الوسيطة | أي حالة أثناء الحلقة (غير نهائية) | الخلايا التي تم اجتيازها في المتاهة |
| الحالة النهائية | حالة نهاية الحلقة (فوز أو خسارة) | مخرج المتاهة أو حفرة |
الإجراء at مكون أساسي
ما يقرر الوكيل فعله في حالة معينة. تشكل جميع الإجراءات الممكنة فضاء الإجراءات.
عدد محدود من الإجراءات القابلة للعد.
أمثلة : أعلى، أسفل، يسار، يمين (متاهة) ؛ 0 أو 1 (CartPole)
قيم رقمية ضمن مجال.
أمثلة : قوة من 0 إلى 10 نيوتن ؛ زاوية عجلة القيادة من −30° إلى +30°
المكافأة rt — Reward إشارة التعلم
إشارة رقمية يتلقاها الوكيل بعد كل إجراء. هي الطريقة الوحيدة التي تخبر بها البيئة الوكيل إن كان إجراؤه جيدًا أم سيئًا.
المكافأة المستلمة مباشرة بعد إجراء في الخطوة t. تعطي تغذية راجعة فورية على جودة إجراء واحد.
الترميز : rt+1
مجموع المكافآت المتراكمة على كامل الحلقة (أو إلى ما لا نهاية). هذا ما يسعى الوكيل فعليًا لتعظيمه.
الترميز : Gt = rt+1 + rt+2 + rt+3 + …
الخصم — معامل الخصم γ (gamma) معامل رئيسي
قيمة بين 0 و1 تزن المكافآت المستقبلية. كلما كانت المكافأة أبعد زمنيًا، زاد "انخفاض قيمتها". هي العقوبة المطبقة على المكافآت المستقبلية.
الوكيل "قصير النظر" : يفكر فقط في المكافأة الفورية. سلوك قصير الأمد.
الوكيل "مستقبلي" : يأخذ المكافآت المستقبلية بأهمية شبه متساوية. سلوك طويل الأمد.
المنفعة — Utility / Return Gt الهدف النهائي
مجموع المكافآت المخصومة الكلي المحصل من الخطوة الزمنية t. هي القيمة التي يسعى الوكيل لتعظيمها. تُسمى أيضًا العائد أو التراكمي.
السياسة — Policy π جوهر التعلم التعزيزي
استراتيجية القرار للوكيل : لكل حالة، تحدد الإجراء الواجب تنفيذه. هي "دماغ" الوكيل، ما يسعى لتعلمه.
بيئات بايثون الافتراضية
لماذا البيئات الافتراضية ؟
المشكلة بدون venv
الحل مع venv
| البيئة | بايثون | المكتبات | المشروع |
|---|---|---|---|
myenv39 | 3.9 | TensorFlow 2.10, Gym 0.26 | دورة RL (القديمة) |
myenv310 | 3.10 | Streamlit 1.28, pandas 2.0 | لوحة القيادة |
myenv311 | 3.11 | TensorFlow 2.15, Gymnasium | دورة RL (الحالية) |
rl-env | 3.12 | Gymnasium, NumPy, Matplotlib | هذه الدورة |
🪟 Windows تثبيت عدة إصدارات من بايثون
بعض الأوامر تتطلب صلاحيات المسؤول. إذا ظهر خطأ في الأذونات عند تفعيل venv، نفذ أولاً في PowerShell :
# افتح PowerShell كمسؤول، ثم : Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser # أجب بـ O (نعم) على التأكيد
قم بتنزيل وتثبيت كل إصدار من python.org/downloads. حدد «Add to PATH» للإصدار الأول فقط. للإصدارات التالية، ألغِ تحديد «Add to PATH» لتجنب التعارضات.
py تلقائيًا. يتيح لك استدعاء أي إصدار مثبت باستخدام py -3.10، py -3.11، إلخ.python --version # Python 3.x.x (الإصدار الافتراضي في PATH) py -3.9 --version # Python 3.9.x py -3.10 --version # Python 3.10.x py -3.11 --version # Python 3.11.x py -3.12 --version # Python 3.12.x py -3.13 --version # Python 3.13.x
# تحقق من الإصدار py -3.9 --version # أنشئ البيئة الافتراضية py -3.9 -m venv myenv39 # فعّل البيئة (PowerShell) .\myenv39\Scripts\activate # يتغير الـ prompt : (myenv39) يشير إلى أن البيئة نشطة (myenv39) python --version # Python 3.9.x (myenv39) pip install streamlit (myenv39) pip show streamlit # Name: streamlit # Version: 1.x.x # ... # عطّل البيئة (myenv39) deactivate
py -3.10 --version
py -3.10 -m venv myenv310
.\myenv310\Scripts\activate
(myenv310) python --version
# Python 3.10.x
(myenv310) pip install streamlit
(myenv310) pip show streamlit
(myenv310) deactivate# Python 3.11 py -3.11 -m venv myenv311 .\myenv311\Scripts\activate (myenv311) python --version (myenv311) pip install streamlit (myenv311) deactivate # Python 3.12 py -3.12 -m venv myenv312 .\myenv312\Scripts\activate (myenv312) python --version (myenv312) pip install streamlit (myenv312) deactivate # Python 3.13 py -3.13 -m venv myenv313 .\myenv313\Scripts\activate (myenv313) python --version (myenv313) pip install streamlit (myenv313) deactivate
🔗 SSH الاتصال بجهاز Linux افتراضي من ويندوز
الخطوة 1 — تثبيت SSH على جهاز Linux الافتراضي
في طرفية جهاز Linux الافتراضي، كمستخدم جذر :
su # أو : sudo -s apt install openssh-server -y systemctl status ssh # تحقق من الحالة systemctl start ssh # شغّل إذا لزم الأمر systemctl enable ssh # شغّل تلقائيًا عند الإقلاع # ابحث عن عنوان IP للجهاز الافتراضي ip -br addr # lo UNKNOWN 127.0.0.1/8 # eth0 UP 192.168.2.139/24 ← انسخ هذا الـ IP
أول سكريبت Gym – اختبار التثبيت
الهدف من هذا الدرس هو التحقق فقط من عمل بيئتك. ستقوم بنسخ ولصق السكريبتات وملاحظة النتائج. لا يلزم فهم كل شيء الآن — سيتم شرح كل سطر بالتفصيل في الفصول القادمة. تنفس، إنه مجرد اختبار بدء !
الخيار أ – الاختبار محليًا (Jupyter)
إذا اتبعت الدرسين 01 و02 (تثبيت Anaconda + إعداد Jupyter)، فعّل بيئتك وشغّل Jupyter :
conda activate rl-env jupyter notebook
ثم انسخ السكريبتات أدناه إلى خلية ونفذ باستخدام Shift + Enter.
الخيار ب – الاختبار في Google Colab (لا شيء للتثبيت !)
يعمل Google Colab مباشرة في المتصفح. لا يتطلب أي تثبيت — مثالي للاختبار الآن والتثبيت محليًا لاحقًا.
افتح دفترًا جديدًا على colab.research.google.com، ثم ثبت Gymnasium في الخلية الأولى :
# Cellule 1 — Installation (Colab uniquement, déjà fait si vous êtes en local) !pip install gymnasium[toy-text] matplotlib --quiet
ثم انسخ السكريبتات أدناه إلى الخلايا التالية. هذا كل شيء !
ما هو Gymnasium (سابقًا OpenAI Gym) ؟
Gymnasium هي المكتبة المرجعية لاختبار خوارزميات التعلم التعزيزي. توفر بيئات قياسية بواجهة موحدة.
البيئات الكلاسيكية
الواجهة العالمية
السكريبت 1 – استكشاف بيئة CartPole
import gymnasium as gym
import numpy as np
# Créer l'environnement
env = gym.make("CartPole-v1")
obs, info = env.reset(seed=42)
print("=== CartPole-v1 ===")
print(f"Espace d'états : {env.observation_space}")
print(f" Nombre de dimensions : {env.observation_space.shape[0]}")
print(f" Valeurs min : {env.observation_space.low}")
print(f" Valeurs max : {env.observation_space.high}")
print(f"\nEspace d'actions : {env.action_space}")
print(f" Nombre d'actions : {env.action_space.n}")
print(f" Actions : 0 (gauche), 1 (droite)")
print(f"\nObservation initiale : {obs}")
print(f" [position cart, vitesse cart, angle bâton, vitesse bâton]")
env.close()السكريبت 2 – وكيل عشوائي على CartPole
import gymnasium as gym
import numpy as np
import matplotlib.pyplot as plt
def run_random_agent(env_name, n_episodes=100):
"""Agent qui prend des actions aléatoires - notre baseline."""
env = gym.make(env_name)
total_rewards = []
for episode in range(n_episodes):
obs, info = env.reset()
episode_reward = 0
done = False
while not done:
# Action aléatoire (pas d'apprentissage)
action = env.action_space.sample()
obs, reward, terminated, truncated, info = env.step(action)
episode_reward += reward
done = terminated or truncated
total_rewards.append(episode_reward)
env.close()
return total_rewards
# Exécuter l'agent aléatoire
rewards = run_random_agent("CartPole-v1", n_episodes=100)
print(f"Récompense moyenne : {np.mean(rewards):.2f}")
print(f"Récompense maximale : {np.max(rewards):.0f}")
print(f"Récompense minimale : {np.min(rewards):.0f}")
# Visualiser
plt.figure(figsize=(10, 4))
plt.plot(rewards, alpha=0.6, label="Récompense par épisode")
plt.axhline(np.mean(rewards), color='red', linestyle='--', label=f"Moyenne: {np.mean(rewards):.1f}")
plt.xlabel("Épisode")
plt.ylabel("Récompense totale")
plt.title("Agent aléatoire - CartPole-v1")
plt.legend()
plt.tight_layout()
plt.savefig("agent_aleatoire_cartpole.png")
plt.show()السكريبت 3 – استكشاف FrozenLake (بيئة منفصلة)
import gymnasium as gym
# FrozenLake : grille 4x4 avec états discrets
env = gym.make("FrozenLake-v1", is_slippery=False)
obs, info = env.reset()
print("=== FrozenLake-v1 ===")
print(f"Espace d'états : {env.observation_space.n} états (grille 4x4)")
print(f"Espace d'actions : {env.action_space.n} actions")
print(f" 0=gauche, 1=bas, 2=droite, 3=haut")
print(f"\nÉtat initial : {obs}")
print("\nVisualisez la grille :")
env.render()
# Boucle manuelle
actions_manuelles = [2, 2, 1, 1, 1, 2, 1, 2, 2] # chemin vers la sortie
total_reward = 0
print("\n--- Simulation manuelle ---")
obs, _ = env.reset()
for i, action in enumerate(actions_manuelles):
obs, reward, terminated, truncated, _ = env.step(action)
total_reward += reward
direction = ["←", "↓", "→", "↑"][action]
print(f"Étape {i+1}: {direction} État={obs} Récompense={reward}")
if terminated or truncated:
break
print(f"\nRécompense totale : {total_reward}")
env.close()يغطي هذا المقال المقتطفات الأكثر فائدة — الدورة الكاملة Débuter Reinforcement Learning (12 فصلاً، 42 درسًا، تمارين محلولة ومشروع نهائي) تأخذك إلى النهاية.
./acceder-au-cours-complet cours gratuit : Maîtriser Claude Codeالأسئلة الشائعة
كم من الوقت يستغرق تعلم Débuter Reinforcement Learning ؟
هل هناك متطلبات سابقة ؟
من أين أبدأ عمليًا ؟
📬 هل تريد تلقي هذا النوع من الأدلة أسبوعيًا ؟ اشترك مجانًا — كود حقيقي، بدون كلام زائد.