CCXiQi


Tìm hiểu về cẩm nang khai cuộc

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Bài gửi by Admin on Mon Jan 05, 2015 1:54 am

Tìm hiểu về cẩm nang khai cuộc

avatar
Admin
Administrator
Administrator

Tổng số bài gửi : 5122
Points : 8381
Reputation : 1353
Join date : 21/11/2014
Đến từ : Tp.HCM

Xem lý lịch thành viên http://ccxiqi.forumvi.com
Tìm hiểu về cẩm nang khai cuộc
Cẩm nang khai cuộc (hay còn gọi là opening book) là các dữ liệu về nước đi giúp chương trình cờ đi theo những nước đó (đi theo cẩm nang) mà không cần phải tính toán.
Như vậy cái lợi đầu tiên của dùng cẩm nang khai cuộc là gúp chương trình cờ tiết kiệm được thời gian tính toán. Thay cho phải mất nhiều giây thậm chí nhiều phút đồng hồ (tùy thuộc thời gian chơi) thì giờ đây chương trình chỉ cẩn bỏ ra một phần rất nhỏ của giây để tìm ra nước đã lưu trong cẩm nang và đi theo nước đó. Thời gian tiết kiệm được này một mặt gây áp lực tâm lý lên con người (nếu đối thủ là người) và còn dùng để tăng thời gian được phép tính toán cho những nước sau, giúp cho chương trình tính sâu hơn (chơi hay hơn).
Một lợi ích quan trọng nữa là cẩm nang giúp cải thiện chất lượng nước đi vì thông thường đây là những nước cực kỳ xâu xa và cao cờ (rất tốt cả về chiến thuật lẫn chiến lược). Để có được những nước đi như cẩm nang, các chương trình cờ phải tính sâu gấp nhiều lần độ sâu bình thường, cần thời gian tính toán gấp nhiều lần thời gian một nước thông thường.
Do những lợi ích trên người ta mong muốn các cẩm nang giúp chương trình cờ đi càng nhiều nước càng tốt, dù cho đối phương đi khai cuộc gì cũng được. Lý tưởng nhất là có cẩm nang cho toàn bộ mọi ván cờ. Tuy nhiên do cờ có số nước đi / thế cờ bùng nổ cực nhanh (xin xem bài Số thế cờ nhiều như số vì sao trên trời[You must be registered and logged in to see this link.]) từ thế cờ khởi đầu nên không thể có máy tính nào chứa hết được cẩm nang này (và cũng chẳng có cái máy tính nào tính nổi số nước đó) nên người ta chỉ lập được cẩm nang khai cuộc cho 5-15 nước khai cuộc ban đầu.
I. Các kiến thức chung về cẩn nang khai cuộc
Giai đoạn và độ dài
Được dùng khi bắt đầu một ván cờ. Thường nó kéo dài cỡ 5-15 nước. Đây là tập hợp các nước đi khai cuộc đã được chứng minh tốt từ xưa đến nay và qua nhiều ván cờ.
Lệch tủ / hết cẩm nang hay trượt cẩm nang (out of book)
Khi đối phương đi một nước mà không có trong dữ liệu cẩm nang khai cuộc, chương trình cờ sẽ không còn đi theo cẩm nang được nữa và phải bắt đầu tự tính toán. Khi đó nó được coi là hết cẩm nang hay trượt cẩm nang.
Thế nào là một cẩm nang tốt
Có nhiều tiêu chí để đánh giá một cẩm nang như kích thước, tốc độ. Nhưng nhìn về chất lượng có các đánh giá cơ bản như sau:

  • Càng bao phủ nhiều (rộng) khai cuộc càng tốt
  • Càng dài càng tốt
  • Dẫn dắt đến một thế cờ bên máy có lợi thế

