Tải bản đầy đủ (.docx) (10 trang)

game ô ăn quan sử dụng 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 (310.47 KB, 10 trang )

TRƯỜ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
Phạm Đăng Đô 20090749
Vũ Minh Nhật 20091970
Lê Thanh Tùng 20093101
Nhóm 09
Giáo viên hướng dẫn ThS. Phạm Văn Hải
Hà Nội, tháng 08 năm 2013
LỜ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!
1. 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
thú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
Minimax (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).
Cá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ả.
4.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
Ví 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*
4. 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
Khi 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 -
/>8. Hướng dẫn cài đặt code và sử dụng ở file read

×