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

Đề tài: Xây dựng game cờ Caro pot

16 612 1
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 16
Dung lượng 372,91 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tài liệu này giúp ta có một cái nhìn tổng quát về việc áp dụng thuật toán MiniMax và cắt cụt alpha-beta vào game cờ Caro.. Hai người chơi sẽ lần lượt đưa đánh quân tương ứng của mình trê

Trang 1

BÁO CÁO BÀI TẬP LỚN

Môn: Trí tuệ nhân tạo

Đề tài: Xây dựng game cờ Caro

Sinh viên thực hiện:

1 Nguyễn Hữu Giáp

2 Lê Quốc Lập

3 Mạc Đình Hiếu

4 Đỗ Trung Hiếu

Giảng viên hướng dẫn: PGS Lê Thanh Hương

Trang 2

M c l c ục lục ục lục

Lời mở đầu 3

I Giới thiệu đề tài “Game Caro” 4

II Thuât toán MiniMax và thuật toán cắt cụt Alpha-Beta 5

1 Thuật toán MiniMax 5

2 Thuật toán cắt cụt alpha-beta 6

3 Hàm đánh giá 8

III Cài đặt chương trình 9

1 Lớp Board 9

2 Lớp CaroAI 10

3 Lớp Result 12

IV Giao diện chương trình 12

V Kết luận 12

VI Tài liệu tham khảo 13

Trang 3

L i m đ u ời mở đầu ở đầu ầu

Hiện nay, việc ứng dụng trí tuệ nhân tạo vào việc phát triển game đã trở nên vô cùng phổ biến, đặc biệt là những game mang tính trí tuệ cao Và cờ Caro là một game như vậy Chính vì lý do đó mà chúng em đã quyết định lựa chọn cờ Caro làm để tài cho bài tập lớn môn trí tuệ nhân tạo Đây là tài liệu dùng để miêu

tả một cách cơ bản về việc xây dựng game cờ Caro Trong game có sử dụng thuật toán MiniMax với độ sâu là 4 và thuật toán cắt cụt alpha-beta để giảm thời gian tính toán Tài liệu này giúp ta có một cái nhìn tổng quát về việc áp dụng thuật toán MiniMax và cắt cụt alpha-beta vào game cờ Caro Do thời gian có hạn nên chúng em chưa thể tối ưu được các thuật toán sử dụng trong game, nhưng chúng

em sẽ cố gắng hoàn thiện trong thời gian sớm nhất

Nhóm thực hiện đề tài này với mục đích xây dựng game Caro có tính nhân tạo cao Tuy nhiên trong quá trình thực hiện không thể tránh khỏi có những sai sót, chúng em rất mong nhận được những góp ý và đánh giá của cô

Trang 4

I Gi i thi u đ tài “Game Caro” ới thiệu đề tài “Game Caro” ệu đề tài “Game Caro” ề tài “Game Caro”

Game gồm có 2 người chơi, một người cầm quân X, một người cầm quân O Hai người chơi sẽ lần lượt đưa đánh quân tương ứng của mình trên một bàn cờ MxN ô (thường thì M = N)

Luật chơi:

Quân X là quân được đánh trước Hai người chơi có thể đánh vào bất kỳ ô nào trên bàn cờ miễn là ô đó chưa được đánh

Trò chơi kết thúc khi một trong hai người chơi có 5 quân thằng hàng liên tiếp nhau (ngang, dọc hoặc chéo)

Dưới đây là bàn cờ caro kích thước 15x15

Trang 5

II Thuât toán MiniMax và thu t toán c t c t ật toán cắt cụt ắt cụt ục lục

Alpha-Beta

1 Thu t toán MiniMax ật toán cắt cụt

