Công cụ kiểm tra thuật toán AI


7

Tôi đang tạo ra một AI cho trò chơi cờ đam của mình và tôi đang cố gắng làm cho nó khó nhất có thể. Dưới đây là các tiêu chí hiện tại để tiến lên một khó khăn khó khăn nhất:

1: Tìm kiếm một khối: Đây là khi một mảnh đang bị đe dọa và một mảnh khác có thể được di chuyển phía sau nó để bảo vệ nó. Đây là một ví dụ:

Di chuyển màu đen
|W| |W| |W| |W| |
| |W| |W| |W| |W|
|W| | | |W| |W| |
| | | |W| | | | |
| | | | |B| | | |
| |B| | | |B| |B|
|B| |B| |B| |B| |
| |B| |B| |B| |B|

Khối trắng
|W| |W| |W| |W| |
| |W| | | |W| |W|
|W| |W| |W| |W| |
| | | |W| | | | |
| | | | |B| | | |
| |B| | | |B| |B|
|B| |B| |B| |B| |
| |B| |B| |B| |B|

2: Di chuyển các mảnh ra khỏi nguy hiểm: nếu bất kỳ mảnh nào đang bị đe dọa và một mảnh không thể chặn được mảnh đó, thì nó sẽ cố gắng di chuyển ra khỏi đường đi. Nếu mảnh không thể di chuyển ra khỏi đường mà không gặp nguy hiểm, máy tính sẽ bỏ qua mảnh.

3: Nếu người chơi máy tính sở hữu bất kỳ vị vua nào, nó sẽ cố gắng 'săn lùng' quân địch trên bảng, nếu không có động thái nào có thể không gây nguy hiểm cho nhà vua hoặc bất kỳ quân cờ nào khác, máy tính sẽ bỏ qua quy tắc này.

4: Bất kỳ phần nào thuộc sở hữu của máy tính ở cột 1 hoặc 6 sẽ cố gắng đi sang một bên. Khi một mảnh ở cột 0 hoặc 7, nó ở vị trí rất chiến lược vì nó không thể bị bắt trong khi nó ở một trong hai cột này

5: Nó làm cho một di chuyển ngẫu nhiên có giáo dục, di chuyển sẽ không làm mất đi phần đang di chuyển hoặc bất kỳ phần nào trên bảng.

6: Nếu không có điều nào ở trên là có thể, nó sẽ di chuyển ngẫu nhiên.


Câu hỏi này không thực sự cụ thể đối với bất kỳ ngôn ngữ nào nhưng nếu tất cả các ví dụ có thể có trong Java sẽ rất tuyệt, thì việc xem xét ứng dụng này được viết bằng Android. Có ai thấy bất kỳ phòng để cải thiện trong thuật toán này? Bất cứ điều gì sẽ làm cho nó tốt hơn khi chơi cờ đam?


(Trên một Checkers cụ thể lưu ý, IIRC là trên mép không nhất thiết phải là lợi thế bạn thực hiện nó ra được; mảnh như không có sự nhanh nhẹn, vì họ chỉ có một di chuyển có sẵn, và dễ dàng hơn để bẫy và chụp.)
Steven Stadnicki

2
Chỉ trong trường hợp bạn không biết người kiểm tra là một trò chơi đã được giải quyết và nếu chơi hoàn hảo, kết quả luôn là một trận hòa. Chessbase.com/newsdetail.asp?newsid=3997
Adam

Câu trả lời:


15

