Professional Documents
Culture Documents
- Phạm Hoàng Hà
- Mai Đức Khiêm
- Nguyễn Thanh Loan
- Hoàng Quyết Tiến
Nộ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 Computer
4. Lập trình
Computer Player vs Human Player
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
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
Cờ 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.
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).
Lập trình Computer player
Đi thử
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
• 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.
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.
Minimax
Mô tả :
Coding
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
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.
- 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).
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.
Anpha – Beta Pruning
- Triển khai định giá theo mức (độ sâu) ply ???