Q-learning là một thuật toán RL rất nổi tiếng, giúp agent học bảng Q – tức giá trị “tốt xấu” của việc chọn một hành động nhất định tại một trạng thái (ô trên lưới).
Trong bài này, chúng ta sẽ:
- Hiểu trực giác: Q-learning đang học cái gì trong Gridworld.
- Xem dạng công thức cập nhật Q-value.
- Demo trực quan: agent tự train trên lưới 2D, sau đó chạy theo policy đã học.
Trực giác về Q-learning trong Gridworld
Ta có một lưới vuông, mỗi ô là một trạng thái (state). Agent:
- Trạng thái (state): vị trí (hàng, cột) trên lưới.
- Hành động (action): đi lên, xuống, trái, phải.
- Reward:
- -1 mỗi bước di chuyển (khuyến khích đi đường ngắn).
- +10 khi đến ô đích (goal).
- Ô tường (wall) không đi qua được.
Q-learning sẽ học một bảng Q[s][a] (cho mỗi state s và action a) để xấp xỉ:
Q(s, a) ≈ giá trị kỳ vọng của tổng reward khi chọn action a tại state s và làm tốt nhất về sau.
Sau khi học xong, ta có thể dùng policy tham lam (greedy): ở mỗi ô, luôn chọn action có Q-value lớn nhất → ra được đường đi “tốt nhất” mà agent đã khám phá.
Cập nhật Q-learning (bản đơn giản)
Trong mỗi bước, agent:
- Ở trạng thái
s, chọn hành độnga(thường dùng ε-greedy: đôi khi random để khám phá). - Nhận reward
r, chuyển sang trạng thái mớis'. - Cập nhật Q-value theo công thức:
Q(s, a) ← (1 - α) * Q(s, a)
+ α * (r + γ * max<sub>a'</sub> Q(s', a'))
- α (alpha) – learning rate: tốc độ học.
- γ (gamma) – discount factor: mức ưu tiên tương lai.
Lặp lại qua nhiều episode → Q-table dần dần hội tụ, policy trở nên tốt hơn.
Mô hình demo: Q-learning trên lưới 8×8
Trong demo dưới đây, ta có:
- Lưới 8×8 (Gridworld).
- Có thể:
- Click chọn ô Start, Goal, và thêm tường (Wall).
- Nhấn “Train 1 episode” hoặc “Train 50 episodes”.
- Nhấn “Chạy policy đã học” để xem agent đi như thế nào.
- Trong quá trình train, log sẽ hiện reward và độ dài episode.
Demo Q-learning trên Gridworld bằng JavaScript
Demo: Q-learning trên Gridworld 2D
Thông tin
Log
Hướng dẫn dùng demo
Dưới đây là các bước cơ bản để tương tác với demo Q-learning trên Gridworld:
- Chuẩn bị bản đồ (map)
- Bấm nút “Reset lưới” để đưa lưới về trạng thái mặc định (có sẵn Start và Goal).
- Dùng dropdown “Chế độ click”:
- Vẽ tường (Wall): click vào các ô để tạo / xóa tường (ô màu đen, agent không đi qua được).
- Chọn Start: chọn ô bắt đầu cho agent (màu xanh lá).
- Chọn Goal: chọn ô đích (màu vàng).
- Xóa ô: đưa ô về trạng thái trống (trừ Start/Goal).
- Thiết lập số episode để train
- Ở ô “Episodes/Lần train”, nhập số episode muốn chạy mỗi lần bấm Train N episodes (ví dụ: 50, 100…).
- Train Q-learning
- Train 1 episode:
- Agent xuất phát từ Start, di chuyển tối đa một số bước nhất định.
- Mỗi bước sẽ nhận reward/phạt và cập nhật Q-table.
- Kết quả episode (số bước, tổng reward) được log ở khung Log.
- Train N episodes:
- Chạy liên tiếp N episode theo giá trị đã nhập.
- Log hiển thị thống kê của episode cuối cùng (steps, total reward).
- Train 1 episode:
- Chạy policy đã học
- Bấm nút “Chạy policy đã học”.
- Agent sẽ:
- Bắt đầu từ ô Start.
- Tại mỗi ô, chọn hành động có Q-value lớn nhất.
- Di chuyển từng bước trên lưới, được vẽ bằng một chấm màu khác.
- Khi dừng, khung Log sẽ báo:
- Số bước đã đi.
- Agent có đến được Goal hay không.
- Reset và thử lại
- Bấm “Reset lưới” nếu muốn:
- Xóa toàn bộ tường.
- Đưa Start/Goal về mặc định.
- Khởi tạo lại Q-table (train lại từ đầu).
- Bấm “Reset lưới” nếu muốn:
Bình luận