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
Trang 1Trườ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
Trang 2Mụ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
Trang 3LỜ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!
Trang 4NỘ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
Trang 5I 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
Trang 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
Trang 7Minimax 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
Trang 8Giả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
Trang 9GIẢ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
Trang 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 ≥ β
Trang 11Ví 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ủ
Trang 12Cụ 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)
Trang 13Ví 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
Trang 14VII 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
Trang 1515
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
http://www.java2s.com/Tutorial/Java/0280 SWT/Catalog028
0 SWT.htm
-Kéo thả giao diện với Eclipse:
http://www.ptpsoft.com.vn/?page=hotnews&id=694&catid=96
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
http://www.bluestacks.com/
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