Đăng nhập

View Full Version : Cho mình hỏi về lập trình engine chơi cờ với



mikgnort
04-03-2013, 11:21 PM
Chào các bạn.
Mình thấy trong diễn đàn cũng có nhiều cao thủ IT nên muốn tham khảo thêm ít kiến thức về thuật toán để máy đánh cờ với người.
Hiện mình đang làm đồ án chơi cờ tướng. Phần AI của mình hiện tại đang sử dụng thuật toán Negascout (lúc đầu là alphabeta mà nó chạy lâu quá, tuy nhiên theo mình thấy thì negascout có vài nước đi không bằng alphabeta dù thời gian tốt hơn). Các hỗ trợ là mảng pieceValue lưu giá trị "cứng" của 7 quân cờ, 14 mảng positionValue lưu giá trị tại vị trí [x,y] trên bàn cờ của từng loại quân cờ, lớp openingValue chứa thông tin đánh giá thế cờ trong khai cuộc (hiện mình chỉ đánh giá cao thế pháo đầu và bình phong mã). Ngoài ra còn có bàng hoán vị (Transposition Table) để khỏi tính lại vài giá trị (mình dùng Dictionary trong C#)
---------
Qua test thử vài đối thử (trình cũng tạm) thì đánh cũng khá, có những nước đi khó, thí quân hợp lý. Tuy nhiên, vấn đề của mình là độ sâu và thời gian xử lý. Máy mình đang xài là CP5 core i5 thế hệ 3 4 cores. Ở độ sâu 4 máy phải mất trung bình 3 - 10 giây để đi, nước nào lâu thì phải tới gần 1 phút. Còn độ sâu 5 thì là một thảm họa.
Mình muốn hỏi là có cách nào để cải thiện thuật toán của mình không (vì mình thấy các bạn toàn chơi độ sâu 11-12 @@), các bạn có thể chia sẻ thêm? Ngoài ra mình cũng muốn hỏi thêm về book - cấu trúc và cách sử dụng? Theo mình hiểu thì book là các ván đấu được nạp vào để máy đánh, ko bik đúng không ...

Mong được mọi người chỉ giáo, chân thành cảm ơn ^^

that's why
05-03-2013, 12:47 AM
vấn đề này khó đấy, ko phải những cao thủ IT đâu, mà phải là người tìm hiểu sâu về AI mới có thể giúp bạn đc :D
m` chưa đọc thuật toán negascout nhưng nếu chip core i5 với độ sâu là 4 mà mất nhiều thời gian vậy thì... :(
tìm thêm open source để xem thôi bạn ah :)

mikgnort
06-03-2013, 05:17 PM
mình cũng ko bik sao mất nhiều ghời gian vậy nữa. Hàm lượng giá cũng đơn giản (duyệt 32 quân cờ), mình để autoPlay cho backgroundWorker làm việc mà vẫn 10 giây.
Negascout thì là alphabeta cải tiến, nhanh hơn tí.
Bạn có open source nào không, share mình với

mikgnort
07-03-2013, 01:05 PM
ai help mình với ^^"

chezz
09-03-2013, 09:09 PM
Để tính sâu em nên tìm đọc các kỹ thuật sau:

1) null move
2) move order

Tìm hiểu về cẩm nang khai cuộc nên đọc bài này trước:

ChessFriends - Tìm hiểu về cẩm nang khai cuộc (http://xqfan.com/vn/index.php?cid=17&id=607)

mikgnort
21-03-2013, 10:51 AM
Để tính sâu em nên tìm đọc các kỹ thuật sau:

1) null move
2) move order

Tìm hiểu về cẩm nang khai cuộc nên đọc bài này trước:

ChessFriends - Tìm hiểu về cẩm nang khai cuộc (http://xqfan.com/vn/index.php?cid=17&id=607)

Còn cái move order là sắp xếp các nước đi để đi nước tốt nhất trước phải không bạn? Mình search google thì hok thấy tài liệu gì hết :(

chezz
26-03-2013, 08:51 AM
Còn cái move order là sắp xếp các nước đi để đi nước tốt nhất trước phải không bạn? Mình search google thì hok thấy tài liệu gì hết :(


Tài liệu có rất nhiều. Có thể bắt đầu từ đây:

http://chessprogramming.wikispaces.com/Move+Ordering