Facebook
From Putrid Parakeet, 1 Year ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 99
  1. import gym
  2. import numpy as np
  3.  
  4. # Khởi tạo môi trường CartPole
  5. env = gym.make('CartPole-v1')
  6.  
  7. # Khởi tạo bảng Q với giá trị ban đầu là 0
  8. Q = np.zeros([env.observation_space.shape[0], env.action_space.n])
  9.  
  10. # Thiết lập các siêu tham số
  11. alpha = 0.1  # Tốc độ học
  12. gamma = 0.99  # Hệ số giảm dần
  13. epsilon = 1.0  # Xác suất ngẫu nhiên ban đầu
  14. epsilon_min = 0.01  # Xác suất ngẫu nhiên tối thiểu
  15. epsilon_decay = 0.99  # Hệ số giảm dần xác suất ngẫu nhiên
  16.  
  17. # Thiết lập số vòng lặp tối đa và điều kiện dừng
  18. num_episodes = 1000
  19. max_steps_per_episode = 500
  20.  
  21. # Vòng lặp huấn luyện
  22. for i_episode in range(num_episodes):
  23.     # Khởi tạo trạng thái ban đầu
  24.     state = env.reset()
  25.     total_reward = 0
  26.     for t in range(max_steps_per_episode):
  27.         # Chọn hành động tại trạng thái hiện tại s
  28.         if np.random.rand() < epsilon:
  29.             action = env.action_space.sample()  # Chọn hành động ngẫu nhiên với xác suất epsilon
  30.         else:
  31.             action = np.argmax(Q[state, :])  # Chọn hành động tốt nhất tại trạng thái hiện tại s
  32.  
  33.         # Thực hiện hành động a tại trạng thái s, nhận được phần thưởng R và chuyển sang trạng thái mới s'
  34.         next_state, reward, done, info = env.step(action)
  35.  
  36.         # Cập nhật giá trị Q(s,a) tại trạng thái hiện tại và hành động vừa thực hiện
  37.         Q[state, action] = Q[state, action] + alpha * (reward + gamma * np.max(Q[next_state, :]) - Q[state, action])
  38.  
  39.         # Cập nhật trạng thái hiện tại
  40.         state = next_state
  41.         total_reward += reward
  42.  
  43.         if done:
  44.             break
  45.  
  46.     # Giảm dần xác suất ngẫu nhiên để dần trở thành hành động tốt nhất
  47.     epsilon = max(epsilon_min, epsilon * epsilon_decay)
  48.  
  49.     # In kết quả sau mỗi vòng lặp
  50.     print("Episode {}: Total reward = {}, Epsilon = {:.2f}".format(i_episode, total_reward, epsilon))
  51.