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

slike thuyết trình á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 (410.72 KB, 25 trang )

Sinh viên thực hiện:
- Mai Đức Anh. 20101089
- Lê Công Hưng. 20101667
- Nguyễn Đức Cường. 20101215
- Chu Văn Định. 20101378
- Nguyễn Trung Đức. 20096258
- Trần Nam Sơn. 20096270
BÀI TẬP LỚN
Đề tài: Game cờ Caro sử dụng thuật toán Min-Max và cắt tỉa alpha - beta
Mục đích bài toán:
Xây dựng một chương trình game cờ Caro bằng Java 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, ứng dụng thuật toán Min-Max và cắt tỉa alpha-beta
I. Giới thiệu về game cờ Caro
Cờ caro hay gomoku chính là môn cờ logic lâu đời và cổ
xưa nhất trên Trái Đất.
Là trò chơi đối khàng giữa 2 người.

Một số dạng biến thể của gomoku:
- Gomoku .
- ProGomoku.
- Pente.
Luật chơi:
- Bàn cờ chuẩn 13 x 13, quân đen đi trước.
- Ai tạo được 5 quân liền nhau trước thì thắng
Ví dụ: quân O thắng

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
Phân tích bài toán
- 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 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 một nước đi nào đó.
Cây trò chơi
- 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)

- 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.
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 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). Do đó không dùng thuật
toán vét cạn cho chiến lược tìm kiếm được.
Không gian tìm kiếm nước đi và chiến lược tìm kiếm trong cờ Caro

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à 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
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…
Biểu diễn các trạng thái
- Bàn cờ 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:
+ Trạng thái 0 (EMPTY): Ô cờ trống
+ Trạng thái 1(BLUE): Ô cờ được đánh bởi người thứ nhất
+ Trạng thái 2(RED): Ô cờ được đánh bởi người thứ hai
Các trạng thái có thể xảy ra khi đang chơ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.
+ 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.
+ 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.
+ 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!
IV. Thuật toán sử dụng
1. Thuật toán Min-Max.

Các chiến lược tối ưu

Chiến lược tối ưu là chuỗi các nước đi giúp đưa đến trạng thái đích

mong muốn.

Chiến lược MAX bị ảnh hưởng bởi 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ị hàm mục tiêu –
với giả sử là MIN đi các nước đi tối ưu

MIN cần chọn một chiến lược giúp cực tiểu hóa giá trị hàm mục tiêu

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)

Ngược lại, MIN chọn nước đi ứng với giá trị MINIMAX cực tiểu

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)

Ngược lại, MIN chọn nước đi ứng với giá trị MINIMAX cực tiểu
Thuật toán MIN-MAX
Hàm lượng giá

Value = 500 * Close2 + 1000* Open2 + 2000* Close3 + 3000* Open3
+ 4000 * Close4 + 5000*Open4 + 10000000000 *Close5
Đặc điểm

Tính hoàn chỉnh:

Có: Cây biểu diễn là hữu hạn

Tính tối ưu:


Có: 1 đối thủ luôn chọn nước đi tối ưu

Độ phức tạp về thời gian

O(b^m)

Độ phức tạp về bộ nhớ

O(bm).theo tìm kiếm sâu
Thuật toán cắt tỉa α-β

α là giá trị của 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

Nếu v là giá trị tồi hơn α, MAX sẽ bỏ qua nước đi ứng với v, Cắt tỉa 
nhánh ứng với v

β được định nghĩa tương tự đối với MIN
2. Thuật toán cắt tỉa alpha-beta

Ý 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!

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
Thuật toán Cắt tỉa α-β
Thuật toán Cắt tỉa α-β
Hạn chế thuật toán Cắt tỉa α-β


Đố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

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ài toán như Tri thức bổ sung (heuristic)
IV. Demo Chương trình

Chương trình được viết dưới ngôn ngữ Java và giao diện được thực hiện bằng
thư viện Java Swing

Trình biên dịch là NetBeans

Dưới đây là hình ảnh minh họa giao diện của chương trình:
CẢM ƠN CÁC BẠN ĐÃ LẮNG NGHE!

×