1. Trang chủ
  2. » Luận Văn - Báo Cáo

bài tập lớn đề tài xây dựng chương trình chơi cờ vua với thuật toán minimax và alpha beta

30 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 7,3 MB

Cấu trúc

  • CHƯƠNG 1 TỔNG QUAN (0)
    • 1. Mục đích chọn đề tài (0)
      • 1.1. Mục Tiêu của đề tài (0)
      • 1.2. Giới hạn của đề tài (0)
  • CHƯƠNG 2. K-NEAREST NEIGHBORS (13)
    • 2. Giới thiệu về thuật toán KNN (13)
      • 2.1. Khái niệm (13)
      • 2.2. Ý tưởng của thuật toán KNN (14)
      • 2.3. Ưu và nhược điểm của thuật toán (16)
      • 2.4 Quy trình làm việc của thuật toán KNN (17)
      • 2.5. Ví dụ minh họa (17)
      • 2.6. Ví dụ về KNN nhiễu (18)
  • CHƯƠNG 3 XÂY DỰNG MÔ HÌNH (19)
    • 3. Các bước mô tả thuật toán của chương trình (19)
      • 3.1. Code chương trình (20)
        • 3.1.1 Các bước của chương trình (20)
        • 3.1.2 Chương trình tổng quát (22)
      • 3.2. Thử nghiệm kết quả của chương trình (24)
        • 3.2.0. Nhận dạng số 0 (24)
        • 3.2.1. Nhận dạng số 1 (24)
        • 3.2.2. Nhận dạng số 2 (25)
        • 3.2.3. Nhận dạng số 3 (25)
        • 3.2.4. Nhận dạng số 4 (26)
        • 3.2.5. Nhận dạng số 5 (26)
        • 3.2.6. Nhận dạng số 6 (27)
        • 3.2.7. Nhận dạng số 7 (27)
        • 3.2.8. Nhận dạng số 8 (28)
        • 3.2.9 Nhận dạng số 9 (28)
  • KẾT LUẬN (29)
  • TÀI LIỆU THAM KHẢO (30)

Nội dung

Khả năng loại bỏ các nút không cần thiết từ cây trò chơigiúp giảm đáng kể thời gian xử lý, từ đó tăng cường khả năng đáp ứng và giữ cho trảinghiệm chơi cờ vua trở nên mượt mà và thú vị.C

TỔNG QUAN

K-NEAREST NEIGHBORS

Giới thiệu về thuật toán KNN

Thuật toán K láng giềng gần nhất trong tiếng Anh là K-Nearest Neighbor, viết tắt là KNN.

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ó.

Nguyên tắc hoạt động của KNN như sau:

1 Định nghĩa K và khoảng cách: K là số lượng láng giềng gần nhất mà chúng ta muốn sử dụng để dự đoán nhãn của một điểm dữ liệu mới Khoảng cách được tính dựa trên một phương pháp đo khoảng cách như khoảng cách Euclid hoặc khoảng cách Manhattan.

2 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 Khoảng cách này có thể được tính bằng cách so sánh các đặc

3 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 Các láng giềng gần nhất đóng vai trò như các phiếu bầu và nhãn của láng giềng xuất hiện nhiều nhất sẽ được chọn là nhãn dự đoán.

4 Đá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.

KNN được áp dụng linh hoạt vào các bài toán phân loại, dự đoán, từ nhận dạng chữ viết tay đến hệ thống đề xuất Ưu điểm của KNN là dễ hiểu, dễ triển khai, khả năng xử lý tập dữ liệu lớn Tuy nhiên, nhược điểm của KNN là cần tính toán khoảng cách giữa các điểm dữ liệu, làm ảnh hưởng đến hiệu suất của thuật toán khi dữ liệu lớn.

2.2 Ý tưởng của thuật toán KNN

Thuật toán KNN dựa trên giả định rằng những điểm dữ liệu tương tự nhau sẽ nằm gần nhau trong một không gian Do đó, để xác định nhãn cho một điểm dữ liệu mới, thuật toán sẽ tìm k điểm gần nhất với điểm đó và gán nhãn của nhóm đa số trong số các điểm lân cận này cho điểm dữ liệu mới Để tìm khoảng cách giữa các điểm dữ liệu, có nhiều công thức khác nhau có thể được sử dụng tùy thuộc vào trường hợp cụ thể.

2 điểm dữ liệu x, y có k thuộc tính:

Khoảng cách Euclid Đây không là gì ngoài khoảng cách cartesian giữa hai điểm trong mặt phẳng / siêu mặt phẳng Khoảng cách Euclid cũng có thể được hình dung là chiều dài của đường thẳng nối hai điểm đang được xem xét Số liệu này giúp chúng ta tính toán sự dịch chuyển ròng được thực hiện giữa hai trạng thái của một đối tượng.

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 Số liệu này được tính bằng cách tính tổng sự khác biệt tuyệt đối giữa tọa độ của các điểm trong n chiều.