Hai điều trên nhằm giúp máy đi càng nhiều nước càng tốt (vừa tiết kiệm thời gian vừa nâng cao chất lượng nước đi). Nhưng lại vô ích nếu không đạt được điểm 3 vì mục đích tối thượng cuối cùng là hơn quân, hơn thế và cuối cùng là thắng cờ.
II. Xây dựng cẩm nang khai cuộc
Để xây dựng cẩm nang có hai cách:

  • Xây dựng hoàn toàn thủ công: dựa trên các sách vở về khai cuộc, người ta sẽ nhập vào từng nước và tạo thành cẩm nang. Ưu điểm của cách này là chất lượng cẩm nang cực kỳ cao do sách vở thường đã tuyển chọn cẩm nang rất kỹ và người nhập cũng có thể thẩm định từng nước. Hơn nữa, người ta có thể thay đổi chương trình khiến cho cẩm nang và chương trình có thể hòa hợp với nhau ở mức cao nhất. Nhược điểm là quá tốn công và thường cẩm nang chỉ có kích thước rất nhỏ, không có độ phủ rộng nên dễ bị lệch cẩm nang.

Cẩm nang của chương trình CCW, Coffee Chinese Chess và VSCCP (đều download được tại [You must be registered and logged in to see this link.]) được xây dựng theo cách này. Chúng tôi xây dựng nó dựa chủ yếu vào quyển sách Cờ Tướng Khai cuộc cẩm nang (của nhóm tác giả Trần Tấn Mỹ, Lê Thiên Vị, Phạm Tấn Hoà, Quách Anh Tú). Nó khá nhỏ, chỉ có cỡ 200 khai cuộc mà thôi và độ bao phủ khá thấp nên rất dễ bị lệch cẩm nang.


  • Xây dựng cẩm nang tự động: Ngày nay việc sưu tầm và lưu trữ trong máy tính số lượng lớn ván cờ không còn gì khó khăn. Do vậy người ta đã tận dụng số lượng các ván cờ này để xây dựng tự động cẩm nang khai cuộc cho máy.

Ý tưởng khá đơn giản, lần lượt đọc từng ván cờ, rồi tổng hợp chúng lại và lưu trữ các ván cờ đó thành dạng cẩm nang cho chương trình cờ.
Phương pháp này có ưu điểm lớn là có thể tiến hành hoàn toàn tự động và có thể xây dựng được những cẩm nang rất lớn và có độ phủ rất rộng (nếu có thật nhiều các ván cờ). Do đó chương trình sẽ có lợi thế lớn nhờ khó trượt cẩm nang hơn. Tuy nhiên, nhược điểm lớn là nhiều khi lẫn cả các khai cuộc kém ("vàng thau" lẫn lộn) và khó điều khiển chất lượng của cẩm nang.
III. Cấu trúc của cẩm nang khai cuộc
(Các câu hỏi thường gặp: Book của chương trình cờ tướng có cấu trúc ra sao; Làm sao chuyển đổi book của chương trình A sang chương trình B)
Cách đơn giản nhất để lưu cẩm nang là lưu luôn chuỗi nước đi như dạng người ta vẫn thường đọc trên sách báo (dạng text). Chương trình cờ mẫu VSCCP lưu cẩm nang theo dạng này. Mỗi dòng thực chất là phần đầu của một ván cờ. Ưu điểm rất dễ thấy: con người có thể đọc hiểu và sửa đổi, thêm bớt rất dễ dàng. Nhược điểm cũng nhiều: chương trình phải diễn giải (chậm) từ các ký hiệu nước đi thành nước đi máy hiểu. Sự trùng lắp dữ liệu cũng rất lớn. Ví dụ nếu cẩm nang có hàng nghìn khai cuộc Thuận Pháo thì dòng nào cũng phải bắt đầu từ ký hiệu "P2.5 P8.5".
Do vậy phần lớn các chương trình cờ cao cấp thường lưu cẩm nang theo dạng cây (để tránh trùng lắp) và ở mã nhị phân (gọn và nhanh hơn nhiều).
Nói chung không có cấu trúc chung cho các cẩm nang dạng mã nhị phân. Thiết kế và lưu nó như thế nào là hoàn toàn tùy thuộc vào ý muốn và khả năng của người lập trình.
Với các chương trình cờ hiện đại, ví dụ như Saola, các thông tin cơ bản phải lưu thường là nước cờ hoặc một con số đại diện cho thế cờ (Saola dùng con số đại diện) và điểm giá trị của nước đi đó. Nhờ các nước đi (hoặc con số đại diện) các chương trình sẽ biết từ một thế cờ nào đó sẽ có những nước đi nào thuộc khai cuộc. Còn con số giá trị cho chương trinh biết nước khai cuộc nào nên đi, khai cuộc nào nên tránh (Ngoài ra người ta còn có thể lưu nhiều thông tin phụ khác).
Người lập trình thường coi cẩm nang là một phần của chương trình cờ mà nếu dữ liệu bị sai hỏng có thể làm chương trình đi sai hoặc không chạy nên người ta thường không muốn người khác can thiệp trực tiếp vào cấu trúc này. Do vậy người dùng không nên và cũng rất khó có thể can thiệp vào cấu trúc đó. (Ví dụ, với các chương trình lưu cẩm nang tương tự như Saola, bạn sẽ khó đoán biết mỗi một nước đi trong cần bao nhiêu byte để lưu, byte nào là con số đại diện, byte nào là con số giá trị, rồi con số đại diện đó nghĩa là gì, và làm sao từ bàn cờ nào đó tìm ra con số đại diện, dữ liệu được tổ chức trong một file ra sao...). Cũng vậy, việc chuyển đổi từ cẩm nang của một chương trình cờ này sang cẩm nang của một chương trình cờ khác cũng là việc bất khả thi, trừ khi các chương trình cờ này của cùng nhóm tác giả. (Các chương trình cờ khác nhau còn có thể có những thứ không tương đồng nên không thể chuyển đổi).