a Nguyên lý:

 Có 2 người chơi là Min và Max

 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

 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

 MAX cần chọn một chiến lược giúp cực đại hóa giá trị của hàm mục tiêu – với giả sử là MIN đi các nước đi tối ưu

 Chiến lược này được xác định bằng việc xét các giá trị MINIMAX đối với mỗi nút trong cây biểu diễn trò chơi

 MAX chọn các nước đi tương ứng với giá trị MINIMAX cực đại ( MIN chọn các nước đi ứng với giá trị MINIMAX cực tiểu

b Áp dụng vào game Caro:

Người chơi cầm quân X đóng vai trò như Max, người chơi cầm quân O đóng vai trò như Min Để quyết định nước đi tiếp theo, ta xây dựng một thủ tục đệ quy gồm 2 hàm max_value() để tìm nước đi tiếp theo cho quân X, min_value() để tìm nước đi tiếp theo cho quân O Để giảm thời gian của giải thuật đệ quy, ta giới hạn

độ sâu của giải thuật bằng 4

int max_value(state s, int dept){

if(terminal_test() || dept >= 4) return eval(s);

v = -∞;

for(duyệt tất cả các trạng thái con s’ của s){

v = max(v, min_value(s’, dept + 1));

}

Trang 6

return v;

}

int min_value(state s, int dept){

if(terminal_test() || dept >= 4 ) return eval(s);

v = +∞;

for(duyệt tất cả các trạng thái con s’ của s){

v = min(v, max_value(s’, dept + 1));

}

return v;

}

Hàm xác định trạng thái kết thúcterminal_test():

Hàm có nhiệm vụ xác định xem trò chơi có kết thúc hay không khi một quân

cờ được đánh thêm vào Hàm hoạt động như sau:

 Từ vị trí thêm quân cờ, kiểm tra theo các chiều ngang, dọc, chéo(ví dụ kiểm tra theo chiều ngang: giả sử quân cờ đánh vào là X, duyệt theo hướng bên trái cho đến khi gặp quân O hoặc tường thì dừng lại, tiếp tục duyệt theo hướng bên phải tương tự để xác định số quân X liên tiếp nhau)

 Nếu số quân X (hoặc O) liên tiếp là 5 thì trả lại giá trị true, ngược lại trả

về giá trị false

2 Thu t toán c t c t alpha-beta ật toán cắt cụt ắt cụt ục lục

Trong chiến lược Minimax với độ sâu hạn chế thì số đỉnh của cây trò chơi phải xét vẫn còn rất lớn với h>=3 Khi đánh giá đỉnh utới độ sâu h, thuật toán

Minimax đòi hỏi phải đánh giá tất cả các đỉnh của cây gốc u với độ sâu h Tuy nhiên, phương pháp cắt cụt alpha-beta cho phép cắt bỏ những nhánh không cần thiết cho việc đánh giá đỉnh u Phương pháp này làm giảm bớt số đỉnh phải xét

mà không ảnh hưởng đến kết quả đánh giá đỉnh u Ý tưởng: Giả sử tại thời điểm

Trang 7

hiện tại đang ở đỉnh Trắng a, đỉnh a có anh em là v đã được đánh giá Giả sử cha của đỉnh a là b, b có anh em là u đã được đánh giá, và cha của b là c như hình sau:

max

min

max

Khi đó ta có giá trị đỉnh Trắng c ít nhất là giá trị của u, giá trị của đỉnh Đen b nhiều nhất là giá trị của v Do đó, nếu eval(u) > eval(v) ta không cần đi xuống để đánh giá đỉnh a nữa mà vẫn không ảnh hưởng đến đánh giá đỉnh c Hay nói cách khác,

ta có thểcắt bỏ cây con gốc a Lập luận tương tự cho trường hợp a là đỉnh Đen, trường hợp này nếu eval(u)<eval(v) ta cũng cắt bỏ cây con gốc a Để cài đặt kỹ thuật này, đối với các đỉnh nằm trên đường đi từ gốc tới đỉnh hiện thời, ta sử dụng tham số α để ghi lại giá trị lớn nhất trong các giá trị của các đỉnh con đã đánh giá của một đỉnh Trắng, tham số β để ghi lại giá trịnhỏ nhất trong các giá trị của các đỉnh con đã đánh giá của một đỉnh Đen

int max_value(state s, int dept, int alpha, int beta){

if(terminal_test() || dept >= 4) return eval(s);

v = -∞;

for(duyệt tất cả các trạng thái con s’ của s){

v = max(v, min_value(s’, dept + 1, alpha, beta));

}

if(v > beta) return v;

alpha = max(alpha, v);

c

Trang 8

return v;

}

int min_value(state s, int dept, int alpha, int beta){

if(terminal_test() || dept >= 4 ) return eval(s);

v = +∞;

for(duyệt tất cả các trạng thái con s’ của s){

v = min(v, max_value(s’, dept + 1, alpha, beta));

}

if(v < alpha) return v;

beta= min(beta, v);

return v;

}

3 Hàm đánh giá

Hàm đánh giá là một hàm quan trọng trong việc xây dựng trò chơi cờ caro Hàm này giúp cho điểm trạng thái của bàn cờ để từ đó xây dựng cây trò chơi Việc xây dựng hàm lượng giá hợp lý, chính xác sẽ giúp cho hệ thống có đánh giá chính xác

về trạng thái bàn cờ để đưa ra nước đi thông minh hơn

Trong game caro, để tính điểm cho trạng thái bàn cờ ta đưa ra các tiêu chí sau:

 Trong trường hợp chắc chắn thắng, điểm cộng sẽ là +Int32.MAX_VALUE đối với X và -Int32.MAX_VALUE đối với O

 Trong trường hợp có nước 3, điểm cộng sẽ là +300 đối với X và -300 đối với O

 Trong trường hợp có nước 4, điểm cộng sẽ là +600 đối với X và -600 đối với O

Trang 9

III Cài đ t ch ặt chương trình ương trình ng trình

Chương trình gồm các lớp như sau:

1 L p Board ới thiệu đề tài “Game Caro”

Là lớp để lưu lại trạng thái của bàn cờ

Biến:

 COLUMN, ROW: số cột và hàng của bàn cờ

 PieceState: các trạng thái có thể có của một quân cờ(X, O, chưa đánh hoặc không hợp lệ)

 boardState: là một mảng lưu lại các trạng thái của các quân cờ

byte[] boardState;

Hàm:

 GetPieceAt(): Lấy trạng thái của quân cờ tại một tọa độ xác đinh

 IsOccupied(): Xác định xem tại một vị trí xác định đã có quân cờ nào đươc đánh chưa

 AddPiece(): Thêm một quân cờ vào bàn cờ

 IsWinner(): Kiểm tra trạng thái hiện tại của bàn cờ đã kết thúc chưa

Trang 10

2 L p CaroAI ới thiệu đề tài “Game Caro”

Biến:

MINMAX_DEPTH: độ sâu của giải thuật MiniMax

 numMoves, numComparisons: số nút con duyệt qua và số lượng phép so sánh cần sử dụng trong giải thuật MiniMax (dùng để đánh giá thuật toán)

 computerPiece, playerPiece: dùng để xác định kiểu quân cờ của người chơi

và máy(X hay O)

Hàm:

 MinimaxHelper(): xác định nếu thêm một quân cờ vào trạng thái hiện tại của bàn cờ có làm trạng thái hiện tại trở thành trạng thái kết thúc hay không, nếu không thì sử dụng giải thuật MiniMax

 MiniMax(): cài đặt giải thuật MiniMax

private Result MiniMax(Node node, int depth, int alpha, int beta, bool needMax) {

if (depth <= 0 || node.IsTerminalNode()) {

var result = new Result();

var score = node.GetObjectiveValue(computerPiece);

result.setScore(score);

return result;

} var best = new Result();

Trang 11

var result2 = MiniMax(child, depth-1, alpha, beta, !needMax);

var score = result2.getScore();

numComparisons++;

if (needMax) {

if (score > alpha) {

alpha = score;

best = new Result();

best.add(child);

best.addAll(result2.gameNodes);

}

if (beta <= alpha) {

break;

} } else {

if (score < beta) {

best = new Result();

best.add(child);

best.addAll(result2.gameNodes);

beta = score;

}

if (beta <= alpha) {

break;

} }

}

var retval = needMax ? alpha : beta;

best.setScore(retval);

return best;

}

