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 0 0
Tài liệu đã được kiểm tra trùng lặp
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

Đ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

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

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC ĐẠI NAM

BÀI TẬP LỚNTÊN HỌC PHẦN: HỌC MÁY

ĐỀ TÀI: XÂY DỰNG CHƯƠNG TRÌNH CHƠI CỜ VUA VỚITHUẬT TOÁN MINIMAX VÀ ALPHA-BETA

Giáo viên hướng dẫn: Tạ Đăng ChíSinh viên thực hiện:

Hà Nội, năm 2023

Trang 2

BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC ĐẠI NAM

BÀI TẬP LỚNTÊN HỌC PHẦN: HỌC MÁY

THUẬT TOÁN MINIMAX VÀ ALPHA-BETA

STTMã SinhViênHọ và TênNgày Sinh

BằngChữ

Trang 3

LỜI NÓI ĐẦU

Để hoàn thành bài tập lớn môn “Học Máy” với đề tài: “Xây dựng chương chìnhchơi cờ vua với thuật toán Minimax và Alpha - Beta” Ngoài sự cố gắng của nhóm,

chúng em xin chân thành cảm ơn thầy/cô giáo “khoa CNTT trường Đại học Đại Nam” đã đóng góp ý kiến để chúng em hoàn thành tiểu luận này!

Đặc biệt em xin bày tỏ lòng biết ơn đến Thầy Tạ Đăng Chí, là người trực tiếphướng dẫn khóa học trong suốt quá trình chúng em thực hiện đề tài.

Mặc dù cố gắng song không tránh khỏi những thiếu sót, chúng em rất mong nhậnđược ý kiến đóng góp để luận văn của em được hoàn thiện hơn!

Em xin chân thành cảm ơn!

Trang 4

MỤC LỤC

Trang 5

CHƯƠNG 1 TỔNG QUAN 8

1 Mục đích chọn đề tài 8

1.1 Mục Tiêu của đề tài 8

1.2 Giới hạn của đề tài 8

CHƯƠNG 2 K-NEAREST NEIGHBORS 9

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

2.1 Khái niệm 9

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

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

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

2.5 Ví dụ minh họa 12

2.6 Ví dụ về KNN nhiễu 13

CHƯƠNG 3 XÂY DỰNG MÔ HÌNH 14

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

Trang 9

Thứ nhất, thuật toán Minimax, với tư duy "tối ưu cho bản thân, tối thiểu hóa cho đốithủ," là một giải pháp tự nhiên cho việc mô phỏng chiến thuật trong cờ vua Điều nàymang lại cho chương trình khả năng đưa ra những nước đi chiến lược, phản ánh khả năngchiến thắng và phòng thủ, tạo nên một đối thủ máy mạnh mẽ và thách thức cho ngườichơi.

Thứ hai, việc tích hợp Alpha-Beta Pruning là một bước tiến quan trọng trong việccải thiện hiệu suất tính toán 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ị.

Cuối cùng, việc xây dựng chương trình cờ vua với thuật toán Minimax và Beta không chỉ là việc đơn thuần làm giàu nội dung giải trí mà còn là một cơ hội để hiểusâu hơn về cách máy tính có thể "nghĩ" và ra quyết định trong môi trường chiến thuật.Điều này không chỉ mang lại trải nghiệm thú vị cho người chơi mà còn khám phá sứcmạnh và tính linh hoạt của trí tuệ nhân tạo trong thế giới của trò chơi trí tuệ.

Trang 10

Alpha-91.2 Mục Tiêu của đề tài

Trong quá trình xây dựng chương trình chơi cờ vua với thuật toánMinimax và Alpha-Beta, có một số mục tiêu chính mà bạn có thể đềcập trong đề tài của mình Dưới đây là một số mục tiêu quan trọng màbạn nên xem xét:

Hiểu Rõ Thuật Toán:

Trình bày sự hiểu biết sâu sắc về thuật toán Minimax vàAlpha-Beta Pruning.

Mô tả cách thuật toán hoạt động và tại sao chúng là lựachọn lý tưởng cho việc xây dựng chương trình chơi cờ vua.Hiệu Suất Tối Ưu:

Nghiên cứu và áp dụng Minimax và Alpha-Beta để tối ưuhóa hiệu suất tính toán.

Đo lường và so sánh hiệu suất giữa việc sử dụng và khôngsử dụng Alpha-Beta Pruning.

Chất Lượng Chiến Thuật:

Phát triển chương trình có khả năng tạo ra nước đi chiếnlược và đáp ứng linh hoạt với nhiều tình huống trên bàn cờ.

Đánh giá chất lượng của chiến thuật được áp dụng trong tròchơi và khả năng thách thức mức độ chơi của người dùng.Giao Diện Người Dùng:

Tích hợp giao diện người dùng thân thiện và dễ sử dụng.Cung cấp các tùy chọn và tính năng tương tác để người chơicó trải nghiệm thoải mái và thú vị.

Khả Năng Tương Tác Người Dùng:

Tích hợp khả năng tương tác với người chơi, bao gồm việcđiều chỉnh độ khó, chia sẻ kết quả và phản hồi về các nướcđi của máy.

Kiểm Thử và Đánh Giá:

Trang 11

Phát triển Tương Lai:

Đề cập đến khả năng mở rộng và phát triển tương lai củachương trình, bao gồm việc tích hợp các tính năng mới vàcải thiện thuật toán.

Bằng cách nắm vững những mục tiêu này, bạn có thể đảm bảorằng đề tài của mình không chỉ chú trọng vào việc triển khai thuật toánmà còn tập trung vào trải nghiệm chơi và sự hài lòng của người dùng.1.3 Giới hạn của đề tài

