Move kinh nghiệm của con người và Move của PC mạnh:
Tại một move x của một game, hiện tại người chơi SW có 2 lựa chọn khả dĩ
1/ Đi theo biến kinh nghiệm của những người chơi cờ từ trước để lại
2/ Đi theo biến mới do PC mạnh tìm
Vậy biến nào mạnh hơn??
Xin mọi người cho biến ý kiến !!!!! Những bro hay bàn lùi xin miễn cho ý kiến![]()
Hi, BoongGoong và các bạn
Về vấn đề này BG nên tìm hiểu lại cuộc thi viết chương trình chơi cờ tướng trên tạp chí PC World Việt Nam (có thầy Phạm Hồng Nguyên - tác giả của Saola tham gia chấm thi) mấy năm về trước, BG có thể search trên mạng. Mình cũng quan tâm nên còn nhớ đôi chút, nếu BG không phiền mình xin giải thích một chút lý thuyết trước khi đưa ra nhận định.
Để viết chương trình đánh cờ hay các trò chơi đối kháng, thông thường người ta phải viết mã chương trình (coding) cho 4 phần chính sau:
- Thể hiện bàn cờ, quân cờ, giao diện ...
- Tạo nước đi một cách hợp lệ, theo luật lệ của game quy định
- Tìm kiếm các nước đi tối ưu (kỹ thuật seach)
- Lượng hóa giá trị của mỗi bên sau mỗi nước đi
Trong 4 phần trên thì hai phần sau quan trọng hơn cả, và đây là nhiệm vụ mà engine phải thực hiện.
Việc tìm kiếm dựa trên một hàm tìm kiếm theo thuật toán băm (hash) gọi là thuật toán AlphaBeta, tương tự hàm MiniMax trong toán học. Về bản chất nó dùng để loại bỏ các nhánh dư thừa trong cây tìm kiếm. Hai chữ Alpha và Beta để gọi tên hai giá trị chặn trên và chặn dưới trong quá trình duyệt cây:
Ví dụ khi engine tìm kiếm nước đi tối ưu trên bàn cờ (quá trình duyệt các node trên cây) thì có hai mức cần quan tâm là vị thế của mình khi đến lượt mình đi, và vị thế của đối thủ đi tiếp đó, khi đó:
Alpha: là giá trị chặn dưới của mình, tức là nước đi tối ưu đã search được và engine bao giờ cũng cố tìm nước đi lớn hơn giá trị Alpha này; và khi đến lượt đối thủ search thì đây lại là giá trị chặn trên của họ.
Beta: là chặn trên của mình. Điều quan trọng nhất là engine chỉ tìm những nước đi có giá trị nhỏ hơn beta thôi. Nếu tìm ra 1 nước đi có giá trị lớn hơn hoặc bằng Beta thì phải bỏ ngay. Lý luận thế này nhé, đến lượt đối thủ nếu họ cũng luôn đi những nước tối ưu thì họ sẽ tìm ra điểm chặn dưới của họ là Beta, khi đó mình đi thế nào đối thủ vẫn đi được đến giá trị Beta. Như vậy nếu rơi vào nhánh này thì prunning (cắt bỏ) ngay lập tức. Cứ đi theo nhánh đó là tự sát.
Tại mỗi nốt tìm kiếm, engine phải sử dụng một hàm lượng giá trạng thái để hỗ trợ cho quá trình tìm kiếm. Phương pháp là gán cho mỗi quân cờ một giá trị (như ông bà mình hay nói" Xe 10 Pháo 7 Ngựa 3"... ấy mà), và giá trị gán này là một trong những kỹ thuật làm cho engine này tốt hơn engine khác, ví dụ quân tốt khi chưa qua sông có điểm là 1 thì khi qua hà sẽ có điểm cao hơn, tốt ở biên có điểm thấp hơn tốt ở trung tâm ...
Vai trò của book là để phục vụ cho quá trình duyệt cây được nhanh hơn, tuy nhiên engine vẫn search toàn bộ các giá trị trong nhánh chứ không hoàn toàn phụ thuộc vào book, nếu tìm được Alpha lớn so với giá trị trong book là engine bỏ qua ngay. Đây là lý do nhiều người làm book hy vọng out book là qua mặt được software, no way!
Như vậy, tại mỗi vị trí FEN của các quân cờ, sw bao giờ cũng phải tính toán ra một giá trị tối ưu nhất cho FEN đó. Và kết luận là: nếu engine tốt, PC mạnh thì sw bao giờ cũng đưa ra các phương án tốt nhất; hiển nhiên là với tốc độ hàng triệu phép tính một giây thì con người khó mà đua tranh được. BG còn nhớ Hứa Ngân Xuyên còn thủ hòa được với máy tính trong khi Lữ Khâm và một số cao thủ khác đều thất thủ trước máy tính.
Dùng sw để phân tích, tìm những nước đi tối ưu, làm chủ kỹ thuật khai cuộc... đó là những gì mình làm với sw. Nếu BG bình tâm suy xét lại thì sẽ thấy việc BG cho máy tự chơi từ trong book để lấy ra games để làm book, với PC yếu, sw không bản quyền, phiên bản thấp ... nhất là can thiệp các giá trị lượng hóa và với quan điểm out book để hy vọng PC 1U đánh thắng nhiều U là hoàn toàn không hợp lý đâu.
Vài dòng chia sẻ, có gì không phải xin đừng trách nhé. Mình cũng mong diễn đàn có chất lượng và có thêm nhiều người tâm huyết như BG và các bạn ở trên này
khen nhà chuyên môn thì nói làm gì
dân lập trình chính hiệu đó :)