1
Trường Đại Học Bách Khoa Hà Nội
Bộ Môn Hệ Thống Thông Tin
Báo Cáo Trí Tuệ Nhân Tạo
Đề Tài: Game Cờ Caro Trên Android
Nhóm sinh viên: SHSV:
Đặng Tiến Đạt 20090656
Trần Đình Quang 20093577
Lê Huy Hoàng 20091144
Nguyễn Thanh Sơn 20092261
Trần Mạnh Hùng 20091336
Giảng viên hướng dẫn: TS. Phạm Văn Hải
Hà Nội 4-8-2013
2
Mục lục
LỜI NÓI ĐẦU 3
I. Giới thiệu bài toán 5
II. Phân công công việc 5
III. Công nghệ sử dụng 5
IV. Chiến lược tìm kiếm 5
V. Kỹ thuật lượng giá 11
VI. Các khó khăn gặp phải 13
VII. Hướng cải tiến và phát triển 14
1. Cải tiến không gian trạng thái 14
2. Dùng tri thức bổ sung bên ngoài 14
VIII. Tài liệu tham khảo 15
3
LỜI NÓI ĐẦU
Trí tuệ nhân tạo là trí tuệ được biểu diễn bởi bất cứ một hệ thống nhân tạo nào. Thuật ngữ
này thường dùng để nói đến các máy tính có mục đích không nhất định và ngành khoa
nghiên cứu về các lý thuyết và ứng dụng của trí tuệ nhân tạo.
Tuy rằng trí thông minh nhân tạo có nghĩa rộng như là trí thông minh trong khoa học viễn
tưởng, nó là một trong những ngành trọng yếu của tin học. Trí thông minh nhân tạo liên
quan đến cách cư xử, sự học hỏi và khả năng thích ứng thông minh của máy móc. Các ví
dụ ứng dụng bao gồm các tác vụ điều khiển, lập kế hoạch và lập lịch (scheduling), khả
năng trả lời các câu hỏi về chẩn đoán bệnh, trả lời khách hàng về các sản phẩm của một
công ty, nhận dạng chữ viết tay, nhận dạng tiếng nói và khuôn mặt. Bởi vậy, trí thông
minh nhân tạo đã trở thành một môn học, với mục đích chính là cung cấp lời giải cho các
vấn đề của cuộc sống thực tế. Ngày nay, các hệ thống nhân tạo được dùng thường xuyên
trong kinh tế, y dược, các ngành kỹ thuật và quân sự, cũng như trong các phần mềm máy
tính thông dụng trong gia đình và trò chơi điện tử.
Để áp dụng những kiến thức về AI được học trên lớp cũng như tìm hiểu qua internet,
nhóm chúng em đi đến quyết định chung là xây dựng trò chơi cờ ca rô trên nền tảng
Android.
Trong quá trình làm bài tập lớn, chúng em xin chân thành cảm ơn thầy Phạm Văn Hải đã
tận tình hướng dẫn, cảm ơn các bạn đã đóng góp những ý kiến bổ ích để trò chơi được tốt
hơn. Do chưa có nhiều kinh nghiệm cũng như kiến thức về AI còn hạn hẹp nên trò chơi
chưa được tối ưu lắm. Mong thầy và các bạn góp ý để game được tốt hơn.
Chúng em xin chân thành cảm ơn!
4
NỘI DUNG TRÌNH BÀY
1. Giới thiệu bài toán
2. Phân công công việc
3. Công nghệ sử dụng
4. Chiến lược tìm kiếm
5. Kỹ thuật lượng giá
6. Các khó khăn gặp phải
7. Hướng cải tiến và phát triển
8. Tài liệu tham khảo
5
I. Giới thiệu bài toán
Trò chơi cờ caro được thực hiện bởi hai đối thử trên bàn cờ hình
vuông kích thước n*n (n tùy ý). Hai ký hiệu X và O sẽ đại diện
cho hai quân cờ. người chơi có nhiệm vụ thay phiên nhau điền ký
hiệu của mình vào các ô trên bàn cờ. Người thắng sẽ là người đầu
tiên tạo được 5 quân của mình thành một chuỗi liên tiếp trên một
hàng ngang, dọc, chéo.
II. Phân công công việc
Đạt + Hoàng: nghiên cứu thuật toán và tìm kiếm hàm lượng giá
Quang + Sơn : Code
Hùng : Cài đặt, kiểm thử cộng viết báo cáo
III. Công nghệ sử dụng
Tool: eclipse
Các thuật toán tìm kiếm với chi thức bổ xung: Minimax và Alphabeta
cắt tỉa.
Ngôn ngữ sử dụng : Javas
Nền tảng phát triển: Hệ điều hành Android
IV. Chiến lược tìm kiếm
Phân tích
Đến lượt đi của mình, mỗi người chơi cố gắng tạo ra các nước đi uy
hiếp đối phương là cao nhất và đưa tướng của đối phương về trạng thái
chiếu hết (checkmate)
Ở chế độ chơi người với máy tính : Nguời lập trình phải xây dựng hàm
để tìm kiếm cho máy tính các nước đi tối ưu nhất. Mỗi nước đi mà máy
tính lựa chọn sẽ một trong số các khả năng mà máy tính có thể đi, ta gọi
6
đây là các trạng thái nước đi của máy tính. Việc xét hết các trạng thái
nước đi của bàn cờ là một việc không mấy dễ dàng .Việc duyệt hết các
khả năng này có thể làm cho không gian trạng thái sẽ rất lớn ảnh hưởng
tới khả năng xử lý của CPU và do đó thời gian cho máy chọn một
phương án tối ưu sẽ rất lâu.
Vấn đề này yêu cầu sử dụng giải thuật heuristic cho máy để tăng khả
năng tối ưu, giảm thời gian “suy nghĩ” cho những phương án lựa chọn
của máy. Người lập trình áp dụng thủ tục cắt tỉa alpha - beta
(alpha-beta prunning) để cài đặt cho chương trình.
Cây trò chơi
Trong quá trình chơi, trạng thái của bàn cờ được thay đổi liên tục bởi
một nước đi của 1 trong 2 đối thủ. Ta có thể biểu diễn các trạng thái này
dưới dạng một cây tìm kiếm(gọi là cây trò chơi), mỗi nút tương ứng với
một trạng thái bất kỳ, các nhánh nối giữa các nút cho ta biết từ trạng
thái này sang trạng thái kia thông qua một nước đi nào đó.
Thuật toán MiniMax
Minimax(còn gọi là minmax) là một phương pháp trong có mục
đích là tối thiểu hóa (minimize) tổn thất vốn được dự tính có thể là "tối
đa" (maximize). Có thể hiểu ngược lại là, nó nhằm tối đa hóa lợi ích vốn
được dự tính là tối thiểu (maximin). Nó bắt nguồn từ trò chơi có tổng
bằng không. Nó cũng được mở rộng cho nhiều trò chơi phức tạp hơn và
giúp đưa ra các quyết định chung khi có sự hiện diện của sự không chắc
chắn. Minimax thường dùng để giải quyết những trò chơi có tính chất
đối kháng.
Giả sử hai đối thủ trong trò chơi có tên là MAX và MIN
Max: biểu diễn cho mục đích của đối thủ này là làm lớn tối đa lợi
thế của mình
Min: biểu diễn cho mục đích của đối thủ này là làm nhỏ tối đa lợi
thế của đối phương.
Trên cây tìm kiếm sẽ phân lớp thành các lớp Max và Min.
7
Minimax sẽ truyền các giá trị này lên cao dần trên đồ thị, qua các nút
cha mẹ kế tiếp theo các luật sau:
Nếu trạng thái cha mẹ là Max, gán cho nó giá trị lớn nhất có trong
các trạng thái con của nó.
Nếu trạng thái bố, mẹ là Min, gán cho nó giá trị nhỏ nhất có trong
các trạng thái con của nó.
Hình 1: Cây nhị phân tìm kiếm Max-Min
Các nút lá được gán các giá trị heuristic
Còn giá trị tại các nút trong là các giá trị nhận được dựa trên giải
thuật Minimax
8
Giải thuật
function MINIMAX-DECISION(state) returns an action
vMAX-VALUE(state)
return the action in SUCCESSORS(state) with value v
function MAX-VALUE(state) returns a ultility state
if TERMINAL-TEST(state) then return UTILITY(state)
v -∞
for a,s in SUCCESSORS(state)do
vMAX(v,MIN-VALUE(s))
return v
function MIN-VALUE(state) returns a ultility state
if TERMINAL-TEST(state) then return UTILITY(state)
v -∞
for a,s in SUCCESSORS(state)do
vMIN(v,MAX-VALUE(s))
return v
Ta thấy để gán giá trị cho một nút nào đó ta phải xét hết tất cả các nút
con của nó rồi truy hồi dần về nút gốc. Vấn đề gặp phải ở đây là một sự
bùng nổ hàm mũ số lượng các nút phải xét. Để giải quyết vấn đề này ta
dùng phương pháp cắt tỉa Alphabeta
4.4 Phương pháp cắt tỉa Alphabeta
Ý tưởng: Nếu một nhánh tìm kiếm nào đó không cải thiện đối với
giá trị(hàm lượng giá) mà chúng ta xét ở phần sau, thì không cần
xét đến nhánh tìm kiếm đó nữa.
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.
9
GIẢI THUẬT
function ALPHA-BETA-SEARCH(state) returns an action
v MAX-VALUE(state,- ,+ )
return the action in SUCCESSORS(state) with value v
function MAX-VALUE(state) returns a ultility state
if TERMINAL-TEST(state) then return UTILITY(state)
v -∞
for a,s in SUCCESSORS(state)do
vMAX(v,MIN-VALUE(s,α,β))
if(v≥β) then return v
αMAX(α,v)
return v
function MIN-VALUE(state) returns a ultility state
if TERMINAL-TEST(state) then return UTILITY(state)
v +∞
for a,s in SUCCESSORS(state)do
vMIN(v,MAX-VALUE(s,α,β))
if(v≤ α) then return v
ß MIN(β,v)
return v
10
Cắt tỉa α
Max S= α
Min A= α Z
α - cut
=z
z ≤α
Cắt tỉa β
Min S= β
Max A= β Z
ß - cut
=z
z ≥ β
Z ≤ α
Z ≥ β
11
Ví dụ minh họa
Hình 2: định trị cây trò chơi bằng phương pháp cắt tỉa α- β
V. Kỹ thuật lượng giá
Hàm lượng giá cực kỳ quan trọng trong phương pháp cắt tỉa α- β. Một
hàm lượng giá tốt sẽ rút bớt cho ta rất nhiều những trạng thái phải xét.
Trong bài toán cờ caro, hai yếu tố có vai trò quyết định cho trận đấu là
tổng số nước có thể thắng của quân X và tổng số nước có thể thắng của
quân O tại một trạng thái bất kỳ. Vì vậy ta sẽ sử dụng hàm lượng giá
sau.
Xét tại trạng thái n thì:
Eval(n)=Eval1(n)+Eval2(n)
Trong đó:
Eval1(n) là hàm tấn công
Eval2(n) là hàm phòng thủ
12
Cụ thể tính giá trị tính nhu sau:
Eval1(n)=X(n)-O(n) với X(n) là tổng bình phương số quân X
liên tiếp trên các đường ngang, dọc, chéo và O(n) là tổng bình
phương số quân O liên tiếp trên các đường ngang, dọc, chéo
Ví dụ trên một hàng ngang có 1 2 3 quân X liên tiếp thì
Eval1+=1*1+2*2+3*3
Trường hợp riêng:
nếu số quân X liên tiếp bằng 4 thì cộng thêm 50 vào giá trị hàm
Eval1(n) và cộng thêm 100 nếu số quân X liên tiếp bằng 5 để
thấy rõ sự cấp thiết của nước đi này
nếu số quân O liên tiếp bằng 4 trên một phương nào đó thì trừ đi
50 vào giá trị hàm Eval 1(n) và trừ đi 100 nếu số quân O liên tiếp
bằng 5
Eval2(n) =X’(n)-O’(n) với X’(n) là tổng bình phương số quân O
liên tiếp mà X chặn được và O’(n) là tổng bình phương số quân
X liên tiếp mà O chặn được trên các đường ngang, dọc, chéo
Trường hợp riêng:
Nếu X chặn được 4 quân O liên tiếp trên một phương nào đó thì
cộng thêm 100 vào giá trị hàm Eval(n)
Nếu O chặn được 4 quân X liên tiếp trên một phương nào đó thì
trừ đi 100 vào giá trị hàm Eval(n)
13
Ví dụ cụ thể
Giả sử tại độ sâu k của cây trò chơi ta có trang thái sau:
o
x
x
x
x
o
o
o
o
x
Eval1=(1+1+4+1+1+4+1+1+1+1+4+1+4+1+1+1)-
(1+1+9+1+1+1+1+1+1+1+1+1+1+1+1+1+4)=0
Eval2=(1+1+9+1+1+1+1+1+1+1+1+1+4)-
(1+4+1+1+4+1+1+4+1+4+1+1)=0
Vậy Eval=0+0=0
VI. Các khó khăn gặp phải
Việc xây dựng chương trình gặp một số khó khăn như việc tìm
hàm đánh giá, việc xử lý từ thuật toán chụng cho trò chơi đối
kháng thành code riêng của cờ ca rô
Tố ưu thuật toán và giảm thời gian tính toán của máy, tăng
cường xét các độ sâu cao hơn.
14
VII. Hướng cải tiến và phát triển
1. Cải tiến không gian trạng thái
Do không gian trạng thái bàn cờ rất lớn, vì vậy ta phải xét rất nhiều
nút con từ một nút cha. Nhưng ta có thể cải tiến bằng cách chỉ xét
những ô trống xung quanh những ô đã đánh, bởi vì những ô trống
gần khu vực đánh là những ô có tầm quan trọng cao hơn những ô ở
xa khu vực đánh. Những ô càng xa thì tầm quan trọng càng giảm.
Như vậy số nút phải xét sẽ giảm đi thay vào đó ta sẽ tăng độ sâu
cho cây tìm kiếm => như vậy máy sẽ thông minh hơn.
2. Dùng tri thức bổ sung bên ngoài
Ta sẽ sử dụng 1 openingbook để lưu trữ những thế cờ mà máy chắc
thắng để cho máy luôn có xu hướng đưa đối thủ vào 1 trong số thế
đó
Ta sẽ tao cho máy lưu lại những ván mà máy thua để lần sau máy
không bị tái phạm nữa
15
VIII. Tài liệu tham khảo
Slide trí tuệ nhân tạo của thầy Phạm Văn Hải
Slide trí tuệ nhân tạo của thầy Nguyễn Nhật Quang
Giáo trình trí tuệ nhân tạo của thầy Đinh Mạnh Tường
Trò chơi đối kháng và phương pháp tìm kiếm của thầy Phạm
Hồng Nguyên
0__SWT.htm
-Kéo thả giao diện với Eclipse:
IX. Hướng dẫn cài đặt
1. Trên smartphone Android
Trong thư mục gửi code bọn em có build file demo-co-ca-ro.apk. Thầy chỉ
cần copy file này vào thư mục download của smartphone Android rùi tiến
hành cài đặt là chạy bình thường
2. Trên PC
Muốn chạy chương trình trên PC trước hết phải cài phần mềm bluestacks.
Đây là phần mềm giả lập Android trên PC.
Link dowload bulestacks.
Sau khi tiến hành tải và cài đặt thì chạy file demo-ca-ca-ro.apk trên PC bình
thường.