Kaggle Chess
Kaggle Chess
Output là ma trận 8x8 hiển thị các trạng thái, với "S" là vị trí bắt đầu và "F" là vị trí kết thúc.
● Tác nhân là một quân cờ, có thể là Vua, Hậu, Xe, Tượng, Mã hoặc Tốt.
● Tác nhân có chính sách hành động để quyết định bước đi nào tại từng trạng thái
Trong ví dụ này, tác nhân là quân Vua.
● Đối tượng Reinforce chứa các thuật toán để giải quyết bài toán cờ bằng cách học cách
di chuyển (Move Chess).
● Tác nhân và môi trường là các thuộc tính của đối tượng Reinforce.
Tại đây, r là một đối tượng được khởi tạo với tác nhân p (quân Vua) và môi trường env.
Hàm evaluate_policy:
● Đây là hàm để đánh giá giá trị của tất cả các trạng thái trong một chính sách nhất định.
● Đoạn mã bắt đầu với việc tạo bản sao của mảng value_function trước đó bằng lệnh
self.agent.value_function_prev = self.agent.value_function.copy() nhằm đảm bảo các
cập nhật đồng bộ (synchronous updates).
● Vòng lặp for row in range(self.agent.value_function.shape[0]) và for col in
range(self.agent.value_function.shape[1]) duyệt qua tất cả các trạng thái (tức là tất cả
các ô trong lưới).
● Mỗi trạng thái (row, col) được đánh giá bằng cách sử dụng hàm self.evaluate_state, với
tham số gamma là hệ số chiết khấu.
r.evaluate_policy(gamma=1): thực hiện đánh giá chính sách với hệ số chiết khấu gamma = 1,
nghĩa là nó không chiết khấu phần thưởng trong tương lai (tất cả phần thưởng đều có giá trị
bằng nhau).
Kết quả mảng value_function sau khi đánh giá chính sách cho thấy rằng tất cả các trạng thái có
giá trị là -1, ngoại trừ trạng thái cuối cùng (ô 0 trong hình) đại diện cho trạng thái đích hoặc
trạng thái kết thúc (terminal state), có giá trị bằng 0.
● eps=0.1: Đây là ngưỡng hội tụ. Nếu thay đổi giá trị tuyệt đối lớn nhất giữa hai lần cập
nhật giá trị của value_function nhỏ hơn eps, thuật toán sẽ coi như đã hội tụ.
● k_max = 1000: Đây là số vòng lặp tối đa. Nếu thuật toán không hội tụ sau 1000 lần lặp,
nó sẽ dừng lại.
● value_delta_max = 0: Lưu trữ sự thay đổi lớn nhất giữa hai lần tính toán liên tiếp của
value_function.
● gamma = 1: Không có chiết khấu phần thưởng trong tương lai, tức là tất cả phần
thưởng đều được coi trọng như nhau.
● synchronous=True: Các thay đổi trong giá trị của tất cả các trạng thái sẽ được áp dụng
cùng lúc, không theo kiểu tuần tự.
● r.evaluate_policy(gamma=gamma,synchronous=synchronous): Gọi trong mỗi vòng lặp
để cập nhật giá trị của các trạng thái dựa trên chính sách hiện tại và hệ số gamma.
● value_delta = np.max(np.abs(r.agent.value_function_prev - r.agent.value_function)): Lấy
bằng giá trị tuyệt đối lớn nhất giữa hai mảng value_function_prev và value_function.
Lặp qua quá trình đánh giá chính sách và kiểm tra sự thay đổi giữa hai lần lặp. Nếu sự thay đổi
nhỏ hơn ngưỡng eps, nó sẽ dừng lại và báo cáo rằng thuật toán đã hội tụ. Trong trường hợp
không hội tụ sau 1000 lần lặp, quá trình sẽ dừng lại.
r.agent.value_function.astype(int) Chuyển đổi các giá trị trong hàm giá trị của agent sang kiểu
int.
● agent = Piece(piece='rook'):Kkhởi tạo một đối tượng agent là quân xe (rook) từ lớp
Piece. Quân xe trong cờ vua có thể di chuyển theo chiều ngang hoặc dọc một số ô tùy
ý, không giống như vua, chỉ có thể di chuyển 1 ô mỗi lần.
● r = Reinforce(agent, env):Tạo đối tượng r thuộc lớp Reinforce, với agent là quân xe và
env là môi trường mà agent sẽ tương tác. Quá trình này sẽ học cách agent di chuyển tối
ưu trong môi trường dựa trên việc đánh giá và cải thiện chính sách.
● r.policy_iteration(k=1, gamma=1):Chỉ chạy 1 vòng lặp của Policy Iteration. Điều này có
thể dùng để kiểm tra hành vi của agent sau một lần đánh giá và cải thiện chính sách.
gamma=1: Hệ số chiết khấu (discount factor) là 1, có nghĩa là agent sẽ xem xét phần
thưởng tương lai một cách bình đẳng với phần thưởng hiện tại, giống như trước.