Báo cáo Bài toán cờ caro

25
Báo cáo sơ bộ bài tập lớn Môn Trí Tuệ Nhân Tạo Đề tài : Làm game chơi cờ caro Nhóm thực hiện: - Phạm Hoàng Hà - Mai Đức Khiêm - Nguyễn Thanh Loan - Hoàng Quyết Tiến

description

Xây dựng thuật giải bài toán trí tuệ nhân tạo (AI) về chơi cờ caro. Xem thêm bài viết khác của các bạn sinh viên tại trang youandme.ucoz.com.

Transcript of Báo cáo Bài toán cờ caro

Page 1: Báo cáo Bài toán cờ caro

Báo cáo sơ bộ bài tập lớnMôn Trí Tuệ Nhân Tạo

Đề tài : Làm game chơi cờ caro

Nhóm thực hiện:

- Phạm Hoàng Hà- Mai Đức Khiêm- Nguyễn Thanh Loan- Hoàng Quyết Tiến

Page 2: Báo cáo Bài toán cờ caro

Nội dung báo cáoNội dung báo cáo

1.Cờ caro ?2. Tìm kiếm nước đi của players 3.Tìm kiếm nước đi của Computer4. Lập trình Computer Player vs Human Player

Page 3: Báo cáo Bài toán cờ caro

Một số công việc đã thực hiện được

- Xây dựng được giao diện bàn cờ + sự kiện đánh cờ giữa 2 người.

- Xây dựng được một số hàm lượng giá các trạng thái của bàn cờ.

- Xây dựng bàn cờ theo các cell và có thể đánh được trên bàn cờ đó

- Viết được code cơ bản của Anpha-beta

Page 4: Báo cáo Bài toán cờ caro

Công việc chưa thực hiện được

- Lưu trạng thái bàn cờ

- Ứng dụng thuật toán alpha-beta vào thực tế

- Xây dựng độ sâu của giải thuật tìm kiếm

Page 5: Báo cáo Bài toán cờ caro

Cờ caroCờ caro

- Caro là một trò chơi sử dụng một bàn cờ có kẻ các ô vuông liên tiếp nhau kích thước tuỳ ý (tối thiểu là 3x3). - Có hai loại quân cờ khác nhau (X 0). - Mỗi người chơi chọn cho mình một loại quân.

- Cách chơi : Hai người chơi lần lượt đến lượt mình đặt quân cờ của mình vào ô cho đến khi đạt điều kiện thắng hoặc hết giới hạn bàn cờ.

- Điều kiện thắng : Có 5 quân cờ của một người chơi đặt thẳng hàng (ngang, chéo, dọc).

Page 6: Báo cáo Bài toán cờ caro

Ví dụ minh hoạVí dụ minh hoạ

Page 7: Báo cáo Bài toán cờ caro

Tìm kiếm nước đi của người chơi

- Tuỳ theo hiện trạng hiện thời mà người chơi có thể :

1. Tìm kiếm các vị trí mà khi đánh quân cờ mình vào thì tạo ra các nguy hiểm cho địch thủ. Ví dụ: Nước ba hở hai đầu, nước bốn hở một đầu, hở hai đầu, nước đôi ( 2 nước 3; 1 nước 4, 1 nước 3 ...), nước 3 .... 2. Xác định các nước đi nguy hiểm của đối thủ và ngăn chặn. 3. Đưa ra quyết định về vị trí sẽ đánh tiếp theo. → Các bước 1 và 2 thực hiện cho 1 hoặc nhiều nước đi tiếp theo

Page 8: Báo cáo Bài toán cờ caro

Ví dụ

Page 9: Báo cáo Bài toán cờ caro

Tìm kiếm nước đi của máy tính

1. Đánh giá khả năng và giá trị các vị trí ô trên bàn cờ ở nước hiện tại và một số các nước tiếp theo (Evalue Function ).

2. Tìm kiếm nước đi hợp lý ( Giới hạn bởi thuật toán Minimax và Anpha-Beta – Heuristic ).

3. Thực hiện reset bàn cờ sau khi đối thủ đưa ra quyết định. Lặp lại các bước ở trên cho đến khi đạt trạng thái kết thúc. (Điều kiện thắng hoặc Bàn cờ full).

Page 10: Báo cáo Bài toán cờ caro

Lập trình Computer player

Mô phỏng bàn cờ.

Tìm hiểu Heuristic – Thuật đánh giá cho các ô cờ.

Thuật toán tìm kiếm ( Minimax, Anpha-Beta) nước đi tốt nhất (bestmove).

Đi thử

Lặp lại các bước trên.

Page 11: Báo cáo Bài toán cờ caro

Mô phỏng bàn cờ

- Bàn cờ (Board) bao gồm các ô cờ (Cells) được đặt trong một mảng hai chiều (kích thước a x b).

* Trong mỗi Cell có thể xác định được :

