thực hiện sự khác biệt theo thời gian trong cờ vua


10

Tôi đã phát triển một chương trình cờ vua sử dụng thuật toán cắt tỉa alpha-beta và chức năng đánh giá để đánh giá các vị trí bằng các tính năng sau đây là vật liệu, an toàn vua, di động, cấu trúc cầm đồ và các mảnh bị mắc kẹt, v.v ... Chức năng đánh giá của tôi là được chuyển hóa từ

f(p)= =w1vật chất+w2vua an toàn+w3di động+w4cấu trúc cầm đồ+w5mảnh bị mắc kẹt

Trong đó là trọng lượng được gán cho từng tính năng. Tại thời điểm này, tôi muốn điều chỉnh trọng số của hàm đánh giá của mình bằng cách sử dụng sự khác biệt theo thời gian, trong đó tác nhân tự chống lại chính mình và trong quá trình thu thập dữ liệu đào tạo từ môi trường của nó (là một hình thức học tập củng cố). Tôi đã đọc một số sách và bài viết để có cái nhìn sâu sắc về cách triển khai điều này trong Java nhưng chúng dường như chỉ mang tính lý thuyết hơn là thực tế. Tôi cần một lời giải thích chi tiết và mã giả về cách tự động điều chỉnh trọng số của chức năng đánh giá của tôi dựa trên các trò chơi trước đó.w

Câu trả lời:


4

Tôi khuyên mọi người quan tâm đến chủ đề này hãy xem bài báo kết hợp TDL và tìm hiểu sâu.

Một cách thô bạo, bạn sẽ cần làm cho động cơ chơi trò chơi với nhau. Ghi lại đánh giá mini-max cho từng vị trí. Vào cuối trò chơi, bạn sẽ nhận được phần thưởng là {0,1, -1} cho cờ vua. Sau đó, bạn sẽ cần điều chỉnh các tham số của mình với:

nhập mô tả hình ảnh ở đây

Phương trình này cho chúng ta biết chúng ta nên điều chỉnh các trọng số theo sự khác biệt theo thời gian, được cân nhắc bởi khoảng cách bạn nên làm. Nếu bạn có một đánh giá hoàn hảo, sự khác biệt tạm thời của bạn sẽ luôn bằng không, do đó bạn sẽ không cần thực hiện bất kỳ điều chỉnh nào.

Tiếp theo, bạn sẽ cần sử dụng các tham số mới để chơi một trò chơi mới. Lặp lại cho đến khi nhiều trò chơi bạn có thể đủ khả năng hoặc khi bạn nghĩ rằng nó hội tụ.

Vài nhận xét:

  1. Giấy tôi trích dẫn áp dụng một yếu tố giảm giá. Nó được thực hiện cho thuật toán backproportion cho mạng thần kinh. Bạn không cần nó.
  2. Bạn sẽ cần thử nghiệm với tỷ lệ học tập tối ưu (alpha trong phương trình). Quá lớn sẽ làm cho việc học của bạn không ổn định, quá ít sẽ mất nhiều thời gian hơn để hội tụ. Tôi đã thấy mọi người sử dụng 0,70. Giấy tôi trích dẫn sử dụng 1.0.

Xin chào, tôi thích câu trả lời của bạn nhưng bạn có thể vui lòng sửa liên kết đến bài viết không?
padura

@padura Đã sửa. Xin hãy đọc. Đó là một đọc tốt cho khoa học dữ liệu.
HelloWorld

(+1) Câu trả lời tuyệt vời. Cũng thích tờ giấy này :)
Dawny33

Đó là một bài viết tuyệt vời, xấu hổ vì tôi đã không biết điều này vào thời điểm tôi đang làm việc trên công cụ cờ vua của riêng mình;) Tôi tự hỏi liệu chúng ta có thể cải thiện bằng cách kết hợp với kỹ thuật này không: bjmc.lu.lv/fileadmin/user_upload/lu_portal/ projekti / bjmc / Nhận
padura 18/2/2016

2

Một nhận xét đầu tiên, bạn nên xem 'Wargames' để biết bạn đang làm gì.

Những gì bạn muốn là f (p) sao cho f (p) càng gần càng tốt với sức mạnh của vị trí.

Một giải pháp rất đơn giản sử dụng thuật toán di truyền sẽ là thiết lập 10000 người chơi với các trọng lượng khác nhau và xem chiến thắng nào. Sau đó giữ trọng lượng 1000 người chiến thắng hàng đầu, sao chép chúng 10 lần, thay đổi chúng một chút để khám phá không gian trọng lượng và chạy lại mô phỏng. Đó là GA tiêu chuẩn, được cung cấp một dạng chức năng, các hệ số tốt nhất cho nó là gì.

Một giải pháp khác là trích xuất các vị trí, do đó bạn có một bảng '(vật liệu, an toàn, di động, cấu trúc cầm đồ, bẫy) -> độ tốt của vị trí' trong đó độ tốt của vị trí là một số yếu tố khách quan (kết quả thắng / thua được tính toán bằng cách sử dụng mô phỏng ở trên hoặc các trận đấu đã biết, độ sâu của cây có sẵn, số lần di chuyển dưới gốc cây trong đó một trong 5 yếu tố trở nên tốt hơn. Sau đó, bạn có thể thử các hình thức chức năng khác nhau cho f (p), hồi quy, svm của mình.


Điều này không có ý nghĩa gì.
HelloWorld
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.