Xây dựng chương trình chơi cờ vua bằng thuật toán Minimax và Alpha Beta

MỤC LỤC

K-NEAREST NEIGHBORS

Thuật toán K láng giềng gần nhất là một kĩ thuật học có giám sát (supervised learning) dùng để phân loại quan sát mới bằng cách tìm điểm tương đồng giữa quan sát mới này với dữ liệu sẵn có. Xác định K láng giềng gần nhất: Để dự đoán nhãn của một điểm dữ liệu mới, KNN tìm K điểm dữ liệu trong tập dữ liệu huấn luyện gần nhất với điểm đó dựa trên khoảng cách. Xác định nhãn dự đoán: Sau khi xác định được K láng giềng gần nhất, KNN sẽ sử dụng đa số phiếu bầu (voting) để xác định nhãn dự đoán cho điểm dữ liệu mới.

Đánh giá và dự đoán: Sau khi xác định nhãn dự đoán cho điểm dữ liệu mới, KNN có thể đánh giá độ chính xác của mô hình bằng cách so sánh nhãn dự đoán với nhãn thực tế của điểm dữ liệu. Tuy nhiên, KNN cũng có nhược điểm là đòi hỏi tính toán khoảng cách giữa các điểm dữ liệu, có thể ảnh hưởng đến hiệu suất với các tập dữ liệu lớn. Thuật toán KNN cho rằng những dữ liệu tương tự nhau sẽ tồn tại gần nhau trong một không gian, từ đó công việc của chúng ta là sẽ tìm k điểm gần với dữ liệu cần kiểm tra nhất.

Chỉ số khoảng cách Manhattan thường được sử dụng khi chúng ta quan tâm đến tổng quãng đường di chuyển của vật thể thay vì dịch chuyển. ● Thích ứng dễ dàng - Theo hoạt động của thuật toán KNN, nó lưu trữ tất cả dữ liệu trong bộ nhớ lưu trữ và do đó bất cứ khi nào một ví dụ hoặc điểm dữ liệu mới được thêm vào thì thuật toán sẽ tự điều chỉnh theo ví dụ mới đó và cũng có đóng góp cho các dự đoán trong tương lai. ● Vài siêu tham số - Các tham số duy nhất được yêu cầu trong việc đào tạo thuật toán KNN là giá trị của k và lựa chọn số liệu khoảng cách mà chúng tôi muốn chọn từ số liệu đánh giá của mình.

● Lời nguyền của tính chiều hướng - Có một thuật ngữ được gọi là hiện tượng đạt đỉnh, theo thuật toán KNN bị ảnh hưởng bởi lời nguyền của tính chiều hướng, ngụ ý thuật toán phải đối mặt với một thời gian khó khăn để phân loại các điểm dữ liệu đúng cách khi tính chiều quá cao. Giả sử bài toán được đặt ra: mình mới quen một người bạn, tuy nhiên mình là fan của UsUk vậy nên mình cần biết người bạn này có phải là fan của KPop hay không. Ta dễ dàng nhìn thấy có hai loại: hình vuông màu xanh biểu diễn cho những người là fan của Kpop, tam giác màu đỏ biểu diễn cho những người không là fan của K- pop, hình tròn màu xanh là người bạn mình muốn biết có phải là fan Kpop hay không, khoảng cách giữa chấm tròn và các điểm còn lại biểu diễn độ thân thiết của bạn đó với những người bạn.

Phương pháp đơn giản nhất để kiểm tra xem bạn đó chơi thân với người bạn nào nhất, tức là tìm xem điểm gần chấm xanh thuộc class nào (hình vuông hay tam giác). Có một vấn đề trong phương pháp trên, xung quanh cấm xanh xuất hiện rất nhiều hình vuông màu xanh nên việc xét điểm gần nhất là chưa khả thi. Giả sử, ta lấy K=3, dựa theo hình trên ta dễ dàng nhận ra có hai hình tam giác đỏ và một hình vuông xanh có khoảng cách gần chấm xanh nhất, do đó chấm xanh được phân vào lớp tam giác đỏ.

Trường hợp lấy K=4, ta nhận thấy sẽ có hai hình vuông xanh và hai hình tam giác đỏ, đây là trường hợp có điểm bằng nhau, với trường hợp này KNN sẽ xử lý bằng cách so sánh tổng khoảng cách của các hình gần nhất với điểm ta đang xét. Trong hình này, chú ý vùng khoanh tròn màu vàng, ta nhận thấy rằng điểm màu lục nằm giữa hai vùng lớn với nhiều dữ liệu đỏ và lam, điểm này rất có thể là nhiễu dẫn đến việc dữ liệu tst nếu rơi vào vùng này sẽ có nhiều khả năng cho kết quả sai lệch.

Hình trên ta dễ dàng nhận thấy điểm gần chấm xanh nhất là hình tam giác màu đỏ, do đó  nó sẽ được phân vào lớp tam giác màu đỏ.
Hình trên ta dễ dàng nhận thấy điểm gần chấm xanh nhất là hình tam giác màu đỏ, do đó nó sẽ được phân vào lớp tam giác màu đỏ.

XÂY DỰNG MÔ HÌNH

    Kích thước ảnh 2000 theo chiều rộng và 1000 theo chiều cao vậy kích thước nhỏ của mỗi ảnh là 20x20 bằng cái ảnh mình sẽ đưa vào để nhận dạng. Sau khi cắt xong thì sẽ chuyển biến cells thành ma trận 2 chiều trong biến x và chuyển imgNhanDang thành ma trận hai chiều x2. Lặp lại mỗi giá trị tương ứng 250 lần, kí tự đầu ở biến train và chuyển thành ma trận 1 chiều.

    Sau khi có dữ liệu train và test nhận dạng qua giá trị train_label để biết giá trị đúng thì sẽ tiến hành nhận dạng. Khai báo biến knn truyền dữ liệu train và tham số k knn = cv2.ml.KNearest_create(). Khai báo 4 biến kq findNearest để tìm kiếm hàng xóm gần nhất, dữ liệu nhận dạng là dữ liệu test, hàng xóm gần nó là 20 vì do em đã test nhiều lần và số này nó sẽ trả về giá trị gần đúng nhất với biến đưa ra mình cần nhận dạng, không quá nhiều mà cũng không quá ít phần tử.