Hộp thoại cho phép nghiên cứu cẩm nang của Saola. Dữ liệu tổ chức có hình cây và kèm các thông tin như tên khai cuộc. Saola cho phép xem xét từng nước một cách trực quan (hiện bàn cờ minh họa). Cây cẩm nang rất lớn nên Saola để người dùng mở dần từng tầng


IV. Nâng cao chất lượng cẩm nang
Nhiều chương trình cờ ngày nay cho người dùng tự xây dựng lấy cẩm nang từ các ván cờ nên nhiều người đã quan tâm hơn đến việc làm sao nâng cao chất lượng của các cẩm nang tự xây dựng này.
Cần biết rằng việc xây dựng cẩm nang như thế nào là tùy thuộc vào từng chương trình, tức là phụ thuộc vào trình độ, quan điểm của tác giả và thường được coi là bí mật. Khả năng người dùng can thiệp vào chất lượng cẩm nang tuy có nhưng không nhiều lắm.
Chất lượng ván cờ
Điều dễ thấy là khi các chương trình cờ xây dựng cẩm nang khai cuộc từ các ván thực chiến thì chất lượng cẩm nang rõ ràng phụ thuộc vào các ván đó. Nếu đó là các ván đấu của các Đại kiện tướng thì cẩm nang sẽ gồm các nước đi chính xác và dài. Nhưng nếu đó chỉ là những ván đấu của người mới học cờ thì sẽ có rất nhiều nước đi "ngẫu nhiên", đi sai nhiều.
Khai cuộc và kết quả
Khi xử lý hàng ngàn ván cờ để làm khai cuộc, các chương trình xây dựng cẩm nang thường không tính toán để xem các nước đi là tốt hay xấu (vì nếu tính toán thì tốn quá nhiều thời gian – cần từ hàng tháng đến hàng năm). Do đó chúng phải căn cứ vào kết quả ván cờ để xem khai cuộc đó là tốt cho bên đi Tiên (bên Trắng) hay tốt cho bên đi Hậu. Nếu bên Tiên thắng cờ chương trình sẽ cộng cho mỗi nước đi của bên Tiên là một điểm thưởng nào đó, còn bên hậu là trừ. Còn nếu bên tiên thua cờ thì lại làm ngược lại (thường các chương trình bỏ qua các ván cờ hòa).
Như vậy lý tưởng nhất là ta có các ván cờ mà kết quả của chúng phản ánh chính xác chất lượng khai cuộc. Tỷ như cứ bên nào khai cuộc tốt thì bên đó thắng cờ, bên nào chọn khai cuộc kém thì thua cờ. Điều không may là các ván thực chiến lại không hoàn toàn như vậy. Có người khai cuộc tốt nhưng do chơi kém ở trung cuộc hoặc tàn cuộc mà dẫn đến thua cờ. Có ván khác người ta thua vì hết thời gian hoặc phạm luật nào đó chứ chẳng phải do cờ đang hơn hay kém thế. Các ván cờ này sẽ làm nhiễu loạn đáng kể kết quả cuối cùng.
Cách tốt nhất là ta thẩm định từng ván cờ và loại bỏ những ván khai cuộc-kết quả không tương đồng nhau. Tuy nhiên việc này đòi hỏi làm thủ công rất mất thời gian. Mặt khác với nhiều ván cờ trình độ cao đòi hỏi phải chuyên gia khai cuộc mới đủ sức thẩm định. Những khai cuộc bẫy cũng làm cho việc thẩm định rất khó khăn (ta tưởng đó là khai cuộc kém nhưng thực ra nó là bẫy và không hề kém).
Số lượng
Nếu ở phần trên mỗi một kết quả thắng hay thua giống như một lần bỏ phiếu trả lời có hoặc không cho các nước đi trong một khai cuộc. Chương trình phải dựa vào số lượng để xem có bao nhiêu phiếu có, bao nhiêu phiếu không. Căn cứ vào đó chương trình sẽ biết nên đi nước khai cuộc này hay nước khai cuộc kia. Ví dụ từ các ván cờ nó thấy số ván cờ đi khai cuộc Pháo đầu thắng nhiều hơn hẳn là lên Tượng đầu thì nó sẽ cho điểm nước Pháo đầu cao hơn nước lên Tượng, từ đó chương trình sẽ biết mà chọn Pháo đầu làm nước khai cuộc chủ yếu. Cũng vậy nếu nó thấy số ván đối phó Nghịch Pháo thua quá nhiều thì nó sẽ cho điểm rất thấp khiến chương trình gần như "cạch" nước khai cuộc đi này.
ooo
Thường cẩm nang xây dựng như trên sẽ là một dạng "trung bình tốt" do chọn nước theo số đông, tức là chương trình cờ khi dùng cẩm nang này sẽ chọn đi theo những khai cuộc "thông thường người ta hay dùng và thông thường là tốt" (ví dụ nước đầu tiên thường là Pháo đầu vì khai cuộc này có số ván thắng hơn đáng kể so với khai cuộc khác).
Ưu điểm của "chọn theo số đông" là ta không cần phải quá lo lắng khi trong tập hợp các ván cờ có các ván kém, có ván khai cuộc - kết quả không tương đồng (do số lượng các ván này không nhiều bằng các ván tốt và tương đồng). Người dùng cũng không cần có các kiến thức, hiểu biết đặc biệt và không cần phải bỏ công sức để kiểm tra hay phân loại các ván cờ này.
Nhược điểm là ta sẽ có các cẩm nang tuy lớn, có độ bao phủ rộng nhưng chất lượng chỉ "tầm tầm". Các nước khai cuộc tuy tốt đấy nhưng không có gì thật đặc sắc (do số lượng ít nên các nước đi đặc sắc, các khai cuộc bẫy dễ bị bỏ qua hoặc cho điểm thấp), dễ bị đoán biết nên dễ bị dẫn dắt và dễ sập bẫy các cao thủ.
V. Xây dựng cẩm nang đặc biệt, cẩm nang có bẫy
Ở phần này ta sẽ tìm hiểu cách xây dựng cẩm nang có "cá tính" hơn, đặc biệt hơn để tránh lối mòn.
Như trên nói, người dùng rất có ít cơ hội can thiệp được vào quá trình xây dựng cẩm nang. Việc đưa bẫy vào cẩm nang và khiến chương trình dẫn dắt theo bẫy này còn khó hơn nữa. Tuy nhiên ta cũng có một vài cách như sau:


  • Chia các ván cờ theo nhiều kiểu khai cuộc khác nhau. Khi cần xây dựng một khai cuộc đặc biệt nào đó, ví dụ nước đầu tiên nhất định phải là Tấn Tốt 3 hoặc 7 (Tiên nhân chỉ lộ) thì ta chỉ đưa các ván cờ có Tấn Tốt 3 hoặc 7 này thôi. Do không có các kiểu khai cuộc khác thì chương trình "đành" phải đi khai cuộc này.
  • Cũng vậy, nếu bình thường chương trình đang ghét đi nước đối Pháo nghịch (bên đi hậu) thì ta lại có thể bắt chương trình đó chọn đi Pháo nghịch bằng cách chỉ giữ lại những ván Pháo nghịch mà hậu thắng, xóa hết các ván thua đi.
  • Các khai cuộc bẫy thường rất khó bắt chương trình chọn đi theo vì số lượng rất ít (nếu nhiều người dùng thì không còn là bẫy), dù các nước đi có được thưởng cũng vẫn không hấp dẫn chương trình bằng các nước đi khác có tổng thưởng cao hơn. Một cách cải thiện là ta phải thêm thật nhiều các ván cờ có cùng khai cuộc bẫy vào. Cách đơn giản nhất là copy ván cờ bẫy đó thành nhiều bản. (Nhưng phải lưu ý rằng một số chương trình xây dựng cẩm nang có kiểm tra và tự động loại bỏ các ván cờ trùng nhau, khi đó ta phải tắt chức năng này. Còn nếu không ta nên sửa một vài nước cuối hoặc cắt bớt nước cái dài cái ngắn cho chúng khác nhau).

