Exercice 1 : Initialisation de l’environnement et des structures de données¶
- Objectif : Initialiser l'environnement
Taxi-v3et créer les tables de politique et de valeur.
In [14]:
import gymnasium as gym
import numpy as np
import matplotlib.pyplot as plt
# Initialisation de l'environnement
env = gym.make("Taxi-v3", render_mode="human")
# Nombre d'états et d'actions
state_size = env.observation_space.n
action_size = env.action_space.n
# Création d'une table de politique avec des probabilités égales pour chaque action
policy_table = np.ones((state_size, action_size)) / action_size
# Création d'une table de valeurs initialisée à zéro
value_table = np.zeros(state_size)
# Affichage des premières lignes des tables
print("Policy Table Sample:\n", policy_table[:5])
print("Value Table Sample:\n", value_table[:5])
Policy Table Sample: [[0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667] [0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667] [0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667] [0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667] [0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667]] Value Table Sample: [0. 0. 0. 0. 0.]
Exercice 2 : Exploration et collecte d’épisodes¶
- Objectif : Explorer l'environnement en exécutant des actions aléatoires et collecter des épisodes.
In [17]:
state, _ = env.reset()
for t in range(20):
action = env.action_space.sample() # Action aléatoire
next_state, reward, done, _, _ = env.step(action)
print(f"Step {t}: Action={action}, Reward={reward}, Next State={next_state}")
if done:
state, _ = env.reset() # Réinitialiser l'environnement
env.close()
Step 0: Action=0, Reward=-1, Next State=263 Step 1: Action=3, Reward=-1, Next State=243 Step 2: Action=5, Reward=-10, Next State=243 Step 3: Action=5, Reward=-10, Next State=243 Step 4: Action=3, Reward=-1, Next State=223 Step 5: Action=2, Reward=-1, Next State=243 Step 6: Action=4, Reward=-10, Next State=243 Step 7: Action=4, Reward=-10, Next State=243 Step 8: Action=0, Reward=-1, Next State=343 Step 9: Action=3, Reward=-1, Next State=323 Step 10: Action=1, Reward=-1, Next State=223 Step 11: Action=4, Reward=-10, Next State=223 Step 12: Action=4, Reward=-10, Next State=223 Step 13: Action=5, Reward=-10, Next State=223 Step 14: Action=4, Reward=-10, Next State=223 Step 15: Action=2, Reward=-1, Next State=243 Step 16: Action=0, Reward=-1, Next State=343 Step 17: Action=3, Reward=-1, Next State=323 Step 18: Action=0, Reward=-1, Next State=423 Step 19: Action=5, Reward=-10, Next State=423
Exercice 3 : Mise à jour de la politique avec PPO¶
- Objectif : Mettre à jour la politique en utilisant l'algorithme PPO (Proximal Policy Optimization).
In [5]:
# Hyperparameters
gamma = 0.99
lr_policy = 0.001 # Learning rate for policy
lr_value = 0.01 # Learning rate for value function
clip_epsilon = 0.2
num_episodes = 40000
epsilon_start = 1.0
epsilon_decay = 0.995
epsilon_min = 0.01
max_steps_per_episode = 200
# Initialization of structures
policy_table = np.ones((state_size, action_size)) / action_size # Uniform initialization
value_table = np.zeros(state_size) # Value table for advantage calculation
episode_rewards = [] # List to track rewards over episodes
for episode in range(num_episodes):
state, _ = env.reset()
done = False
episode_states = []
episode_actions = []
episode_rewards_ep = []
episode_probs = []
steps = 0
# Collect episode
while not done and steps < max_steps_per_episode:
probs = policy_table[state]
# Ensure probabilities are valid (non-negative and sum to 1)
probs = np.clip(probs, 0, 1) # Clip negative probabilities to 0
probs = probs / np.sum(probs) # Normalize the probabilities to sum to 1
action = np.random.choice(action_size, p=probs) # Random action based on policy
next_state, reward, done, _, _ = env.step(action)
# Store episode details for later updates
episode_states.append(state)
episode_actions.append(action)
episode_rewards_ep.append(reward)
episode_probs.append(probs[action])
state = next_state
steps += 1
# Calculate advantages
discounted_rewards = np.zeros_like(episode_rewards_ep, dtype=np.float32)
running_reward = 0
for t in reversed(range(len(episode_rewards_ep))):
running_reward = episode_rewards_ep[t] + gamma * running_reward
discounted_rewards[t] = running_reward - value_table[episode_states[t]]
# Normalize advantages
discounted_rewards = (discounted_rewards - discounted_rewards.mean()) / (discounted_rewards.std() + 1e-8)
# PPO Update
for state, action, old_prob, advantage in zip(episode_states, episode_actions, episode_probs, discounted_rewards):
# Calculate ratio
new_prob = policy_table[state, action]
ratio = new_prob / (old_prob + 1e-8)
# Clipping the ratio for stability
clipped_ratio = np.clip(ratio, 1 - clip_epsilon, 1 + clip_epsilon)
# Update policy using clipped objective
policy_table[state, action] += lr_policy * min(ratio * advantage, clipped_ratio * advantage)
# Normalize the probabilities to ensure they sum to 1
policy_table[state] /= policy_table[state].sum()
# Update value function
value_table[state] += lr_value * (advantage + value_table[state] - value_table[state])
# Decay epsilon for exploration-exploitation balance
epsilon = max(epsilon_start * (epsilon_decay ** episode), epsilon_min)
# Track the total reward for this episode
episode_rewards.append(np.sum(episode_rewards_ep))
# Log every 100 episodes to track progress
if (episode + 1) % 100 == 0:
avg_reward = np.mean(episode_rewards[-100:])
print(f"Épisode {episode + 1}/{num_episodes} - Récompense moyenne: {avg_reward:.2f}")
Épisode 100/40000 - Récompense moyenne: -758.26 Épisode 200/40000 - Récompense moyenne: -750.20 Épisode 300/40000 - Récompense moyenne: -775.85 Épisode 400/40000 - Récompense moyenne: -755.69 Épisode 500/40000 - Récompense moyenne: -766.32 Épisode 600/40000 - Récompense moyenne: -776.12 Épisode 700/40000 - Récompense moyenne: -760.59 Épisode 800/40000 - Récompense moyenne: -774.74 Épisode 900/40000 - Récompense moyenne: -759.55 Épisode 1000/40000 - Récompense moyenne: -763.82 Épisode 1100/40000 - Récompense moyenne: -767.47 Épisode 1200/40000 - Récompense moyenne: -755.75 Épisode 1300/40000 - Récompense moyenne: -759.55 Épisode 1400/40000 - Récompense moyenne: -745.72 Épisode 1500/40000 - Récompense moyenne: -745.17 Épisode 1600/40000 - Récompense moyenne: -743.14 Épisode 1700/40000 - Récompense moyenne: -734.67 Épisode 1800/40000 - Récompense moyenne: -739.11 Épisode 1900/40000 - Récompense moyenne: -751.07 Épisode 2000/40000 - Récompense moyenne: -744.60 Épisode 2100/40000 - Récompense moyenne: -743.22 Épisode 2200/40000 - Récompense moyenne: -710.06 Épisode 2300/40000 - Récompense moyenne: -706.76 Épisode 2400/40000 - Récompense moyenne: -750.94 Épisode 2500/40000 - Récompense moyenne: -712.99 Épisode 2600/40000 - Récompense moyenne: -724.05 Épisode 2700/40000 - Récompense moyenne: -723.40 Épisode 2800/40000 - Récompense moyenne: -732.18 Épisode 2900/40000 - Récompense moyenne: -719.75 Épisode 3000/40000 - Récompense moyenne: -712.98 Épisode 3100/40000 - Récompense moyenne: -699.76 Épisode 3200/40000 - Récompense moyenne: -717.23 Épisode 3300/40000 - Récompense moyenne: -709.09 Épisode 3400/40000 - Récompense moyenne: -693.94 Épisode 3500/40000 - Récompense moyenne: -706.22 Épisode 3600/40000 - Récompense moyenne: -683.84 Épisode 3700/40000 - Récompense moyenne: -693.22 Épisode 3800/40000 - Récompense moyenne: -689.67 Épisode 3900/40000 - Récompense moyenne: -703.91 Épisode 4000/40000 - Récompense moyenne: -705.41 Épisode 4100/40000 - Récompense moyenne: -694.83 Épisode 4200/40000 - Récompense moyenne: -707.41 Épisode 4300/40000 - Récompense moyenne: -697.32 Épisode 4400/40000 - Récompense moyenne: -686.83 Épisode 4500/40000 - Récompense moyenne: -703.17 Épisode 4600/40000 - Récompense moyenne: -655.68 Épisode 4700/40000 - Récompense moyenne: -678.99 Épisode 4800/40000 - Récompense moyenne: -676.02 Épisode 4900/40000 - Récompense moyenne: -667.49 Épisode 5000/40000 - Récompense moyenne: -665.39 Épisode 5100/40000 - Récompense moyenne: -665.70 Épisode 5200/40000 - Récompense moyenne: -655.35 Épisode 5300/40000 - Récompense moyenne: -650.10 Épisode 5400/40000 - Récompense moyenne: -690.55 Épisode 5500/40000 - Récompense moyenne: -665.82 Épisode 5600/40000 - Récompense moyenne: -635.38 Épisode 5700/40000 - Récompense moyenne: -664.13 Épisode 5800/40000 - Récompense moyenne: -680.70 Épisode 5900/40000 - Récompense moyenne: -625.37 Épisode 6000/40000 - Récompense moyenne: -657.29 Épisode 6100/40000 - Récompense moyenne: -665.05 Épisode 6200/40000 - Récompense moyenne: -626.78 Épisode 6300/40000 - Récompense moyenne: -630.65 Épisode 6400/40000 - Récompense moyenne: -600.11 Épisode 6500/40000 - Récompense moyenne: -643.30 Épisode 6600/40000 - Récompense moyenne: -605.53 Épisode 6700/40000 - Récompense moyenne: -626.16 Épisode 6800/40000 - Récompense moyenne: -606.10 Épisode 6900/40000 - Récompense moyenne: -625.65 Épisode 7000/40000 - Récompense moyenne: -618.08 Épisode 7100/40000 - Récompense moyenne: -585.73 Épisode 7200/40000 - Récompense moyenne: -598.01 Épisode 7300/40000 - Récompense moyenne: -585.20 Épisode 7400/40000 - Récompense moyenne: -592.74 Épisode 7500/40000 - Récompense moyenne: -518.56 Épisode 7600/40000 - Récompense moyenne: -592.25 Épisode 7700/40000 - Récompense moyenne: -558.12 Épisode 7800/40000 - Récompense moyenne: -547.63 Épisode 7900/40000 - Récompense moyenne: -578.76 Épisode 8000/40000 - Récompense moyenne: -583.95 Épisode 8100/40000 - Récompense moyenne: -591.55 Épisode 8200/40000 - Récompense moyenne: -558.67 Épisode 8300/40000 - Récompense moyenne: -575.45 Épisode 8400/40000 - Récompense moyenne: -545.73 Épisode 8500/40000 - Récompense moyenne: -514.36 Épisode 8600/40000 - Récompense moyenne: -522.33 Épisode 8700/40000 - Récompense moyenne: -535.99 Épisode 8800/40000 - Récompense moyenne: -499.44 Épisode 8900/40000 - Récompense moyenne: -509.14 Épisode 9000/40000 - Récompense moyenne: -515.72 Épisode 9100/40000 - Récompense moyenne: -501.51 Épisode 9200/40000 - Récompense moyenne: -542.61 Épisode 9300/40000 - Récompense moyenne: -504.26 Épisode 9400/40000 - Récompense moyenne: -515.79 Épisode 9500/40000 - Récompense moyenne: -525.84 Épisode 9600/40000 - Récompense moyenne: -502.36 Épisode 9700/40000 - Récompense moyenne: -451.77 Épisode 9800/40000 - Récompense moyenne: -502.25 Épisode 9900/40000 - Récompense moyenne: -529.68 Épisode 10000/40000 - Récompense moyenne: -438.29 Épisode 10100/40000 - Récompense moyenne: -469.53 Épisode 10200/40000 - Récompense moyenne: -482.75 Épisode 10300/40000 - Récompense moyenne: -449.40 Épisode 10400/40000 - Récompense moyenne: -463.66 Épisode 10500/40000 - Récompense moyenne: -482.06 Épisode 10600/40000 - Récompense moyenne: -475.21 Épisode 10700/40000 - Récompense moyenne: -463.81 Épisode 10800/40000 - Récompense moyenne: -452.59 Épisode 10900/40000 - Récompense moyenne: -445.18 Épisode 11000/40000 - Récompense moyenne: -412.75 Épisode 11100/40000 - Récompense moyenne: -388.97 Épisode 11200/40000 - Récompense moyenne: -412.48 Épisode 11300/40000 - Récompense moyenne: -436.82 Épisode 11400/40000 - Récompense moyenne: -430.77 Épisode 11500/40000 - Récompense moyenne: -430.74 Épisode 11600/40000 - Récompense moyenne: -451.89 Épisode 11700/40000 - Récompense moyenne: -402.11 Épisode 11800/40000 - Récompense moyenne: -384.61 Épisode 11900/40000 - Récompense moyenne: -448.18 Épisode 12000/40000 - Récompense moyenne: -393.53 Épisode 12100/40000 - Récompense moyenne: -344.03 Épisode 12200/40000 - Récompense moyenne: -385.19 Épisode 12300/40000 - Récompense moyenne: -373.14 Épisode 12400/40000 - Récompense moyenne: -330.59 Épisode 12500/40000 - Récompense moyenne: -356.97 Épisode 12600/40000 - Récompense moyenne: -337.08 Épisode 12700/40000 - Récompense moyenne: -350.16 Épisode 12800/40000 - Récompense moyenne: -327.96 Épisode 12900/40000 - Récompense moyenne: -303.69 Épisode 13000/40000 - Récompense moyenne: -328.86 Épisode 13100/40000 - Récompense moyenne: -357.45 Épisode 13200/40000 - Récompense moyenne: -344.49 Épisode 13300/40000 - Récompense moyenne: -299.79 Épisode 13400/40000 - Récompense moyenne: -311.10 Épisode 13500/40000 - Récompense moyenne: -327.59 Épisode 13600/40000 - Récompense moyenne: -301.58 Épisode 13700/40000 - Récompense moyenne: -308.21 Épisode 13800/40000 - Récompense moyenne: -322.93 Épisode 13900/40000 - Récompense moyenne: -287.10 Épisode 14000/40000 - Récompense moyenne: -275.77 Épisode 14100/40000 - Récompense moyenne: -293.02 Épisode 14200/40000 - Récompense moyenne: -297.85 Épisode 14300/40000 - Récompense moyenne: -318.22 Épisode 14400/40000 - Récompense moyenne: -249.36 Épisode 14500/40000 - Récompense moyenne: -243.88 Épisode 14600/40000 - Récompense moyenne: -276.24 Épisode 14700/40000 - Récompense moyenne: -235.64 Épisode 14800/40000 - Récompense moyenne: -266.52 Épisode 14900/40000 - Récompense moyenne: -288.91 Épisode 15000/40000 - Récompense moyenne: -225.09 Épisode 15100/40000 - Récompense moyenne: -247.65 Épisode 15200/40000 - Récompense moyenne: -270.96 Épisode 15300/40000 - Récompense moyenne: -270.73 Épisode 15400/40000 - Récompense moyenne: -224.49 Épisode 15500/40000 - Récompense moyenne: -230.84 Épisode 15600/40000 - Récompense moyenne: -199.04 Épisode 15700/40000 - Récompense moyenne: -238.14 Épisode 15800/40000 - Récompense moyenne: -217.07 Épisode 15900/40000 - Récompense moyenne: -208.45 Épisode 16000/40000 - Récompense moyenne: -203.22 Épisode 16100/40000 - Récompense moyenne: -226.13 Épisode 16200/40000 - Récompense moyenne: -217.84 Épisode 16300/40000 - Récompense moyenne: -225.82 Épisode 16400/40000 - Récompense moyenne: -186.55 Épisode 16500/40000 - Récompense moyenne: -176.21 Épisode 16600/40000 - Récompense moyenne: -219.78 Épisode 16700/40000 - Récompense moyenne: -175.24 Épisode 16800/40000 - Récompense moyenne: -190.59 Épisode 16900/40000 - Récompense moyenne: -190.63 Épisode 17000/40000 - Récompense moyenne: -165.78 Épisode 17100/40000 - Récompense moyenne: -189.79 Épisode 17200/40000 - Récompense moyenne: -164.10 Épisode 17300/40000 - Récompense moyenne: -154.91 Épisode 17400/40000 - Récompense moyenne: -165.72 Épisode 17500/40000 - Récompense moyenne: -164.04 Épisode 17600/40000 - Récompense moyenne: -174.95 Épisode 17700/40000 - Récompense moyenne: -161.04 Épisode 17800/40000 - Récompense moyenne: -169.85 Épisode 17900/40000 - Récompense moyenne: -158.28 Épisode 18000/40000 - Récompense moyenne: -166.55 Épisode 18100/40000 - Récompense moyenne: -158.03 Épisode 18200/40000 - Récompense moyenne: -142.40 Épisode 18300/40000 - Récompense moyenne: -149.17 Épisode 18400/40000 - Récompense moyenne: -135.25 Épisode 18500/40000 - Récompense moyenne: -148.02 Épisode 18600/40000 - Récompense moyenne: -138.10 Épisode 18700/40000 - Récompense moyenne: -144.25 Épisode 18800/40000 - Récompense moyenne: -144.77 Épisode 18900/40000 - Récompense moyenne: -140.52 Épisode 19000/40000 - Récompense moyenne: -123.88 Épisode 19100/40000 - Récompense moyenne: -126.33 Épisode 19200/40000 - Récompense moyenne: -153.57 Épisode 19300/40000 - Récompense moyenne: -146.89 Épisode 19400/40000 - Récompense moyenne: -127.89 Épisode 19500/40000 - Récompense moyenne: -127.05 Épisode 19600/40000 - Récompense moyenne: -113.80 Épisode 19700/40000 - Récompense moyenne: -121.05 Épisode 19800/40000 - Récompense moyenne: -116.52 Épisode 19900/40000 - Récompense moyenne: -120.03 Épisode 20000/40000 - Récompense moyenne: -109.31 Épisode 20100/40000 - Récompense moyenne: -120.03 Épisode 20200/40000 - Récompense moyenne: -117.25 Épisode 20300/40000 - Récompense moyenne: -114.28 Épisode 20400/40000 - Récompense moyenne: -100.02 Épisode 20500/40000 - Récompense moyenne: -117.72 Épisode 20600/40000 - Récompense moyenne: -107.11 Épisode 20700/40000 - Récompense moyenne: -116.94 Épisode 20800/40000 - Récompense moyenne: -118.92 Épisode 20900/40000 - Récompense moyenne: -115.52 Épisode 21000/40000 - Récompense moyenne: -107.17 Épisode 21100/40000 - Récompense moyenne: -93.33 Épisode 21200/40000 - Récompense moyenne: -89.27 Épisode 21300/40000 - Récompense moyenne: -101.62 Épisode 21400/40000 - Récompense moyenne: -83.03 Épisode 21500/40000 - Récompense moyenne: -95.19 Épisode 21600/40000 - Récompense moyenne: -102.16 Épisode 21700/40000 - Récompense moyenne: -104.75 Épisode 21800/40000 - Récompense moyenne: -84.62 Épisode 21900/40000 - Récompense moyenne: -106.95 Épisode 22000/40000 - Récompense moyenne: -93.12 Épisode 22100/40000 - Récompense moyenne: -93.12 Épisode 22200/40000 - Récompense moyenne: -93.11 Épisode 22300/40000 - Récompense moyenne: -91.08 Épisode 22400/40000 - Récompense moyenne: -84.90 Épisode 22500/40000 - Récompense moyenne: -83.93 Épisode 22600/40000 - Récompense moyenne: -87.69 Épisode 22700/40000 - Récompense moyenne: -90.50 Épisode 22800/40000 - Récompense moyenne: -80.90 Épisode 22900/40000 - Récompense moyenne: -81.33 Épisode 23000/40000 - Récompense moyenne: -83.47 Épisode 23100/40000 - Récompense moyenne: -75.82 Épisode 23200/40000 - Récompense moyenne: -75.02 Épisode 23300/40000 - Récompense moyenne: -86.02 Épisode 23400/40000 - Récompense moyenne: -99.27 Épisode 23500/40000 - Récompense moyenne: -89.42 Épisode 23600/40000 - Récompense moyenne: -67.89 Épisode 23700/40000 - Récompense moyenne: -69.52 Épisode 23800/40000 - Récompense moyenne: -79.41 Épisode 23900/40000 - Récompense moyenne: -72.60 Épisode 24000/40000 - Récompense moyenne: -70.52 Épisode 24100/40000 - Récompense moyenne: -71.66 Épisode 24200/40000 - Récompense moyenne: -54.40 Épisode 24300/40000 - Récompense moyenne: -74.32 Épisode 24400/40000 - Récompense moyenne: -69.72 Épisode 24500/40000 - Récompense moyenne: -66.54 Épisode 24600/40000 - Récompense moyenne: -58.87 Épisode 24700/40000 - Récompense moyenne: -61.44 Épisode 24800/40000 - Récompense moyenne: -59.50 Épisode 24900/40000 - Récompense moyenne: -64.79 Épisode 25000/40000 - Récompense moyenne: -61.73 Épisode 25100/40000 - Récompense moyenne: -67.98 Épisode 25200/40000 - Récompense moyenne: -56.20 Épisode 25300/40000 - Récompense moyenne: -55.03 Épisode 25400/40000 - Récompense moyenne: -62.48 Épisode 25500/40000 - Récompense moyenne: -67.07 Épisode 25600/40000 - Récompense moyenne: -57.79 Épisode 25700/40000 - Récompense moyenne: -62.66 Épisode 25800/40000 - Récompense moyenne: -51.96 Épisode 25900/40000 - Récompense moyenne: -57.64 Épisode 26000/40000 - Récompense moyenne: -49.09 Épisode 26100/40000 - Récompense moyenne: -54.32 Épisode 26200/40000 - Récompense moyenne: -58.05 Épisode 26300/40000 - Récompense moyenne: -50.64 Épisode 26400/40000 - Récompense moyenne: -60.56 Épisode 26500/40000 - Récompense moyenne: -46.37 Épisode 26600/40000 - Récompense moyenne: -48.31 Épisode 26700/40000 - Récompense moyenne: -50.71 Épisode 26800/40000 - Récompense moyenne: -43.12 Épisode 26900/40000 - Récompense moyenne: -50.83 Épisode 27000/40000 - Récompense moyenne: -53.40 Épisode 27100/40000 - Récompense moyenne: -63.07 Épisode 27200/40000 - Récompense moyenne: -46.86 Épisode 27300/40000 - Récompense moyenne: -47.74 Épisode 27400/40000 - Récompense moyenne: -48.92 Épisode 27500/40000 - Récompense moyenne: -48.74 Épisode 27600/40000 - Récompense moyenne: -48.76 Épisode 27700/40000 - Récompense moyenne: -51.56 Épisode 27800/40000 - Récompense moyenne: -53.13 Épisode 27900/40000 - Récompense moyenne: -44.02 Épisode 28000/40000 - Récompense moyenne: -49.20 Épisode 28100/40000 - Récompense moyenne: -43.06 Épisode 28200/40000 - Récompense moyenne: -57.29 Épisode 28300/40000 - Récompense moyenne: -49.45 Épisode 28400/40000 - Récompense moyenne: -43.67 Épisode 28500/40000 - Récompense moyenne: -54.28 Épisode 28600/40000 - Récompense moyenne: -44.10 Épisode 28700/40000 - Récompense moyenne: -49.60 Épisode 28800/40000 - Récompense moyenne: -47.45 Épisode 28900/40000 - Récompense moyenne: -37.76 Épisode 29000/40000 - Récompense moyenne: -41.83 Épisode 29100/40000 - Récompense moyenne: -36.23 Épisode 29200/40000 - Récompense moyenne: -36.04 Épisode 29300/40000 - Récompense moyenne: -47.49 Épisode 29400/40000 - Récompense moyenne: -31.22 Épisode 29500/40000 - Récompense moyenne: -44.21 Épisode 29600/40000 - Récompense moyenne: -42.33 Épisode 29700/40000 - Récompense moyenne: -39.45 Épisode 29800/40000 - Récompense moyenne: -35.91 Épisode 29900/40000 - Récompense moyenne: -36.70 Épisode 30000/40000 - Récompense moyenne: -43.41 Épisode 30100/40000 - Récompense moyenne: -37.74 Épisode 30200/40000 - Récompense moyenne: -36.52 Épisode 30300/40000 - Récompense moyenne: -37.10 Épisode 30400/40000 - Récompense moyenne: -33.57 Épisode 30500/40000 - Récompense moyenne: -32.13 Épisode 30600/40000 - Récompense moyenne: -31.86 Épisode 30700/40000 - Récompense moyenne: -30.25 Épisode 30800/40000 - Récompense moyenne: -34.53 Épisode 30900/40000 - Récompense moyenne: -34.02 Épisode 31000/40000 - Récompense moyenne: -32.81 Épisode 31100/40000 - Récompense moyenne: -38.38 Épisode 31200/40000 - Récompense moyenne: -30.54 Épisode 31300/40000 - Récompense moyenne: -40.38 Épisode 31400/40000 - Récompense moyenne: -34.78 Épisode 31500/40000 - Récompense moyenne: -30.39 Épisode 31600/40000 - Récompense moyenne: -29.65 Épisode 31700/40000 - Récompense moyenne: -24.46 Épisode 31800/40000 - Récompense moyenne: -33.12 Épisode 31900/40000 - Récompense moyenne: -31.38 Épisode 32000/40000 - Récompense moyenne: -27.10 Épisode 32100/40000 - Récompense moyenne: -36.06 Épisode 32200/40000 - Récompense moyenne: -34.83 Épisode 32300/40000 - Récompense moyenne: -33.68 Épisode 32400/40000 - Récompense moyenne: -33.61 Épisode 32500/40000 - Récompense moyenne: -29.25 Épisode 32600/40000 - Récompense moyenne: -34.55 Épisode 32700/40000 - Récompense moyenne: -23.73 Épisode 32800/40000 - Récompense moyenne: -31.87 Épisode 32900/40000 - Récompense moyenne: -22.78 Épisode 33000/40000 - Récompense moyenne: -30.95 Épisode 33100/40000 - Récompense moyenne: -29.77 Épisode 33200/40000 - Récompense moyenne: -30.89 Épisode 33300/40000 - Récompense moyenne: -25.33 Épisode 33400/40000 - Récompense moyenne: -27.18 Épisode 33500/40000 - Récompense moyenne: -21.97 Épisode 33600/40000 - Récompense moyenne: -23.33 Épisode 33700/40000 - Récompense moyenne: -25.54 Épisode 33800/40000 - Récompense moyenne: -24.36 Épisode 33900/40000 - Récompense moyenne: -26.06 Épisode 34000/40000 - Récompense moyenne: -23.00 Épisode 34100/40000 - Récompense moyenne: -30.34 Épisode 34200/40000 - Récompense moyenne: -25.11 Épisode 34300/40000 - Récompense moyenne: -25.13 Épisode 34400/40000 - Récompense moyenne: -29.25 Épisode 34500/40000 - Récompense moyenne: -24.88 Épisode 34600/40000 - Récompense moyenne: -24.36 Épisode 34700/40000 - Récompense moyenne: -25.02 Épisode 34800/40000 - Récompense moyenne: -24.61 Épisode 34900/40000 - Récompense moyenne: -22.74 Épisode 35000/40000 - Récompense moyenne: -22.80 Épisode 35100/40000 - Récompense moyenne: -28.62 Épisode 35200/40000 - Récompense moyenne: -23.81 Épisode 35300/40000 - Récompense moyenne: -22.87 Épisode 35400/40000 - Récompense moyenne: -27.94 Épisode 35500/40000 - Récompense moyenne: -26.17 Épisode 35600/40000 - Récompense moyenne: -18.90 Épisode 35700/40000 - Récompense moyenne: -24.78 Épisode 35800/40000 - Récompense moyenne: -24.43 Épisode 35900/40000 - Récompense moyenne: -22.20 Épisode 36000/40000 - Récompense moyenne: -25.78 Épisode 36100/40000 - Récompense moyenne: -25.01 Épisode 36200/40000 - Récompense moyenne: -21.14 Épisode 36300/40000 - Récompense moyenne: -25.21 Épisode 36400/40000 - Récompense moyenne: -20.34 Épisode 36500/40000 - Récompense moyenne: -19.96 Épisode 36600/40000 - Récompense moyenne: -19.42 Épisode 36700/40000 - Récompense moyenne: -20.94 Épisode 36800/40000 - Récompense moyenne: -18.37 Épisode 36900/40000 - Récompense moyenne: -20.01 Épisode 37000/40000 - Récompense moyenne: -17.52 Épisode 37100/40000 - Récompense moyenne: -18.66 Épisode 37200/40000 - Récompense moyenne: -20.91 Épisode 37300/40000 - Récompense moyenne: -13.93 Épisode 37400/40000 - Récompense moyenne: -22.30 Épisode 37500/40000 - Récompense moyenne: -16.47 Épisode 37600/40000 - Récompense moyenne: -19.16 Épisode 37700/40000 - Récompense moyenne: -17.49 Épisode 37800/40000 - Récompense moyenne: -19.84 Épisode 37900/40000 - Récompense moyenne: -12.92 Épisode 38000/40000 - Récompense moyenne: -13.51 Épisode 38100/40000 - Récompense moyenne: -18.35 Épisode 38200/40000 - Récompense moyenne: -15.23 Épisode 38300/40000 - Récompense moyenne: -17.51 Épisode 38400/40000 - Récompense moyenne: -16.57 Épisode 38500/40000 - Récompense moyenne: -17.44 Épisode 38600/40000 - Récompense moyenne: -14.30 Épisode 38700/40000 - Récompense moyenne: -15.82 Épisode 38800/40000 - Récompense moyenne: -16.72 Épisode 38900/40000 - Récompense moyenne: -16.30 Épisode 39000/40000 - Récompense moyenne: -19.76 Épisode 39100/40000 - Récompense moyenne: -17.97 Épisode 39200/40000 - Récompense moyenne: -16.05 Épisode 39300/40000 - Récompense moyenne: -17.23 Épisode 39400/40000 - Récompense moyenne: -17.24 Épisode 39500/40000 - Récompense moyenne: -15.07 Épisode 39600/40000 - Récompense moyenne: -12.51 Épisode 39700/40000 - Récompense moyenne: -17.33 Épisode 39800/40000 - Récompense moyenne: -17.18 Épisode 39900/40000 - Récompense moyenne: -14.58 Épisode 40000/40000 - Récompense moyenne: -10.83
Exercice 4 : Évaluation de l’agent après entraînement¶
- Objectif : Évaluer les performances de l'agent après l'entraînement.
In [6]:
# Affichage du graphique des performances
plt.figure(figsize=(20,8))
plt.plot(range(num_episodes), episode_rewards)
plt.xlabel("Épisodes")
plt.ylabel("Récompenses cumulées")
plt.title("Évolution des récompenses avec PPO")
plt.show()
# Évaluation finale
num_eval_episodes = 20
total_rewards = []
max_steps_per_episode = 100 # Limite de pas par épisode
for ep in range(num_eval_episodes):
state, _ = env.reset()
done = False
episode_reward = 0
steps = 0
while not done and steps < max_steps_per_episode:
action = np.argmax(policy_table[state]) # Action selon la politique
next_state, reward, done, _, _ = env.step(action)
episode_reward += reward
state = next_state
steps += 1
total_rewards.append(episode_reward)
print(f"Évaluation Épisode {ep + 1}/{num_eval_episodes} - Récompense: {episode_reward}")
# Affichage des performances
print(f"\nRécompense moyenne après entraînement: {np.mean(total_rewards)}")
Évaluation Épisode 1/20 - Récompense: 6 Évaluation Épisode 2/20 - Récompense: 6 Évaluation Épisode 3/20 - Récompense: 5 Évaluation Épisode 4/20 - Récompense: 8 Évaluation Épisode 5/20 - Récompense: 9 Évaluation Épisode 6/20 - Récompense: 11 Évaluation Épisode 7/20 - Récompense: 11 Évaluation Épisode 8/20 - Récompense: 4 Évaluation Épisode 9/20 - Récompense: 11 Évaluation Épisode 10/20 - Récompense: 15 Évaluation Épisode 11/20 - Récompense: 10 Évaluation Épisode 12/20 - Récompense: 6 Évaluation Épisode 13/20 - Récompense: 8 Évaluation Épisode 14/20 - Récompense: 15 Évaluation Épisode 15/20 - Récompense: 6 Évaluation Épisode 16/20 - Récompense: 7 Évaluation Épisode 17/20 - Récompense: 8 Évaluation Épisode 18/20 - Récompense: 12 Évaluation Épisode 19/20 - Récompense: 6 Évaluation Épisode 20/20 - Récompense: 10 Récompense moyenne après entraînement: 8.7
Conclusion¶
Après 40 000 épisodes d'entraînement, l'agent a montré une amélioration progressive de ses performances, avec une récompense moyenne passant de -758,26 au début à -10,83 à la fin. Lors de l'évaluation finale sur 20 épisodes, l'agent a obtenu une récompense moyenne de 8,7, ce qui indique que l'agent a appris à mieux naviguer dans l'environnement au fur et à mesure des épisodes. Ces résultats montrent une amélioration constante des performances, bien que les récompenses restent relativement faibles, suggérant que l'agent pourrait encore bénéficier de certains ajustements dans l'algorithme ou les hyperparamètres.