Những mô hình để sử dụng để viết động cơ cờ vua?


9

Nếu bạn định viết một công cụ trò chơi cờ vua, bạn sẽ sử dụng mô hình lập trình nào (OOP, thủ tục, v.v.) và tại sao bạn chọn nó? Theo công cụ cờ vua, ý tôi là phần của chương trình đánh giá bàn cờ hiện tại và quyết định bước đi tiếp theo của máy tính.

Tôi đang hỏi bởi vì tôi nghĩ có thể rất vui khi viết một động cơ cờ vua. Sau đó, tôi nhận ra rằng tôi có thể sử dụng nó như một dự án để học lập trình chức năng. Sau đó, tôi nhận thấy rằng một số vấn đề không phù hợp với mô hình chức năng. Sau đó, nó xảy ra với tôi rằng đây có thể là thức ăn gia súc thảo luận tốt.


1
Điều này giống như viết một trình biên dịch C từ đầu. Tôi sẽ không phát minh lại bánh xe. Tôi sẽ nghiên cứu những cái hiện có trước.
Công việc

10
@Job: Mục tiêu của tôi là quá trình chứ không phải là kết quả. Ngay cả khi tôi kết thúc với một công cụ rất tệ, tôi nghĩ rằng có thể có giá trị trong quá trình phân tích vấn đề và phát triển một cách để tấn công nó, đặc biệt là nếu tôi học được một số phương pháp lập trình mới trong quy trình.
chọc

1
Chúc may mắn. Không có nhà tuyển dụng thực sự nào sẽ yêu cầu bạn phát triển một từ đầu, nhưng trong một cuộc phỏng vấn họ có thể hỏi bạn sẽ tấn công vấn đề như thế nào.
Công việc

6
@Job một phần lớn trong cuộc sống lập trình là mã hóa mọi thứ không phải vì có nhu cầu nhất định cho chúng, mà bởi vì bạn có thể.

1
@Mark, làm thế nào về việc nắm lấy cuộc sống;) = du lịch, ngôn ngữ, nhà hát, thơ ca, ngoài trời, v.v.? Tôi thích lập trình, nhưng khi tôi không làm việc đó, tôi có 1000 việc khác để làm.
Công việc

Câu trả lời:


7

Đánh giá không phải là một vấn đề song song theo như tôi biết nhưng đánh giá các chuỗi khác nhau, vì vậy tôi chắc chắn sẽ viết nó để sử dụng nhiều lõi và đa luồng.

Cho dù bạn đi chức năng hay bán chức năng là một vấn đề của hương vị. Cá nhân tôi sẽ đi OOP và sử dụng hỗ trợ cho lập trình và song song hóa chức năng tồn tại trong ví dụ C #

Trong một sidenote, nếu tôi viết một cỗ máy cờ vua, tôi sẽ cố gắng tạo ra một thứ thực sự có thể "nghĩ" về cờ vua. Sử dụng đánh giá bảng để vũ phu tất cả các kết hợp có thể đã được thực hiện cho đến chết và cực kỳ tốt, nhưng đã không có nhiều tiến bộ trong việc thực hiện một công cụ cờ vua suy nghĩ / mờ hơn. Đó sẽ là một thử thách! :)

Tìm một số trò chơi với vị trí thực sự khó chơi và di chuyển mạnh (chúng được đánh dấu! Hoặc !!) và sử dụng chúng để huấn luyện và kiểm tra động cơ của bạn.


2

Tôi đoán nó phụ thuộc vào mục tiêu của bạn, mà tôi thực hiện là hoàn toàn mô phạm. Nếu bạn đang cố gắng viết một sản phẩm cạnh tranh, bạn sẽ muốn hiệu quả tối đa trong những người đánh giá cấp thấp nhất. Rất nhiều cơ hội cho song song cấp độ bit ở đây. Cũng rất nhiều cơ hội cho các bảng băm. Ngoài ra cơ hội để khai thác song song. Sau đó, ở các cấp độ cao hơn, bạn có thể muốn có một hệ thống tốt cho AI, vì vậy điều đó có thể có nghĩa là một ngôn ngữ lập trình chức năng. Rõ ràng là bạn không muốn làm tất cả những điều này, chọn một hoặc hai trong số chúng và hài lòng với thực tế rằng dự án của bạn sẽ không cạnh tranh với các chương trình tốt hơn.


