Người chơi chọn 1 ô dân không trống trong phần mình kiểm soát và lần lượt rải đều số sỏi dân có trong ô này vào các ô liên tiếp theo 1 trong 2 hướng và tìm cách ăn được nhiều sỏi nhấ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ÀI TẬP LỚN
MÔN TRÍ TUỆ NHÂN TẠO
ĐỀ TÀI
GAME Ô ĂN QUAN
Sinh viên thực hiện Lê Trọng Quân 20092115
Nguyễn Văn Phú 20092027 Nguyễn Ngọc Quang 20092088
Giáo viên hướng dẫn ThS Phạm Văn Hải
Hà Nội, tháng 08 năm 2013
Trang 2LỜI NÓI ĐẦU
Trí tuệ nhân tạo là một học thuyết tìm cách để máy tính có được trí tuệ của một phần não người Thông qua việc nghiên cứu của ngành khoa học này, khiến cho máy tính có được năng lực suy nghĩ, suy luận Máy tính có năng lực phán đoán logic cực nhanh và lượng ghi nhớ to lớn Cùng với sự phát triển của môn trí tuệ nhân tạo này, còn phải làm cho máy tính có được năng lực học tập gần với não người, khiến nó có thể ghi nhớ những bài học, tránh được cái sai lầm lặp lại,
từ đó mà có thể hoàn thành trọn vẹn nhiệm vụ mà con người giao cho,
và phát huy hết chức năng thần kỳ của nó Sau khi máy tính có được loại trí tuệ nào đó về một phương diện nào đó, con người vẫn cố gắng khiến nó có được các trí tuệ khác về các phương khác, trí tuệ nhân tạo
là một ngành không ngừng phát triển Sau khi học môn trí tuệ nhân tao, cá nhân em nói riêng và các thành viên trong nhóm nói chung cũng đã hiểu được nhiều điều mới mẻ từ môn học này Và chúng em
đã bắt tay xây dựng game dân gian “Ô ăn quan”để hiểu kỹ hơn về môn học
Trong quá trình làm bài tập lớn, chúng em xin chân thành cảm
ơn thầy Phạm Văn Hải đã tận tình hướng dẫn, cảm ơn các bạn đã đóng góp cho những ý kiến bổ ích Do chưa có kinh nghiệm và kiến thức còn hạn hẹp nên trò chơi chưa được như mong muốn Mong thầy
và các bạn góp ý để game được tốt hơn
Chúng em xin chân thành cảm ơn!
Trang 31. Giới thiệu bài toán
Trò chơi dân gian “Ô ăn quan”:
“Ô ăn quan” là một trò chơi dân gian Việt Nam Game có thể chơi
2 người, 3 người, hay 4 người Đề tài thực hiện game 2 người chơi
Trò chơi với 2 người chơi được bố trí: chia bàn chơi thành 2 bên, mỗi bên nắm giữ 5 ô (ao dân), mỗi ô 5 sỏi và được phép rải sỏi (dân) trên
5 ô này theo 1 trong 2 hướng Ngoài ra còn có 2 quan ở 2 đầu không có sỏi đại diện cho mỗi bên, tùy từng vùng miền mà việc tính toán quan như thế nào, có thể mỗi quan đại diện cho 1 số lượng dân (sỏi) nào đó hoặc không Ở đây, đề tài xây dựng với quan không đại diện cho dân
Luật chơi của trò chơi như sau: trò chơi chơi theo lượt Người chơi chọn 1 ô dân không trống trong phần mình kiểm soát và lần lượt rải đều
số sỏi (dân) có trong ô này vào các ô liên tiếp theo 1 trong 2 hướng và tìm cách ăn được nhiều sỏi nhất để đưa vào kho của mình Mỗi người chơi di chuyển số sỏi trong 1 ô dân xảy ra các trường hợp sau: Khi sỏi được rải hết mà ô tiếp theo của ô cuối cùng nhận sỏi rải:
- Là quan: dừng và kết thúc lượt đi nhường lượt đi cho người còn lại
- Là ô dân còn sỏi thì tiếp tục rải số sỏi trong ô này như bình thường
- Là ô dân mà không có sỏi: nếu ô tiếp theo của ô này không có sỏi thì kết thúc lượt đi; nếu ô tiếp theo có sỏi mà là ao dân thì được tính là ăn và xem xét tiếp ô tiếp theo như khi kết thúc lượt
đi để ăn; nếu ô tiếp theo có sỏi và là ô quan nếu trống thì kết
Trang 4thúc lượt đi, nếu có sỏi và chưa từng được ăn thì xem xét xem
số sỏi trong quan đủ nhiều hơn 5 thì ăn, ít hơn thì kết thúc lượt
đi, nếu ô quan có sỏi và đã được ăn thì thực hiện ăn bình thường như ô dân
Trò chơi kết thúc trong các trường hợp sau:
- Khi 2 quan đồng thời được ăn hết
- Khi các ô thuộc 1 bên nắm giữ hết sỏi mà trong kho của bên đó không đủ 5 sỏi để rải đều 5 ô của mình
- Người thắng là người có nhiều sỏi trong kho hơn đối phương
2. Công nghệ sử dụng
- Ngôn ngữ lập trình: java
- IDE: eclipse
3. Chiến lược tìm kiếm
4.1 Phân tích bài toán
Trong lượt đi của mình, người chơi cố gắng tìm nước đi tốt nhất
là nước đi để ăn được thật nhiều sỏi và bất lợi cho đối phương nhất, hướng trò chơi đến kết thúc chiến thắng thuộc về mình
Ở chế độ người chơi với máy tính: Máy tính cần tìm ra nước đi tốt nhất để giành chiến thắng khi trò chơi kết thúc Mỗi nước đi, máy sẽ lựa chọn nước đi có lợi cho mình nhất: ăn được nhiều sỏi nhất còn người chơi ở lượt tiếp theo ăn được ít sỏi nhất
Vấn đề đặt ra là xây dựng một hàm lượng giá để máy tính dựa vào đó tính toán giá trị mỗi nước đi và xây dựng giải thuật tìm kiếm để tìm được nước đi tốt nhất trong số các nước đi với giá trị mỗi nước đã tính được theo hàm lượng giá
4.2 Cây trò chơi
Trong quá trình chơi, trạng thái của bàn cờ được thay đổi liên tục bởi một nước đi của 1 trong 2 bên Ta có thể biểu diễn các trạng thái này dưới dạng 1 cây tìm kiếm (gọi là cây trò chơi) Trong đó, mỗi nút tương ứng với một trạng thái bàn chơi
4.3 Giải thuật Minimax
Trang 5Minimax (còn gọi là minmax) là một phương pháp trong lý thuyết quyết định có mục đích là tối thiểu hóa (minimize) tổn thất vốn được dự tính có thể là
"tối đa" (maximize) Có thể hiểu ngược lại là, nó
nhằm tối đa hóa lợi ích vốn được dự tính là tối
thiểu (maximin) Nó bắt nguồn từ trò chơi có tổng bằng không
Nó cũng được mở rộng cho nhiều trò chơi phức tạp hơn và giúp đưa ra các quyết định chung khi có sự hiện diện của sự không chắc chắn Minimax thường dùng để giải quyết những trò chơi có tính chất đối kháng
Trong trò chơi đối kháng, một bên được coi là Max, một bên được coi là Min Max có mục tiêu làm cho tối đa lợi thế của mình,
Min có mục tiêu là tối thiểu lợi thế của Max
Chiến lược lựa chọn của Max bị ảnh hưởng vào các nước đi của Min và ngược lại Do đó 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ả định Min sẽ chọn được nước
đi tối ưu Chiến lược này được xác định bằng việc xét giá trị
Minimax đối với mỗi nút trong cây biểu diễn trò chơi
Hình 1: Cây trò chơi Min-max
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) Min chọn nước đi ứng với giá trị Minimax cực tiểu (để đạt được giá trị cực tiểu của hàm mục tiêu)
Trang 6Các nút lá được gán các giá trị đã được lượng giá Giá trị tại các nut nhận được dựa trên giải thuật Minimax
Giải thuật Minimax
Hình 2: Giải thuật Minimax Minimax có thể chọn được nước đi tốt nhất theo hàm mục tiêu nếu hàm lượng giá là tốt nhất Tuy nhiên, Minimax gặp phải một vấn đề đó là không gian tìm kiếm bùng nổ với hàm mũ khi độ sâu tăng dần bởi với Minimax ta cần thực hiện chiến lược tìm kiếm vét cạn Để giải quyết vấn đề này cần tìm kiếm phương pháp cắt bớt các nhánh tìm kiếm không cải thiện được kết quả
Trang 74.4 Giải thuật 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 giá trị của 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 nhánh tìm kiếm tồi không ảnh hưởng tới kết quả cuối cùng của hàm tiện ích
Giải thuật cắt tỉa:
Hình 3: Giải thuật cắt tỉa Alpha – beta
Trang 8Ví dụ:
Hình 4: Alpha-beta cắt tỉa Giải thuật cắt tỉa Alpha – beta giảm được nhiều nhánh tìm kiếm tồi , giúp tăng tốc tìm kiếm và tăng độ sâu tìm kiếm, từ đó giá trị của hàm tiện ích Trong đó:
- Alpha là nước đi được hàm tiện ích đánh giá là tốt nhất đối với MAX (giá trị tối đa) tính tới hiện tại với nhánh tìm kiếm Nếu v là nước đi tồi (không cải thiện) thì MAX
sẽ bỏ qua nước đi tương ứng đối với v
- Beta được định nghĩa tương tự đối với v
Đối với không gian trò chơi lớn thì phương pháp cắt tỉa Alpha – beta vẫn không phù hợp vì sau cắt tỉa các nhánh tìm kiếm vẫn lớn với độ sâu tăng dần
Để cải thiện tốt nhất hàm tiềm kiếm cần sử dụng tri thức bổ sung đóng vai trò tương tự hàm ước lượng trong tìm kiếm với A*
Trang 94. Kĩ thuật lượng giá
Hàm lượng giá là quan trọng nhất đối với giải thuật Minimax nói chung và giải thuật cắt tỉa Alpha – beta nói riêng Lượng giá tốt thì giá trị hàm tiện ích trả về càng chuẩn, việc cắt tỉa được thực hiện sớm giúp giảm được nhiều chi phí tìm kiếm
Trong trò chơi “Ô ăn quan” mấu chốt của chiến thắng là việc bên nào ăn được nhiều sỏi hơn Hàm lượng giá được xây dựng sẽ bám theo hướng đi này: Sau mỗi nước đi thử, xác định xem bên nào có lợi hơn bằng việc xác định số sỏi ăn được của mình và đối phương tại mỗi lượt đi
Vậy hàm lượng giá sẽ xác định như sau:
• Utility(n) = Eval-Max(n) – Eval-Min(n)
Trong đó:
Utility(n) là giá trị hàm tiện ích trả về với lựa chọn
n, độ sâu tìm kiếm m
Eval-Max(n): số sỏi thu được của MAX sau m bước
Eval-Min(n): số sỏi thu được của MIN sau m bước
Cụ thể hàm lượng giá tính như sau:
- Số sỏi ăn được của MAX sau mỗi lượt đi được đưa vào Eval-Max(n)
- Số sỏi ăn được của MIN sau mỗi lượt đi của MIN được đưa vào Eval-Min(n)
- Sau khi kết thúc m nước đi, tính giá trị Utility(n) của lựa chọn n là hiệu số giá trị Eval-Max(n) và Eval-Min(n) Tùy theo độ sâu cụ thể mà giá trị của Utility(n) nhận được sẽ tốt tới mức nào bởi lẽ những nước đi trước đó MAX ăn được nhiều hơn MIN nhưng không chắc rằng sau nước đi ở độ sâu cuối cùng được duyệt MIN có ăn được nhiều hơn MAX hay không và ngược lại Do đó, độ sâu càng lớn thì giá trị hàm tiện ích càng tốt
5. Khó khăn gặp phải
Trang 10Khi xây dựng trò chơi “Ô ăn quan” có những vướng mắc cả về khách quan và chủ quan không tránh khỏi
Thời gian xây dựng chương trình ít chưa đủ để đi sâu tìm ra những cách lượng giá tốt hơn cho trò chơi Về mặt giao diện: trò chơi chưa
có được giao diện tốt phục vụ đưa sản phẩm thành sản phẩm kinh doanh và phục vụ người dùng
6. Hướng cải tiến và phát triển
- Xây dựng trò chơi đa dạng về luật chơi hơn, phù hợp với từng vùng miền
- Cải tiến hàm lượng giá giúp nâng cao sự thông minh của máy
- Đưa sản phẩm thành sản phẩm thương mại hóa
7. Tài liệu tham khảo
1. Slide bài giảng thầy Phạm Văn Hải
2. Slide bài giảng thầy Nguyễn Nhật Quang
3. Computer Science Game Trees -
http://www.ocf.berkeley.edu/~yosenl/extras/alphabeta/alphabeta.html
8. Hướng dẫn cài đặt code và sử dụng ở file read