- Vị trí Cell (row, collumme) - Trạng thái Cell (Status). (Bao gồm đang trống (empty) nước của đối thủ (Player) hoặc nước của máy (Com).

- Độ nguy hiểm của ô cờ tuỳ theo trạng thái Cell và có thể thay đổi được.

Page 12: Báo cáo Bài toán cờ caro

Đánh giá giá trị các Cell

Giống như trong thực tế, người chơi thường đánh giá một số nước cờ là nguy hiểm, bình thường hoặc ít nguy hiểm, máy tính cũng đánh giá nhưng cụ thể hơn bằng các con số.

Ví dụ cụ thể :

Các hình trạng bàn cờ Độ nguy hiểm với người chơi Độ nguy hiểm với máy

- 3 quân liền nhau (_XXX_) Rất nguy hiểm 800

- 2 quân liền nhau (_XX_) Bình thường 100

- 4 quân bị chặn (0XXXX_) Cực kì nguy hiểm 900

- 5 quân liền nhau Kết thúc 1000

Page 13: Báo cáo Bài toán cờ caro

Tìm nước đi thích hợpMinimax - AnphaBeta

Page 14: Báo cáo Bài toán cờ caro

Minimax

• Bao gồm hai bộ phận Minimum và Maximum

• Min thể hiện cho giá trị tối thiểu mà máy tính có thể đi trong nước hoặc vài nước tiếp theo. Người chơi thường chọn nước đi có giá trị Min.

• Max thể hiện cho giá trị lớn nhất mà máy tính có thể đi trong nước hoặc một vài nước tiếp theo. Máy sẽ thường chọn nước đi được đánh giá là Max.

Page 15: Báo cáo Bài toán cờ caro

Minimax

Thực tế không đơn giản như vậy vì khi máy tính mong muốn chọn được giá trị max nhất (có lợi nhất cho mình) nhưng đó cũng là thiệt hại nhất cho đối thủ vì thế đối thủ sẽ chọn nước đi sao cho giảm độ thiệt hại nhất có thể tức là sẽ luôn chọn Min giá trị mà máy tính sẽ chọn.

Page 16: Báo cáo Bài toán cờ caro

MinimaxVí dụ minh hoạ

Ví dụ : Máy mong muốn chọn COM4 nhưng để ngăn chặn Người chơi sẽ chọn Player1

COM1

COM2

COM3

COM4

Player 1

800 200 -200 -900

Player 2

-200 400 800 1000

Player 3

900 0 -50 -800

Player 4

200 -800 50 0

Page 17: Báo cáo Bài toán cờ caro

Minimax

Giải pháp : - Máy phải luôn luôn mặc định là người chơi sẽ chọn giá trị tối thiểu (MIN) , máy cần chọn trong các nước đi của mình sao cho ở trạng thái cuối, máy luôn có được giá trị tốt nhất (MAX) trong các trường hợp tính được.

Page 18: Báo cáo Bài toán cờ caro

Minimax

Mô tả :

Page 19: Báo cáo Bài toán cờ caro

CodingCoding

minimax(player,board) if(game over in current board position) return winner children = all legal moves for player from this board if(max's turn) return maximal score of calling minimax on all the children else (min's turn) return minimal score of calling minimax on all the children

Page 20: Báo cáo Bài toán cờ caro

Anpha – Beta Pruning

- Nếu dùng Minimax xét hết các trường hợp thì nếu với bàn cờ có số lượng nhỏ, mức xét không cao thì chưa gây mất nhiều thời gian tính toán, nếu là bàn cờ nhiều ô và xét với độ sâu lớn thì thời gian thực hiện tính toán và tìm kiếm là lớn và tốn tài nguyên.

Độ phức tạp tính toán theo độ sâu khác nhau :

- Với độ sâu (ply) tính toán là b, trung bình mỗi ply phải xét n trạng thái thì độ phức tạp tính toán là : --> O (n + n^2 + n^3 + n^4 …) = O (n^(b+1)).

→ Để làm giảm quá trình tính toán này chúng ta sử dụng kết hợp Minimax và thuật toán Anpha-Beta Pruning (tạm dịch là thuật cắt gọt Anpha-Beta).

Page 21: Báo cáo Bài toán cờ caro

Anpha – Beta PruningÝ tưởng :

Dùng hai cận Anpha (dưới) và Beta (trên) để so sánh và loại bỏ các trường hợp sẽ không cần xét đến trong thuật toán Minimax.

Mô tả :Anpha lưu nước đi tốt nhất của máy,

Beta lưu giá trị tốt nhất của Người chơi

. → Nếu bất cứ khi nào, anpha >= beta, thì người chơi chắc chắn sẽ chọn nước đi tốt nhất cho họ và cưỡng bức nước đi tồi hơn anpha cho máy, vì vậy mà không cần phải xét thêm nước nào nữa. Cũng giống như vậy trong trường hợp máy đang ở trường hợp Min, ta chỉ việc thay anpha cho beta.

Page 22: Báo cáo Bài toán cờ caro

Anpha – Beta Pruning

Độ phức tạp thuật toán

Page 23: Báo cáo Bài toán cờ caro

Mô tả

Page 24: Báo cáo Bài toán cờ caro

Coding

alpha-beta(player,board,alpha,beta) if(game over in current board position) return winner

children = all legal moves for player from this board if(max's turn) for each child score = alpha-beta(other player,child,alpha,beta) if score > alpha then alpha = score (we have found a better best move) if alpha >= beta then return alpha (cut off) return alpha (this is our best move) else (min's turn) for each child score = alpha-beta(other player,child,alpha,beta) if score < beta then beta = score (opponent has found a better worse move) if alpha >= beta then return beta (cut off) return beta (this is the opponent's best move)

Page 25: Báo cáo Bài toán cờ caro

Khó khăn trong quá trình thực hiện

- Triển khai định giá theo mức (độ sâu) ply ???