Tải bản đầy đủ (.docx) (25 trang)

báo cáo môn trí tuê nhân tạo áp dụng thuật toán tìm kiếm min max và alphabeta cắt tỉa xây dựng trò chơi cờ ca rô trên ngôn ngữ java

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (788.38 KB, 25 trang )

Mục lục
Page 1 of 25
Lời mở đầu
Mục đích của chúng em về bài tập lớn này là xây dựng một chương trình với
một trí tuệ nhân tạo - thông minh, nhanh nhạy có thể đối kháng với con người
trong một trò chơi cụ thể. Ở bài tập lớn này chúng em xây dựng chương trình cờ
caro, áp dụng các giải thuật MinMax, cắt tỉa alpha-beta. Qua đó, giúp chúng em
hiểu được cách thực mà con người đưa trí tuệ và bản lĩnh của mình vào máy móc,
khiến máy móc có thể hoạt động tương đương hoặc thậm trí vượt trội hơn so với
con người!
Page 2 of 25
Phân công công việc:
Thành viên Thông tin Công việc
Nguyễn Đức Cường Nhóm trưởng
MSSV: 20101215
- Thiết kế các Form
- Các chức năng
thiết lập bàn cờ.
Mai Đức Anh 20101089 - Tìm hiểu và cài đặt
giải thuật
MiniMax,
AnphaBeta cắt tỉa
- Thiết kế class
Computer.
Lê Công Hưng 20101667 - Thiết kế các Form
- Các chức năng
thiết lập bàn cờ.
Chu Văn Định 20101378 - Thiết kế và cài đặt
Bàn cờ, class
CGoban.
- Viết báo cáo


Nguyễn Trung Đức 20096258 - Tìm hiểu và cài đặt
giải thuật
MiniMax,
AnphaBeta cắt tỉa
- Thiết kế class
Computer.
Trần Nam Sơn 20096270 - Thiết kế và cài đặt
Bàn cờ, class
CGoban.
Page 3 of 25
I. Giới thiệu về trò chơi cờ caro
Hình 1: Gomoku
Cờ caro chính là môn cờ logic lâu đời và cổ xưa nhất trên Trái Đất. Cờ caro
đã được sáng tạo từ nhiều nền văn minh khác nhau một cách độc lập. Nó bắt đầu
xuất hiện từ năm 2000 trước CN ở sông Hoàng Hà, Trung Quốc. Một số nhà khoa
học đã tìm thấy bằng chứng chứng minh Caro đã được phát minh ở Hy lạp cổ đại
và ở Châu Mỹ trước thời Colombo. Môn cờ cổ của Trung Quốc là Wutzu. Cờ Caro
du nhập từ Trung Quốc vào Nhật Bản từ khoảng năm 270 trước CN. Nó thường
được gọi là Gomoku nhưng cũng có các tên gọi khác tuỳ theo thời gian và địa
phương như Kakugo, gomoku-narabe, Itsutsu-ishi Người ta đã tìm thấy một trò
chơi cổ từ một di tích ở Nhật năm 100 sau CN và thấy nó là một biến thể của Caro.
Nó đã lan truyền nhanh chóng với cái tên Kakugo (trò 5 quân). Các nhà sử học nói
rằng vào các thế kỷ 17 và 18, mọi người đều chơi trò này-người già cũng như
người trẻ. Năm 1858, khi quyển sách đầu tiên về trò chơi này được xuất bản, nó
được gọi là Kakugo. Nó tiếp tục được chơi, được gọi với nhiều tên khác nhau như
Goren, Goseki, rồi Gomokunarabe, Gomoku và phát triển cho đến ngày nay thành
thể loại phức tạp nhất trong họ hàng đông đúc của nó, là Renju (chuỗi ngọc trai).
Page 4 of 25
Page 5 of 25
- Luật chơi của Gomoku cổ như sau:

o Bàn cờ 15 x 15, quân đen đi trước.
o Ai tạo được 5 quân liền nhau trước thì thắng
Như hình bên dưới thì O thắng:
Hình 2: Luật chơi Gomoku
Khi trình độ các kỳ thủ Gomoku được nâng cao, họ nhận ra rằng nếu chỉ
chơi đơn giản như trong Gomoku thì đó sẽ là một lợi thế quá lớn cho bên tiên tức
bên Đen (thực tế chính là ưu thế thắng). Sau đó một số nhà toán học đã chứng
minh được rằng nếu chơi với luật Gomoku trên bàn cờ bằng hoặc rộng hơn 15x15
thì Đen chắc chắn thắng (sure win), và sau đó cách đi cụ thể cũng đã được tìm ra,
hệ thống và phân loại.Và chính vì vậy, từ đó Gomoku lâm vào một giai đoạn khủng
hoảng. Khả năng đánh thắng 100 phần trăm của Đen đã làm trò chơi này mất đi ý
nghĩa của nó. Có nhiều cải tiến được đề xuất, một số đã bị bỏ qua nhanh chóng, số
khác làm xuất hiện các biến thể mới của Gomoku. Ý tưởng chung của các cải tiến
là đề ra một số hạn chế cho Đen, nhằm cân bằng ưu thế đi tiên. Dưới đây là một số
biến thể phổ biến:
- Gomoku. Hiện nay được chơi chính thức với bàn 13x13. Không có hoà.
Nếu hết đất thì Trắng thắng. Chưa tìm được chứng minh nào cho thấy Đen
chắc chắn thắng. Tuy nhiên Đen vẫn có ưu thế rất lớn.
- ProGomoku. Chơi trên bàn 15x15. Nước đầu của Đen đặt sẵn ở trung tâm.
Nước thứ ba (nước thứ hai của Đen) phải đặt ngoài hình vuông cấm. Hình
Page 6 of 25
vuông cấm là hình vuông trung tâm kích thước 5x5. Không có hạn chế cho
Trắng. Đã có chứng minh Đen chắc chắn thắng trong biến thể này.
- Pente. Biến thể này không còn giống Gomoku. Luật bổ sung là có thể ăn
quân đối phương. Nước ăn quân được thực hiện bằng cách chặn hai đầu một
nước hai quân đối phương và ăn hai quân đó. Ai tạo được nước năm hoặc ăn
được 5 cặp quân trước thì thắng. Rất phổ biến ở Mỹ. Chơi trên bàn 19x19.
II. Phân tích bài toán
1. Mục đích bài toán
Tìm hiểu về giải thuật MINMAX, cắt tỉa alpha-beta, áp dụng được các thuật

toán đó vào trò chơi cờ caro.
2. Trò chơi đối kháng
- Cờ caro là trò chơi đối kháng giữa 2 người (gọi là MAX và MIN)
- Thay phiên nhau đi giữa các nước (moves).
- Kết thúc trò chơi: Người thắng được thưởng (điểm), người thua bị phạt điểm
- Trò chơi bao gồm các thông tin sau:
o Trạng thái bắt đầu (Initial state): Trạng thái cuar trò chơi + người chơi nào được đi
nước đầu tiên.
o Hàm chuyển trạng thái (Sucessor function): Trả về thông tin gồm (nước đi, trang
thái)
 Tất cả các nước đi hợp lên từ trạng thái hiện tại
 Trạng thái mới (là trạng thái chuyển đến sau nước đi)
o Ki m tra k t thúc trò ch i (Terminal Test)ể ế ơ
o Hàm ti n ích (Utility function) đ đánh giá các tr ng thái k t thúcệ ể ạ ế
o Tr ng thái b t đ u + Các n c đi h p l = Cây bi u di n trò ch iạ ắ ầ ướ ợ ệ ể ễ ơ
2. Biểu diễn bài toán dưới dạng cây trò chơi (Game Tree)
Trò chơi có thể được biểu diễn như một cây gồm gốc, những nút, những lá và
những nhánh
Page 7 of 25
Hình 3: biểu diễn bài toán dưới dạng cây
- Gốc là trạng thái ban đầu của trò chơi.Với mỗi trò chơi cụ thể thì trạng
thái (ở mỗi thời điểm) lại được đặc trưng bởi nhưng thông số riêng
- Các nút (Node) của cây thể hiện tình trạng hiện tại của trò chơi, gồm nút
cha (Parent Node) và nút con (Children Node)
- Các nhánh nối giữa các nút thể hiện nước đi, tức là cho biết từ một tình
huống của trò chơi chuyển sang tình huống khác thông qua chỉ một nước
đi nào đó.
- Các lá (leave) hay còn gọi là nút lá (leave node), thể hiện thời điểm kết
thúc khi mà kết quả của trò chơi đã rõ ràng.
- Ngoài ra thì còn một thông số của cây nữa là độ sâu (Fly) hay còn gọi là