Chúng ta có thể nói rằng Euclidean, cũng như khoảng cách Manhattan, là những trường hợp đặc biệt của khoảng cách Minkowski.

2.3 Ưu và nhược điểm của thuật toán a Ưu điểm

● Dễ thực hiện vì độ phức tạp của thuật toán không cao.

● 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.

- Một số siêu tham số - Các tham số duy nhất được yêu cầu trong quá trình đào tạo thuật toán KNN là giá trị k và lựa chọn số liệu khoảng cách lấy từ hàm tính toán khoảng cách.

● Không chia tỷ lệ - Như chúng ta đã nghe về điều này rằng thuật toán KNN cũng được coi là một Thuật toán lười biếng Ý nghĩa chính của thuật ngữ này là điều này cần rất nhiều sức mạnh tính toán cũng như lưu trữ dữ liệu Điều này làm cho thuật toán này vừa tốn thời gian vừa cạn kiệt tài nguyên.

● 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.

● Dễ bị Overfitting - Vì thuật toán bị ảnh hưởng do lời nguyền của tính chiều hướng, nó cũng dễ gặp phải vấn đề overfitting Do đó, nhìn chung, lựa chọn tính năng cũng như các kỹ thuật giảm kích thước được áp dụng để giải quyết vấn đề này

2.4 Quy trình làm việc của thuật toán KNN

Bước 1: Xác định tham số K= số láng giềng gần nhất.

Bước 2: Tính khoảng cách đối tượng cần phân lớp với tất cả các đối tượng trong training data.

Bước 3: Sắp xếp khoảng cách theo thứ tự tăng dần và K láng giềng gần nhất với đối tượng cần phân lớp.

Bước 4: Lấy tất cả các lớp của K láng giềng gần nhất.

Bước 5: Dựa vào phần lớn lớp của K để xác định lớp cho đối tượng cần phân lớp. 2.5 Ví dụ minh họa

Giả sử các bạn vừa quen một người bạn mới và muốn biết liệu họ có phải là fan của Kpop hay không Để trả lời câu hỏi này, bạn cần thu thập một số dữ liệu về sở thích âm nhạc của người đó Có nhiều cách khác nhau để làm điều này, chẳng hạn như hỏi trực tiếp hoặc quan sát các hành vi của họ Sau khi thu thập dữ liệu, bạn có thể sử dụng nó để đưa ra suy luận về sở thích âm nhạc của họ.

XÂY DỰNG MÔ HÌNH

Các bước mô tả thuật toán của chương trình

- Các bước phân lớp sử dụng thuật toán KNN:

Bước 1: Xác định tham số K là số láng giềng gần nhất.

Bước 2: Tính khoảng cách đối tượng và phân lớp tất cả các đối tượng trong training data.

Bước 3: Xắp xếp khoảng cách theo thứ tự tăng dần và xác định K láng giềng gần nhất với đối tượng cần phân lớp.

Bước 4: Lấy tất cả các lớp của K láng giềng gần nhất.

Bước 5: Dựa vào phần lớn lớp của K để xác định lớp cho đối tượng cần phân lớp.

- Các bước mô tả thuật toán của chương trình:

Tìm k mẫu có d(x,xi) nhỏ nhất Xác định nhãn phân loại f’(x)

3.1.1 Các bước của chương trình

H nh 3 Ảnh Digits Đây là file ảnh chứa 5000 kiểu chữ số có 50 hàng và 100 cột def RUN(): Đọc ảnh digits.png để huấn luyện img = cv2.imread('digits.png',0) // 0 cắt ảnh ra mức xám dao động từ 0 (đen) đến

255 (trắng) imgNhanDang = cv2.imread('image_20.png',0)

Cắt ảnh ra từng ô nhỏ theo ảnh cells = [np.hsplit(row, 100) for row in np.vsplit(img, 50)] // np.hsplit(row, 100) cắt theo chiều ngang và np.vsplit(img, 50) cắt theo chiều dọc dùng thư viện numpy

Kích thước ảnh 2000 x 1000 có chiều rộng là 2000 pixel và chiều cao là 1000 pixel Khi thu nhỏ ảnh, kích thước nhỏ nhất có thể đạt được là 20 x 20 pixel, tương ứng với kích thước ảnh cần 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 x = np.array(cells) x2 = np.array(imgNhanDang)

Chuyển dữ liệu x và x2 từ ma trận hai chiều thành ma trận 1 chiều bằng biến reshape (-1, 400) được hiểu là mỗi cái ảnh của mình có kích thước 20x20 = 400- pixel vậy 400 kí tự sẽ nằm trên cùng 1 hàng x[:,:50] lấy 50 cột đầu tiên của mảng x train = x[:,:50].reshape(-1, 400).astype(np.float32) test = x2.reshape(-1, 400).astype(np.float32)

