Giới thiệu trò chơi cờ úp: Cờ úp là một biến thể của trò chơi cờ Tướng, sử dụng bàn cờ và các quân giống trong cờ Tướng.. Trong trò chơi này, tại thời điểm bắt đầu, các quân cờ mỗi bên t
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
Báo cáo
Trò chơi cờ úp trên nền android sử dụng
thuật toán Alpha-Beta cắt tỉa
Đinh Minh Quốc 20092156 Nguyễn Quốc Vinh 20093277
Lê Thanh Tùng 20093106 Ngô Việt Linh 20091599 Trần Thanh Sơn 20092281
Hà Nội 07/2013
Trang 2M c l c ục lục ục lục
I Đặt vấn đề bài toán 3
1 Giới thiệu trò chơi cờ úp: 3
2 Mục tiêu của bài toán 4
3 Mô tả không gian trạng thái của bài toán 4
II Phương pháp giải quyết 4
1 Giới thiệu thuật toán 4
1.1 Thuật toán MINIMAX: 4
1.2 Thuật toán Alpha-Beta cắt tỉa 5
2 Hàm chi phí 7
III Cài đặt chương trình 8
IV Đánh giá chương trình 9
Trang 3I Đặt vấn đề bài toán
1 Giới thiệu trò chơi cờ úp:
Cờ úp là một biến thể của trò chơi cờ Tướng, sử dụng bàn
cờ và các quân giống trong cờ Tướng Trong trò chơi này, tại thời điểm bắt đầu, các quân cờ mỗi bên trên bàn sẽ được úp xuống một cách ngẫu nhiên Nước đi đầu tiên của cờ úp phải tuân theo luật đi của cờ tướng tại vị trí nó đang chiếm giữ Sau nước đầu, các quân cờ được lật lại và từ nước này, quân cờ sẽ đi theo luật của cờ Tướng thông thường
Luật đi các quân cờ
trong phạm vi cung."Cung" gồm 4 hình vuông nhỏ được gạch đường chéo
như Tướng
không được phép qua sông sang bàn cờ của đối phương.Nước
đi của Tượng không hợp lệ khi có quân cờ chặn giữa đường
cản trên đường đi
1 ô) cho mỗi nước đi.Nếu có quân khác nằm cạnh mã và cản đường ngang 2 hoặc cản đường dọc 2, thì mã không được đi đường đó
Pháo muốn ăn quân của đối phương thì giữa Pháo và quân muốn ăn phải có quân cản ở giữa
đi thẳng tiến Khi đã vượt qua sông có thể đi ngang hoặc đi thẳng tiến, mỗi nước một ô
Một số ngoại lệ của cờ úp:
Quân sĩ không bị giới hạn trong cung mà có thể đi khắp bàn cờ
Quân tượng có thể sang lãnh thổ đối phương
Trang 4 Quân tốt có thể xuất phát từ dưới đường biên ngang bên sân nhà, khi qua sông được đi ngang
Kết thúc trận đấu:
không còn khả năng đỡ Bên chiếu tướng thắng
hợp lệ để đi, bên đó sẽ bị thua
chơi
chơi được xử hòa
2 Mục tiêu của bài toán
Xây dựng ứng dụng mô phỏng trò chơi cờ úp giữa người với máy, người với người trên nền tảng điện thoại android
3 Mô tả không gian trạng thái của bài toán
Trạng thái đầu: Là trạng thái của bàn cờ tại thời điểm bắt đầu cuộc chơi Trạng thái được thể hiện ở hình dưới Với trò chơi này, mỗi trạng thái ban đầu được sinh ngẫu nhiên từ 2.17! khả năng
Trạng thái đích: Là trạng thái mà một trong hai quân tướng của hai bên bị ăn mất hoặc quân tướng không còn nước đi hợp lệ Khi đó, bên còn lại là người thắng cuộc
Trạng thái trung gian: Là trạng thái hợp lệ của bàn cờ tại một thời điểm bất kỳ trong một ván đấu
Các cạnh nối: Trạng thái bàn cờ tại mức i và mức (i+1) có cạnh nối với nhau nếu trạng thái mức (i+1) được sinh ra từ trạng thái mức I bằng cách di chuyển một quân cờ trên bàn theo một bước đi hợp lệ của nó
1 Giới thiệu thuật toán
1.1 Thuật toán MINIMAX :
Đây là thuật toán thường được sử dụng trong các trò chơi đối kháng hai bên Giả sử mỗi trạng thái của bàn cở được gắn một giá trị cụ thể Người chơi Max sẽ chọn nước
đi dẫn đến điểm của mình lớn hơn, trong khi Min sẽ tìm các nước đi để điểm của mình nhỏ đi Các giá trị điểm của
Trang 5trạng thái bàn cờ được xác định thông qua hàm lượng giá của trò chơi
Ví dụ về thuật toán MINIMAX:
Xét một cây như hình vẽ, tại thời điểm ban đầu, Max chọn nút có giá trị 3 Đến lượt đi của Min, Min sẽ chọn nút hoặc có giá trị bằng 2 Đến lượt đi của Max, Max sẽ chọn nút (có giá trị bằng 6) hoặc nút (có giá trị bằng 14) tương ứng
1.2 Thuật toán Alpha-Beta cắt tỉa
Mặc dù thuật toán MINIMAX hiệu quả cho các trò chơi đối kháng, tuy nhiên thuật toán này sẽ rất chậm nếu cây tìm kiếm là lớn và không hiệu quả trong thực tế Đặc biệt là với bài toán trò chơi cờ úp, mặc dù tại thời điểm bắt đầu, số nút con chỉ là 44 Nhưng từ mức thứ hai trở đi, số nút con sinh ra sau mỗi trạng thái là rất nhiều Vì thế nếu chỉ dùng MINIMAX thì thời gian chạy khá lâu Thuật toán Alpha-Beta cắt tỉa là một cải tiến dựa trên MINIMAX cho phép ta dự đoán những nhánh cây không chứa kết quả và loại bỏ nhánh đấy để làm giảm số lượng nút phải sinh và lượng giá, do đó làm tăng độ sâu cây tìm kiếm
Ý tưởng của tìm kiếm alpha – beta rất đơn giản: Thay vì nếu như tìm kiếm toàn bộ không gian đến một độ
Trang 6sâu lớp cố định, tìm kiếm alpha – beta thực hiện theo kiểu tìm kiếm sâu Có hai giá trị, gọi là alpha và beta được tạo
ra trong quá trình tìm kiếm Giá trị alpha liên quan với các nút MAX và có khuynh hướng không bao giờ giảm Ngược lại giá trị beta liên quan đến các nút MIN và có khuynh hướng không bao giờ tăng Giả sử có giá trị alpha của một nút MAX là 6, MAX không cần phải xem xét giá trị truyền ngược nào nhỏ hơn hoặc bằng 6 có liên quan với một nút MIN nào đó bên dưới Alpha là giá trị thấp nhất
mà MAX có thể nhận được sau khi cho rằng MIN cũng sẽ nhận giá trị tốt nhất của nó Tương tự nếu MIN có giá trị beta là 6 nó cũng không cần xem xét các nút nằm dưới nó
có giá trị lớn hơn hoặc bằng 6
Để bắt đầu thuật toán tìm kiếm alpha – beta, ta đi xuống hết độ sâu lớp theo kiểu tìm kiếm sâu, đồng thời áp dụng đánh giá heuristic cho một trạng thái và tất cả các trạng thái anh em của nó Giả thuyết tất cả đều là nút MIN Giá trị tối đa của các nút MIN này sẽ được truyền ngược lên cho nút cha mẹ (là một nút MAX) Sau đó giá trị này được gán cho ông bà của các nút MIN như là một giá trị beta kết thúc tốt nhất Tiếp theo thuật toán này sẽ đi xuống các nút cháu khác và kết thúc việc tìm kiếm đối với nút cha mẹ của chúng nếu gặp bất kỳ một giá trị nào lớn hơn hoặc bằng giá trị beta này Quá trình này gọi là cắt tỉa beta (β cut) Cách làm tương tự cũng được thực hiện cho việc cắt tỉa alpha (α cut) đối với các nút cháu của một nút MAX
Hai luật cắt tỉa dựa trên các giá trị alpha và beta là:
o Quá trình tìm kiếm có thể kết thúc bên dưới một nút MIN nào có giá trị beta nhỏ hơn hoặc bằng giá trị alpha của một nút cha MAX bất kỳ của nó
o Quá trình tìm kiếm có thể kết thúc bên dưới một nút MAX nào có giá trị alpha lớn hơn hoặc bằng giá trị beta của một nút cha MIN bất kỳ của nó
Việc cắt tỉa alpha – beta như vậy thể hiện quan hệ giữa các nút ở lớp n và các nút ở lớp n+2 và do quan hệ đó toàn
bộ các cây con bắt nguồn ở lớp n+1 đều có thể loại khỏi
Trang 7việc xem xét Chú ý rằng giá trị truyền ngược thu được hoàn toàn giống như kết quả Minimax, đồng thời tiết kiệm được các bước tìm kiếm một cách đáng kể
Thuật toán được mô tả qua mã giả sau
2 Hàm chi phí
Hàm chi phí của trò chơi tại mỗi trạng thái được đánh giá dựa trên ba yếu tố
Tổng điểm quân đỏ (người chơi Max)
Tổng điểm quân đen (người chơi Min)
Điểm thưởng
Công thức tổng quát của hàm lượng giá
Trong đó:
f(x): Điểm số của quân x trên bàn cờ Nếu quân cờ x ở trạng thái úp thì f(x)= diemTrangThaiUp Nếu quân cờ ở trạng thái lật thì f(x)= diemTrangThaiLat+ diemViTri Nếu quân cờ đã
bị ăn thì f(x)=0 Dưới đây là điểm của từng loại quân với các trạng thái tương ứng
STT Quân cờ Trạng thái úp Trạng thái lật
Trang 82 Sĩ 20 35
diemViTri của mỗi loại quân được biểu diễn qua một ma trận thể hiện điểm của từng loại quân trên mỗi vị trí của bàn cờ
VD: Điểm vị trí của quân xe
là điểm thưởng của phe đỏ và phe đen cho một thế
cờ tốt được sinh ra trên bàn cờ
− Khi bên đen bị khuyết sĩ mà bên đỏ vẫn còn 2 xe thì bên
đỏ được cộng điểm
− Khi tốt sang sông được cộng điểm
− …
Chương trình được cài đặt trên các máy chạy hệ điều hành android thông qua file apk
Giao diện của chương trình
Trang 9Bắt đầu ván chơi
Kết thúc ván chơi
Trang 10IV Đánh giá chương trình
Chương trình mô phỏng thành công trò chơi cờ úp trên nền android
Trong tương lai, sẽ cải tiến thêm các mức độ khó vào trong trò chơi