mức của cây, số tầng của cây.
Thường thì mỗi vị trí kết thúc của trò chơi (nút lá) sẽ gán một trọng số, chẳng
hạn gán 1 cho chiến thắng, 0 cho hòa và -1 cho thua trận.Tại mỗi nút cũng có một
trọng số tương ứng được xác định bằng một cách nào đó.Dựa vào cây trò chơi này,
người ta có thể tìm ra nước đi “tốt” để giành phần thắng cho mình (nếu có thể),
bằng cách tìm kiếm trên cây để tìm ra nước đi tốt nhất.
Dưới đây là ví dụ về cây trò chơi qua trò chơi bốc sỏi:

Giả thiết có 3 hộp bi, số lượng bi trong mỗi hộp là (1, 2, 2). Mỗi lượt chơi người
chơi chỉ được bốc trong 1 hộp bi, với số lượng tùy ý.Người chơi nào bốc bi cuối
cùng sẽ là người thua cuộc.
Dựa vào đánh giá ở cây trò chơi dưới, ta thấy được những nút lá mà có trọng số
là 1, tức là đi theo những nhánh nào đó mà cuối cùng đến được những là đấy thì
người chơi Max sẽ giành thắng lợi.
Page 8 of 25
Hình 4: Ví dụ về cây trò chơi qua trò chơi bốc sỏi
Page 9 of 25
Cây biểu diễn trò chơi cờ Caro
3. Chiến lược tìm kiếm
Như vậy với một trò chơi đối kháng, khi mà ta biểu diễn được trò chơi dưới
dạng một cây trò chơi, thì vấn đề đặt ra là phải tìm được chiến thuật đi trên cây trò
chơi đó để chiếm lợi thế.Tức là phải có chiến lược tìm kiếm tốt để đảm bảo đường
đi của mình là “tốt”
3.1 Thuật toán vét cạn liệu có được sử dụng?
Nếu như thuật toán vét cạn thực sự dùng được để tìm kiếm trên cây trò chơi
thì ta chỉ cần chọn nhánh cây dẫn tới nút chiến thắng để đi, và như vậy các trò chơi
không còn sự hấp dẫn thường có.Và thực tế là, trong các trò chơi đối kháng thì sau
Page 10 of 25
một vài lượt đi thì lại sinh ra rất nhiều khả năng đánh tiếp theo (bùng nổ tổ hợp),
chỉ có một số ít các trường hợp là có thể tìm kiếm theo kiểu vét cạn hết các khả

năng này.Do đó không dùng thuật toán vét cạn cho chiến lược tìm kiếm được.
3.2 Không gian tìm kiếm nước đi & chiến lược tìm kiếm trong cờ Caro
Như chúng ta đã biết, trong cờ caro thì cứ sau mỗi nước đi số ô trống sẽ
giảm.Vì vậy việc tìm kiếm nước đi tiếp theo là việc tìm kiếm trong không gian các
ô trống còn lại, sau mỗi lượt đi thì không gian tìm kiếm sẽ giảm dần
Chiến lược thường được cả người lẫn máy dùng là phân tích thế cờ chỉ sau
một nước đi nào đó của cả 2 bên.Tức là trên cây trò chơi, việc tìm kiếm nước đi là
chọn 1 nút trên cây sao cho nước đi đó là “tốt” .Và để đánh giá được nút đó thì
thường phải “nhìn xa”, liên quan đến độ sâu của cây (tương đương với việc người
chơi phải “nhìn xa xem bàn cờ có những khả năng biến đổi nào sau mốt sô nước,
từ đó đánh giá được độ tốt xấu của thế cờ hiện tại) Với máy tính thì thế cờ này
được đánh giá tốt hơn thế cờ kia nhờ so sánh điểm của thế cờ đó do bộ lượng giá
trả lại.Vì không gian tìm kiếm là quá lớn nên chúng ta giới hạn cho máy tính chỉ
tìm kiếm ở một đọ sâu nhất định,
Và tất nhiên độ sâu càng lớn thì chương trình càng “thông minh” nhưng trả giá
về mặt thời gian…
4. Biểu diễn các trạng thái:
- Bàn cờ được vẽ với kích thước nxn (với n từ 10 đến 18)
- Các quân cờ được đánh tại giao điểm của các đường kẻ (số đường kẽ tùy
thuộc vào kích thước bàn cờ) tức các nút.
- Mỗi nút được biểu diễn bằng một trang ba trạng thái:
o Trạng thái 0 (EMPTY): Ô cờ trống
o Trang thái 1(BLUE): Ô cờ được đánh bởi người thứ nhất
o Trạng thái 2(RED): Ô cờ được đánh bởi người thứ hai
- Class biểu diễn trạng thái của các nút
Page 11 of 25
Hình 5: Class biểu diễn trạng thái các node
- Khi kh i t o t t c các nút đ c gán tr ng thái EMPTY.ở ạ ấ ả ượ ạ
- T a đ các n t đ c bi u di n b ng (x, y). V i (x, y) là t a đ khi ng i ch i click vào ọ ộ ố ượ ể ễ ằ ớ ọ ộ ườ ơ
các n t.ố