Mặc dù đề tài "Xây dựng chương trình chơi cờ vua với thuật toán Minimax và Beta" rộng lớn và hứa hẹn nhiều tiềm năng, nhưng cũng cần xác định rõ giới hạn của nó để giữ cho dự án có sự tập trung và khả thi Dưới đây là một số giới hạn mà bạn có thể xem xét:

Sâu của Cây Trò Chơi:

Xác định một mức độ sâu cụ thể cho cây trò chơi để giới hạn thời gian tính toán và tối ưu hóa hiệu suất.

Không thực hiện việc mở rộng cây trò chơi đến mức không thực tế.Chiến Thuật và Đánh Giá:

Tập trung vào một số chiến thuật cụ thể để giảm phức tạp trong việc xây dựng và đánh giá chất lượng.

Không mở rộng để bao gồm mọi chiến thuật có thể có trong cờ vua.Giao Diện Người Dùng:

Xác định một số tính năng cơ bản và giao diện để tập trung phát triển.

Trang 12

Không mở rộng để bao gồm tất cả các tính năng phức tạp của các ứng dụngchơi cờ vua trực tuyến.

Thời Gian Thực Hiện:

Đặt một khung thời gian cụ thể để hoàn thành dự án để đảm bảo tính khả thi của nó.

Không mở rộng thời gian thực hiện để tránh rơi vào nguy cơ mất kiểm soát.Kiểm Thử:

Xác định phạm vi của bài kiểm thử để đảm bảo tính ổn định và hiệu suất cơbản.

Không mở rộng để bao gồm mọi trường hợp kiểm thử có thể có.

Xác định những giới hạn này sẽ giúp bạn tập trung vào những khía cạnh quan trọng nhất của dự án và đảm bảo rằng bạn có thể đạt được mục tiêu một cách hiệu quả trong phạm vi đã đề ra.

Trang 13

CHƯƠNG 2 K-NEAREST NEIGHBORS

2 Giới thiệu về thuật toán KNN2.1 Khái niệm

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ựatrê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

Trang 14

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ó thể được áp dụng vào nhiều loại bài toán phân loại và dự đoán, từ nhận dạng chữ viết tay đến hệ thống khuyến nghị Điểm mạnh của KNN là dễ dàng hiểu và triển khai, đồng thời có khả năng xử lý các tập dữ liệu lớn 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 đếnhiệu suất với các tập dữ liệu lớn.

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

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 Việc tìm khoảng cách giữa 2 điểm cũng có nhiều công thức có thể sử dụng, tùy trường hợp mà chúng ta lựa chọn cho phù hợp Đây là 3 cách cơ bản để tính khoảng cách 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.

√ ∑

(xi− yi)2

Công thức Euclidean

Khoảng cách Manhattan

Trang 15

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.

¿ i− yi∨¿¿

Công thức Manhattan

Trang 16

(|x yi− i|)q)1

Công thức Minkowski2.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.

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

b Nhược điểm

● 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

Trang 17

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

H nh 1 Ảnh ví dụ

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 Qua thời gian tìm hiểu mình đã thu thập được một số dữ liệu và đã biểu hiện dưới dạng hình vẽ trên.

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) Từ

Trang 18

Do xuất hiện trường hợp có điểm bằng nhau, vì vậy người ta thường chọn k là số lẻ Đó cũng là ý tưởng của KNN.

2.6 Ví dụ về KNN nhiễu

H nh 2 KNN nhiễu

Hình trên là bài toán phân lớp với ba lớp: đỏ, lam, lục Mỗi điểm dữ liệu mới sẽ được gán nhãn theo màu của điểm đó mà nó thuộc về 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ềudữ 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.

Trang 19

CHƯƠNG 3 XÂY DỰNG MÔ HÌNH

3 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:

Giai đoạn học (Huấn luyện)

Giai đoạn phânloại

Tính khoảngcách d(x, x )i

Tìm k mẫu cód(x,xi) nhỏ

nhấtXác định nhãn

phân loại f’(x)

Trang 20

193.1 Code chương trình

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ộtdef RUN():

Đọc ảnh digits.png để huấn luyện

255 (trắng)

imgNhanDang = cv2.imread('image_20.png',0) Cắt ảnh ra từng ô nhỏ theo ảnh

theo chiều ngang và np.vsplit(img, 50) cắt theo chiều dọc dùng thưviện numpy

Trang 21

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ị đúngthì sẽ tiến hành nhận dạng Khai báo biến knn truyền dữ liệu train và tham số kknn = cv2.ml.KNearest_create()

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ạnglà 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ử

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)))

Trang 22

) ) # đọ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

) ) x = np.array(cells) ) ) x2 = np.array(imgNhanDang)

) ) # 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

) ) k = np.arange(10)

) ) 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():) ) box.delete(1.0,END)) ) global image1, draw;) ) cv.delete("all")

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

def SAVE():

) ) filename = "image.png") ) image1.save(filename)) ) image = Image.open('image.png')) ) new_image = image.resize((20, 20))) ) new_image.save('image_20.png')

Trang 23

) ) x1, y1 = (event.x - 3), (event.y - 3)) ) x2, y2 = (event.x + 3 ), (event.y + 3)

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

root = Tk()

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(x=100, y= 240)

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

cv.bind("<B1-Motion>", paint)

save_button=Button(button_frame,text="save",font=(("Times New Romen"),15,'bold'),command=SAVE)

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

run_button.place(x=545, y= 325)

clear_button=Button(button_frame,text="clear",font=(("Times New Romen"),15,'bold'),command=CLEAR)

clear_button.place(x=680, y= 325)root.mainloop()

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

Tài liệu cùng người dùng

Tài liệu liên quan