Bằng cách tạo ra một tập hợp các khai cuộc khác nhau như trên, ta có thể chủ động lúc dùng khai cuộc này, lúc dùng khai cuộc kia tùy ý thích.
Ngoài những cách trên, Saola đang thử nghiệm một công cụ dặc biệt cho phép người dùng xem và sửa đổi các trọng số của khai cuộc (nên dễ thay đổi cách chọn khai cuộc, dễ thêm bẫy...). Tuy nhiên nó còn một vài hạn chế và đỏi hỏi người dùng có hiểu biết lớn về khai cuộc nên nó không được phổ biến.
VI. Những vấn đề khác
Bắt đối phương (máy) lệch cẩm nang sớm
Nhằm giảm bớt lợi thế của chương trình đi theo cẩm nang, nhiều đấu thủ tìm cách đi những nước khai cuộc lạ, khiến chương trình bị hết cẩm nang và phải bắt buộc bắt đầu tính toán sớm. Cách này đòi hỏi đấu thủ đó phải có hiểu biết và chuẩn bị trước. Cái giá phải trả cũng không nhỏ: vì đi nước lạ đấu thủ đó cũng đã phải chọn một phương án khai cuộc khác thường, được thẩm định quá ít hoặc từng được coi là không nên đi. Do đó anh ta thường cũng phải trả giá đắt về nước đi này.
Vấn đề tương hợp giữa chương trình cờ và cẩm nang
Người dùng thường không biết đến vấn đề này. Người lập trình cũng ít khi mô tả công khai. Tuy nhiên đây lại là vấn đề ảnh hưởng không nhỏ đến kết quả.
Cũng giống như con người, các chương trình cờ cũng thường có "gu" chơi. Có chương trình chơi Pháo tốt hơn Mã, có chương trình chơi Mã giỏi hơn. Có chương trình tính toán giỏi với những thế cờ phức tạp, nhưng có chương trình lại giỏi tính với những thế cờ đơn giản hơn. Do khác nhau về "gu" hay trình độ, cùng một thế cờ thì có chương trình cho là Tiên ưu, cái khác cho là Hậu ưu. Lý tưởng nhất là sau giai đoạn khai cuộc các chương trình cờ được bắt đầu tính toán với những thế cờ mà nó "thích" chứ không phải thế cờ mà nó thấy bị mất ưu. Nếu để ý ta sẽ thấy thường gặp hiện tượng này: khi chương trình cờ vừa ra khỏi cẩm nang thì nước đầu tiên lại có điểm âm, mất ưu thế so với đối phương. Cũng có thể việc đó do đối phương dẫn đắt về một thế cờ họ ưu hơn, nhưng nhiều khi chỉ là do chương trình của ta không "thích" cái thế cờ "ưu" đó.
Hiểu được cái "gu" hay mặt mạnh, mặt yếu của các chương trình cờ trong giai đoạn khai cuộc rất khó. Nó đòi hỏi ta phải thường xuyên sử dụng, quan sát, so sánh... Qua mỗi phiên bản mới các chương trình cờ này lại có thể thay đổi. Nhưng việc chọn lọc các ván cờ rồi xây dựng cẩm nang cho hợp gu còn rất vất vả tốn nhiều công sức.
Làm sao bắt chương trình đi nước khai cuộc khác? Làm sao bắt chương trình ngừng đi theo cẩm nang và bắt đầu tính toán?
Vấn đề này phụ thuộc vào thiết kế chức năng của chương trình. Một số chương trình (như Saola) cho phép người dùng dễ dàng thay đổi nước đi khai cuộc hoặc ngừng đi theo khai cuộc và bắt đầu tính toán.
Các chương trình khác, đặc biệt là ở dạng Engine (dùng với XBoard) thì khó hơn nhiều do giới hạn của bạn thân XBoard và giới hạn lệnh giữa Engine và XBoard. Do không có cách chuẩn, bạn cần phải tự tìm tòi các thủ thuật, ví dụ như khi đến nước đã định thì tắt chương trình, thay cẩm nang khác hoặc xóa bỏ nó rồi khởi động lại chương trình cho đi tiếp.
Làm sao biết chương trình đang dùng cẩm nang
Nếu ở giai đoạn khai cuộc mà bạn thấy khi đến lượt mà chương trình đi ngay lập tức, không hiện bất cứ thông tin tính toán (thinking) như số nút, tốc độ... thì đó là chương trình đang đi theo cẩm nang.
Tôi có thể xây dựng cẩm nang tàn cuộc cùng phương pháp như cẩm nang khai cuộc được không?
Về nguyên tắc thì được nhưng trong thực tế không ai dùng do những lý do sau đây:

  • Có rất nhiều ván cờ kết thúc ở trung cuộc nên là chẳng thể lọc lấy tàn cuộc
  • Độ tản mát của các ván cờ tàn cuộc quá lớn. Hầu như bạn không thể tìm được hai ván cờ khác nhau mà cuối cùng lại có tàn cuộc giống hệt nhau. Hiếm hoi lắm, mới có được vài ván cờ hao hao nhau nhưng thực ra là khác nhau do vị trí các quân cờ không giống nhau. Ngoài ra còn có thể khác ở một vài quân "phụ" nữa như Sĩ, Tượng.
  • Hầu hết các ván cờ thực chiến không đi đến tận cùng, tức là chiếu hết. Chỉ cần đối phương đưa được về tàn cuộc thắng là người ta đã bỏ cờ chịu thua. Nếu lưu thế cờ tàn cuộc này và chương trình có may mắn gặp lại thì nó cũng chẳng có thông tin gì tiếp theo (không có nước đi tiếp theo). Nếu đấu thủ không buông cờ thì máy vẫn phải tính tiếp tìm nước đi mà thôi.

Do đó nếu xây dựng cẩm nang tàn cuộc từ các ván cờ (dù rất lớn) thì gần như bạn không thể "tra" ra bất cứ thế cờ nào. Cẩm nang này hoàn toàn vô ích với máy.
Thực tế, người ta không tạo cẩm nang tàn cuộc từ các ván đấu mà phải tự xây dựng lấy bằng những chương trình đặc biệt. Chúng tôi đã viết về việc này trong bài Nghiên cứu cờ tàn bằng máy tính.


| [You must be registered and logged in to see this link.] | [You must be registered and logged in to see this link.] | Hãy nhấn "Cảm Ơn" |
| Hãy Chia Sẻ Link Diễn Đàn CCXiQi và Mời Bạn Bè Tham Gia Tại CCXiQi |
Về Đầu Trang Go down
  • Trả lời chủ đề này

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


Permissions in this forum:
Bạn không có quyền trả lời bài viết