Hình 6: Class biểu diễn tọa độ các nốt
• Các trạng thái có thể xảy ra khi đang chơi:
+ Trạng thái WIN: khi một trong 2 người chơi đánh được 5 quân liên
tiếp theo một trong các trường hợp: 5 quân nằm ngang liên tiếp, 5 quân
thẳng đứng liên tiếp, 5 quân chéo trái liên tiếp hoặc 5 quân chéo phải liên
tiếp.
+ Trạng thái FILLED: Khi tất cả các nốt trên bàn cờ đã được đánh mà
không ai dành chiến thắng. Khi đó sẽ có cửa sổ thông báo hòa.
+ Trạng thái ILLEGAL: Phạm qui, không được đánh. Người chơi phạm
qui khi đánh vào nước mà người chơi hoặc máy đã đánh trước đó hoặc
đánh ra ngoài.
Page 12 of 25
+ Trạng thái OK: Khi 3 trạng thái trên không xảy ra thì người chơi có thể
được đánh tiếp!
Page 13 of 25
IV. Thuật toán sử dụng
1. Thuật toán MINIMAX.
- Các chiến lược tối ưu:
o M t chi n l c t i u là m t chu i các n c đi giúp đ a đ n tr ng thái đích mong ộ ế ượ ố ư ộ ỗ ướ ư ế ạ
mu n (vd: chi n th ng)ố ế ắ
o Chi n l c c a MAX b nh h ng (ph thu c) vào các n c đi c a MIN – và ế ượ ủ ị ả ưở ụ ộ ướ ủ
ng c l iượ ạ
o MAX c n ch n m t chi n l c gi a c c đ i hóa giá tr hàm m c tiêu – v i gi sầ ọ ộ ế ượ ữ ự ạ ị ụ ớ ả ử
là MIN đi các n c t i u. Min c n ch n m t chi n l c giúp c c ti u hoá giá tr ướ ố ư ầ ọ ộ ế ượ ự ể ị
hàm m c tiêu.ụ
o Chi n l c này đ c xác đ nh b ng vi c xét giá tr MINIMAX đ i v i m i nút trong ế ượ ượ ị ằ ệ ị ố ớ ỗ
cây bi u di n trò ch i. Chi n l c t i u đ i v i các trò ch i có không gian tr ng ể ễ ơ ế ượ ố ư ố ớ ơ ạ
thái xác đ nh (deterministic states).ị
- Giá tr MINIMAX ị
o MAX ch n n c đi ng v i giá tr MINIMAX c c đ i (đ đ t đ c giá tr c c đ i ọ ướ ứ ớ ị ự ạ ể ạ ượ ị ự ạ

c a hàm m c tiêu).ủ ụ
o Ng c l i MIN ch n n c đi ng v i giá tr MINIMAX c c ti u.ượ ạ ọ ướ ứ ớ ị ự ể
- Gi i thu t MINIMAXả ậ
Page 14 of 25
- Theo thuật toán, hàm Max-Value sẽ lấy vị trí cho quân đưa vào mà ở đó
nếu quân đối địch đi để điểm trạng thái của quân đưa vào là min thì giá trị
min đó là lớn nhất.
- Hàm Min –Value sẽ ngược lại, tức là sẽ lấy vị trí cho quân đưa vào mà ở đó
nếu quân đối địch đi để điểm trạng thái của nó là max thì giá trị max đó là
nhỏ nhất.
- Hai hàm này hỗ trợ rất tốt cho tìm nước đi tối ưu, chúng tối ưu cho max
trên cơ sở tối ưu của cả quân max và min trong các bước sau đó, phụ thuộc
vào độ sâu lựa chọn.
- Các đặc điểm của giải thuật MINIMAX
o Tính hoàn chỉnh: Có (nếu cây biểu diễn trò chơi là hữu hạn)
o Tính tối ưu: Có (đối với một đối thủ luôn chọn những nước đi tối ưu)
o Độ phức tạp về thời gian: O(b^m)
o Độ phức tạp về bộ nhớ: O(bm) (khám phá theo chiến lược tìm kiếm
theo chiều sâu)
Page 15 of 25
2. Thuật toán Anpha-Beta cắt tỉa.
- Vấn đề: Giải thuật tìm kiếm MINIMAX vấp phải vấn đề bùng nổ tổ hợp (mức hàm mũ)
các khả năng nước đi cần phải xét, không phù hợp với nhiều bài toán trò chơi thực tế.
- Chúng ta có thể cắt tỉa (bỏ đi – không xét đến) một số nhánh tìm kiếm trong cây biểu
diễn trò chơi.
- Phương pháp cắt tỉa
α
-β (Alpha – Beta prunning)
o Ý tưởng: Nếu một nhánh tìm kiếm nào đó không thể cải thiện đối với giá trị (hàm
tiện ích) mà chúng ta đã có thì không cần xét đến nhánh tìm kiếm đó nữa.