10 giá trị từ 0 đến 9 gán vào biến k 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 k = np.arange(10) train_labels = np.repeat(k, 250)[:, np.newaxis]

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() knn.train(train, 0, train_labels) // truyền dữ liệu train và tham số 0, train_labels là dữ liệu đúng là số mấy

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ử kq1, kq2, kq3, kq4 = knn.findNearest(test, 20) // kq1 là giá trị train_labels, kq2 là giá trị cần tìm trả về là số mấy, kq3 là số các phần từ mà bằng các giá trị mà mình xét, kq4 là khoảng cách mà điểm mình xét tới 20 phần tử box.insert(END,"Kết quả là: {}".format(int(kq2)))

3.1.2 Chương trình tổng quát import PIL from PIL import ImageTk, Image, ImageDraw from tkinter import * from PIL import Image,ImageTk import numpy as np import cv2 width = 200 height = 200 white = (255, 255, 255) black = (0, 0, 0) def RUN():

) ) # đọc ảnh train và nhan dạng

) ) img = cv2.imread('digits.png',0)

) ) imgNhanDang = cv2.imread('image_20.png',0) ) ) # cắt cảnh thàng từng ô nhỏ

) ) cells = [np.hsplit(row, 100) for row in np.vsplit(img, 50)] ) ) # chuyển thành ma trận 2 chiều

) ) # tạo du liệu train và du liệu test(nhandang)

) ) train = x[:,:50].reshape(-1, 400).astype(np.float32) ) ) test = x2.reshape(-1, 400).astype(np.float32) ) ) # dán nhãn cho du liệu test

) ) train_labels = np.repeat(k, 250)[:, np.newaxis] ) ) # Nhận dạng

) ) knn = cv2.ml.KNearest_create()

) ) knn.train(train, 0, train_labels)

) ) kq1, kq2, kq3, kq4 = knn.findNearest(test, 21) ) ) box.insert(END,"Kết quả là: {}".format(int(kq2))) ) ) def CLEAR():

) ) image1 = PIL.Image.new("RGB", (width, height), black) ) ) draw = ImageDraw.Draw(image1) def SAVE():

) ) image = Image.open('image.png')

) ) new_image.save('image_20.png')

) ) cv.create_line(x1, y1, x2, y2, fill="white",width)

) ) draw.line([x1, y1, x2, y2],fill="white",width)

) ) root = Tk() root.geometry("1280x721+90+30") background=Image.open("Giaodiennhom5.png") render=ImageTk.PhotoImage(background) img3=Label(root, image=render) img3.place(x=0, y=0) cv = Canvas(root, width=width, height=height, bg='black') cv.place(x0, y= 240) image1 = PIL.Image.new("RGB", (width, height), black) draw = ImageDraw.Draw(image1) cv.bind("", paint) button_frame=Frame(root).pack(side=BOTTOM) save_button=Button(button_frame,text="save",font=(("Times New Romen"),15,'bold'),command=SAVE)

# button2=Button(text="Clear",command=Clear) save_button.place(x0, y= 445)

# button2.pack(side = RIGHT) box=Text(root, width%, height=1, font=("Times New Romen",13)) box.pack(pady00) button_frame=Frame(root).pack(side=BOTTOM) run_button=Button(button_frame,text="run",font=(("Times New Romen"),15,'bold'),command=RUN) run_button.place(xT5, y= 325) button_frame=Frame(root).pack(side=BOTTOM) clear_button=Button(button_frame,text="clear",font=(("Times New Romen"),15,'bold'),command=CLEAR) clear_button.place(xh0, y= 325) root.mainloop()

3.2 Thử nghiệm kết quả của chương trình

- Kết quả thử nghiệm của nhận dạng số 0

H nh 5 Kết quả thử nghiệm nhận dạng số 0

- Kết quả thử nghiệm nhận dạng số 1

- Kết quả nhận dạng số 2

H nh 7 Kết quả thử nghiệm nhận dạng số 2

- Kết quả nhận dạng số 3

H nh 8 Kết quả thử nghiệm nhận dạng số 3

- Kết quả nhận dạng số 4

H nh 9 Kết quả thử nghiệm nhận dạng số 4

- Kết quả nhận dạng số 5

H nh 10 Kết quả thử nghiệm nhận dạng số 5

- Kết quả nhận dạng số 6

H nh 11 Kết quả thử nghiệm nhận dạng số 6

- Kết quả nhận dạng số 7

H nh 12 Kết quả thử nghiệm nhận dạng số 7

- Kết quả nhận dạng số 8

H nh 13 Kết quả thử nghiệm nhận dạng số 8

- Kết quả nhận dạng số 9

H nh 14 Kết quả thử nghiệm nhận dạng số 9

Ngày đăng: 07/05/2024, 18:24

HÌNH ẢNH LIÊN QUAN

BẢNG CÁC TỪ VIẾT TẮT - bài tập lớn đề tài xây dựng chương trình chơi cờ vua với thuật toán minimax và alpha beta
BẢNG CÁC TỪ VIẾT TẮT (Trang 8)
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 đỏ. - bài tập lớn đề tài xây dựng chương trình chơi cờ vua với thuật toán minimax và alpha beta
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 đỏ (Trang 18)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w