Trang 12

3 L p Result ới thiệu đề tài “Game Caro”

Biến:

 score: điểm của trạng thái bàn cờ

 gameNodes: là một mảng chứa các nút con của nút đang xét

Hàm:

 GetMove():

 getScore(): lấy điểm của trạng thái bàn cờ

 setScrore(): gán điểm của trạng thái bàn cờ

 Add():

Trang 13

IV Giao di n ch ệu đề tài “Game Caro” ương trình ng trình

1 Giao diện khi vào game

2 Giao diện khi chơi

Trang 14

3 Giao diện khi chiến thắng

Trang 15

V K t lu n ết luận ật toán cắt cụt

Qua quá trình học môn trí tuệ nhân tạo và qua việc thực hiện đề tài này, chúng

em đã hiểu thêm hơn về việc ứng dụng trí tuệ nhân tạo trong việc giải quyết các vấn đề trong thực tế Game cờ caro là một game ứng dụng rất tốt thuật toán Minimax và cắt cụt alpha-beta Tuy nhiên do hạn chế về mặt thời gian nên nhóm

em chưa thể tối ưu được thuật toán, hàm tính điểm cũng chưa thật sự được tốt như mong đợi, cũng như trong quá trình thực hiện không thể tránh khỏi sai sót Chúng em rất mong nhận được sự góp ý của cô để game được thật sự hoàn thiện Chúng em xin chân thành cảm ơn

1 Những điều thu được trong quá trình thực hiên:

 Hiểu thêm về hai thuật toán MiniMax và cắt cụt alpha-beta

 Cài đặt được hai thuật toán trên

2 Những điều còn thiếu sót:

 Chưa tối ưu được hàm tính điểm

Trang 16

VI Tài li u tham kh o ệu đề tài “Game Caro” ảo

 Slide bài giảng Trí tuệ nhân tạo

 http://en.wikipedia.org/wiki/Minimax

 http://en.wikipedia.org/wiki/Alpha-beta_pruning

Ngày đăng: 01/04/2014, 02:20

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w