o Việc cắt tỉa các nhánh tìm kiếm “tồi” không ảnh hưởng đến kết quả cuối cùng.
- Ví dụ:
Hình 1:
Page 16 of 25
- Thuật toán Cắt tỉa tỉa
α
-β (Alpha – Beta)
o
α là giá trị cảu nước đi tốt nhất đối với MAX (giá trị tối đa) tính đến hiện tại đối
với nhánh tìm kiếm.
o
Nếu v là giá trị tồi hơn α thì MAX sẽ bỏ qua nước đi ứng với v. Cắt tỉa nhánh
ứng với v.
o
β được định nghĩa tương tự với MIN.
Page 17 of 25
- Theo thuật toán, tại mỗi trạng thái con của hàm Max-Value, nếu giá trị của
trạng thái đó nhỏ hơn giá trị Max đang có , thì nhánh đó sẽ không được xét
tiếp.
- Tương tự với hàm Min –Value, trạng thái con nào có giá trị trạng thái lớn
hơn giá trị Min đang có thì sẽ không được xét tiếp.
- Thuật toán có hiệu quả rất nhiều trong việc cắt giảmkhông gian tìm kiếm, cải
thiện thời gian tìm kiếm một cách đáng kể.
- Một số hạn chế:
o Đối với các trò chơi có không gian trạng thái lớn, thì phương pháp cắt
tỉa
α
-β vẫn không phù hợp. Không gian tìm kiếm (kết hợp cắt tỉa) vẫn lớn.
o Có thể hạn chế không gian tìm kiếm bằng cách sử dụng các tri thức cụ
thể của bào toán.

 Tri thức bổ sungcho phép đánh giá mỗi trạng thái của trò chơi
 Tri thức bổ sung (heuristic) đóng vai trò tương tự như là hàm
ước lượng h(n) trong giải thuật tìm kiếm A*
V. Giới thiệu sản phẩm
- Chương trình được viết bằng ngôn ngữ java.
- Dưới đây là một số hình ảnh cho quá trình chạy và kết quả của chương trình!
- Giao diện chương trình:
- Giao diện màn hình khi khởi động:
Page 18 of 25
Page 19 of 25
- Giao diện màn hình About (cửa sổ thông tin nhóm):
Page 20 of 25
- Giao diện chương trình khi chơi game:
Page 21 of 25
- Giao diện thay đổi thông tin cái đặt:
Ví dụ: thay đổi kích thước
Page 22 of 25
+ Giao diện chương trình khi chơi
Page 23 of 25
- Giao diện khi người chơi hoặc máy chiến thắng
Page 24 of 25
Tài liệu tham khảo
1. Tài liệu về các thuật giải trên mạng:
/> /> />2. Bài giảng “Trí Tuệ Nhân Tạo” – Thầy. Phạm Văn Hải
3. Bài giảng trí tuệ nhân tạo của thầy Nguyễn Nhật Quang.
3. Artificial Intelligence – A Modern Approach – Stuart Russell & Peter Norvig
4. Một số chương trinh Gomoku mã nguồn mở
Page 25 of 25

×