Nếu bạn đang cố gắng tạo ra một AI tốt cho chương trình kiểm tra của mình, thì nơi đầu tiên để tìm là cái được gọi là tìm kiếm cây trò chơi Alpha-Beta . Phiên bản ngắn là bất kỳ AI nào chỉ tính đến các tính năng tĩnh của vị trí hiện tại chắc chắn sẽ gặp rắc rối, đặc biệt là trong trò chơi từ đầu đến giữa, vì đơn giản là nó không thể hiểu những gì hiện đang xảy ra trong trò chơi và những gì hiện đang xảy ra trong trò chơi và những gì các mối đe dọa là. Thay vào đó, điều bạn muốn làm là viết một thuật toán tìm kiếm tất cả các chuyển động và trả lời có thể cho một số bước di chuyển phía trước (5 đến 10 sẽ là điển hình), đánh giá vị trí ở cuối mỗi nhánh của bước di chuyển này - và - cây tương ứng (về mặt 'tôi có bao nhiêu mảnh phía trước hay phía sau?), và sau đó thực hiện động tác mang lại cơ hội tốt nhất - nói cách khác, di chuyển tối đa hóagiá trị có thể của nó, trong đó giá trị có thể được tính là giá trị tối thiểu có thể có trong tất cả các câu trả lời của đối thủ của bạn (giả sử, nói cách khác, họ sẽ thực hiện động thái phù hợp nhất với họ), v.v. - đây là lý do tại sao thuật toán này là thường được gọi là thuật toán Minimax .

Những gì bạn sẽ tìm thấy là nhiều yếu tố bạn đang nói đến - di chuyển các mảnh sang một bên, di chuyển các mảnh khỏi nguy hiểm, v.v. - sẽ trở thành các yếu tố của chức năng đánh giá vị trí của tìm kiếm cây trò chơi. Về cơ bản, thay vì đặt câu hỏi đơn giản 'có bao nhiêu phần phía trước là bên này hay bên kia?', Bạn sẽ nói 'giá trị của vị trí này là gì?' và sau đó đưa ra các giá trị điểm cho các tính năng khác nhau của bảng (ví dụ: liệu một mảnh có ở bên cạnh hay không, có dễ bị tổn thương không, v.v.) về mặt các phần - ví dụ, bạn có thể quyết định rằng sự khác biệt giữa cạnh và trung tâm mảnh có giá trị có thể .1 mảnh, vì vậy ở vị trí bạn là người đàn ông phía sau nhưng có thêm một mảnh cạnh, giá trị tổng thể đối với bạn sẽ là -0,9.

Một khái niệm tiên tiến quan trọng đối với người kiểm tra AI cụ thể là khái niệm tìm kiếm Quieshood : hãy tưởng tượng rằng bạn đi xuống sáu bước vào cây của bạn, và ở phần đuôi, đối thủ của bạn vừa bắt được câu trả lời (bắt buộc) của bạn là một sự bắt lại ngay lập tức. Thật không may, chức năng đánh giá vị trí không thể nhìn thấy sự chiếm lại, do đó, nó đánh giá vị trí là một mảnh ghép cho đối thủ của bạn mặc dù bạn sắp lấy lại được sự tương đương. Tìm kiếm kiểm tra là một nỗ lực để giải quyết vấn đề này bằng cách buộc người đánh giá đi xuống một nhánh cho đến khi tất cả các biện pháp bắt buộc có thể được thực hiện, và chỉ sau đó đánh giá vị trí.

Điều này nghe có vẻ khá phức tạp, nhưng tôi nghĩ bạn sẽ thấy nó đơn giản hơn vẻ ngoài của nó - một khi bạn viết chức năng đánh giá của mình, việc tìm kiếm cây tương đối dễ dàng; có rất nhiều khái niệm thông minh (những thứ như bảng chuyển vị ) mà bạn có thể áp dụng cho nó, nhưng thật dễ dàng để có một cái gì đó hoạt động và sau đó tiếp tục cải thiện nó. Để biết thêm chi tiết, tôi khuyên bạn nên tìm kiếm trên hầu hết các thuật ngữ chính (tìm kiếm alpha-beta, minimax, tìm kiếm tĩnh, cây trò chơi, v.v.); có rất nhiều thông tin tốt về tất cả các khái niệm này trên web.


Cảm ơn câu trả lời của bạn, tôi đã nghĩ về việc này trước đây nhưng tôi luôn nghĩ rằng cách của tôi hiệu quả hơn, nhưng cách bạn mô tả có vẻ như nó sẽ hiệu quả hơn nhưng hiệu quả hơn rất nhiều. Tôi sẽ sớm tạo ra một AI cho một ván cờ, và tôi nghĩ rằng nó sẽ làm việc ít hơn và hiệu quả hơn để làm theo cách của bạn. Nếu máy tính có một loạt các lựa chọn khác nhau để lựa chọn, và nó thu hẹp chúng thành một cặp mà tất cả đều có kết quả tốt, làm thế nào nó có thể mất? Cảm ơn các câu trả lời chi tiết!
Giăng

Tôi vẫn khuyên bạn nên thử phương pháp của Steven, vì việc triển khai minimax trong cờ sẽ dễ dàng hơn đáng kể so với cờ vua, và trên thực tế, việc thực hiện minimax trong cờ đam sẽ dễ dàng hơn đáng kể so với bạn nghĩ. Tôi đã viết một thuật toán minimax (không cắt xén) cho Connect Four trong vài trăm dòng. Tất cả đều khá đơn giản nếu bạn sẵn sàng dành thời gian và sức lực để cải thiện kỹ năng của mình.
Một số

1
Tôi muốn chỉ ra rằng kể từ câu trả lời của Steven, MTCS đã trở nên cực kỳ phổ biến như là một thay thế cho Alpha / Beta. Điều đó cũng đáng để xem xét, đặc biệt là vì MTCS là một thuật toán bất cứ lúc nào .
Tobia Tesan

@TobiaTesan Tôi đoán bạn có nghĩa là MCTS (Tìm kiếm cây Monte Carlo)? Chắc chắn là có, nhưng MCTS thực sự khó thực hiện hơn thuật toán Alpha-Beta cơ bản và tôi chắc chắn khuyến khích thực hiện AB trước tiên, nhất là vì đó là cơ sở tốt để thực hiện MCTS.
Steven Stadnicki

1
@StevenStadnicki Hãy nhớ bạn, tôi đã không cố gắng chỉ trích bằng bất kỳ cách nào câu trả lời xuất sắc của bạn (mà tôi nêu lên). Tôi đồng tình rằng các phương pháp cổ điển như A / B luôn đáng để học trước tiên, đặc biệt vì Minimax là một khung lý thuyết mạnh mẽ; tuy nhiên, MTCS thực sự không gây khó khăn cho tôi khi thực hiện; Phần khó nhất IMHO là có khá nhiều phiên bản mã giả ngoài kia có một chút ở cấp độ thấp, đặc biệt (ví dụ Gelly 2011) họ muốn thể hiện thuật toán thông qua các hiệu ứng phụ trên trạng thái toàn cầu [bảng] bị đảo ngược như các cuộc gọi đệ quy được bật lên.
Tobia Tesan
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.