2

Tôi đã chọn mô hình OOP trong bộ máy cờ vua của mình có tên The Turk . Phiên bản đầu tiên của công cụ cờ vua của tôi được viết theo thủ tục hơn là OOP. Sau đó, tôi thấy rất khó để cải thiện công cụ cờ vua của mình vì khối mã dài và thiết kế kém.

Nó phụ thuộc vào những gì bạn muốn đạt được trong khi viết công cụ cờ vua. Nếu bạn muốn tạo một công cụ cờ vua quá mạnh để thậm chí không thể thực hiện điều này bằng các ngôn ngữ OOP vì liên kết chậm. Nếu bạn chỉ muốn học lập trình và cũng có được niềm vui bằng cách viết công cụ cờ vua để ngôn ngữ được quản lý và OOP sẽ là bạn của bạn. Tôi có thể đề nghị bạn chọn C # vì cũng có thể viết công cụ cờ vua theo cách thủ tục hơn với nó.


Làm thế nào để đánh giá ELO-khôn ngoan? So với Crafty?

@ Thorbjørn Ravn Andersen - Một trong những công cụ cờ vua mã nguồn mở vượt trội được viết bằng C và bởi Tiến sĩ Robert M. Hyatt, người đã dành cả đời mình cho lập trình cờ vua. Không may là tôi chưa kiểm tra xếp hạng elo vì vẫn còn nhiều việc phải làm trước khi kiểm tra xếp hạng elo. Đánh giá hiện tại chỉ là đánh giá các giá trị mảnh nên nó đã đánh giá khá yếu và tôi vẫn chưa thực hiện tất cả các thuật toán cần thiết. Không may tôi không có thời gian để dành cho dự án này vào lúc này. Tôi hy vọng rằng một ngày nào đó sẽ có thể tiếp tục với nó.
Freshblood

ah xin lỗi, tôi nghĩ rằng nó thực sự có thể chơi. Lỗi của tôi.

@ Thorbjørn Ravn Andersen - Tôi đã xuất bản một số bản phát hành ở đó và bộ thay đổi kho lưu trữ mới nhất đã sẵn sàng để xây dựng. Tôi chỉ muốn nói rằng nó khá yếu vào lúc này.
Freshblood

2

Tôi đã chuyển một chương trình cờ đơn giản như một phương tiện để học ngôn ngữ Forth. Nó hóa ra là một sự phù hợp tuyệt vời cho vấn đề rất cấp bách này, và tôi đã học được rất nhiều. Ngăn xếp mở cho phép tôi thực hiện tìm kiếm alpha-beta theo cách độc đáo giúp tôi hiểu rõ hơn về thuật toán.

Người ta sẽ nghĩ rằng lập trình chức năng sẽ rất tốt cho các chương trình cờ vua, vì các thuật toán cốt lõi (tìm kiếm, đánh giá đầu tiên về độ sâu alpha-beta) được đệ quy và nghiêm ngặt về mặt chức năng. Tuy nhiên, một chương trình cờ sống và chết vì hiệu quả và không có ngôn ngữ chức năng hiện tại nào có mục tiêu đó. Một trăm công cụ tiên tiến nhất đều sử dụng các ngôn ngữ bắt buộc (chủ yếu là C / C ++, sau đó là Delphi) để có quyền kiểm soát tối đa đối với việc sử dụng bộ nhớ, đa luồng, trạng thái toàn cầu và tạo mã. Tất cả các ngôn ngữ chức năng sử dụng cấp phát bộ nhớ động cho các cấu trúc dữ liệu cốt lõi, là cái chết cho một chương trình cờ vua.

Tôi vẫn muốn thấy ai đó cố gắng đột nhập vào 100 động cơ cờ vua hàng đầu bằng ngôn ngữ chức năng.

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.