Là AI giống như cờ vua thực sự không thể áp dụng trong các trò chơi chiến lược theo lượt?


13

Rõ ràng, cố gắng áp dụng thuật toán tối thiểu trên cây di chuyển hoàn chỉnh chỉ hoạt động cho các trò chơi nhỏ (tôi xin lỗi tất cả những người đam mê cờ vua, bởi "nhỏ" tôi không có nghĩa là "đơn giản"). Đối với các trò chơi chiến lược theo lượt điển hình trong đó bảng thường rộng hơn 100 ô và tất cả các phần trong một bên có thể di chuyển đồng thời, thuật toán tối thiểu không thể áp dụng được.

Tôi đã tự hỏi nếu một thuật toán min-max một phần giới hạn cấu hình bảng N ở mỗi độ sâu không đủ tốt? Sử dụng một thuật toán di truyền, có thể tìm thấy một số cấu hình bảng có chức năng tốt đối với chức năng đánh giá. Hy vọng rằng, các cấu hình này cũng có thể là mục tiêu tốt cho các mục tiêu dài hạn.

Tôi sẽ ngạc nhiên nếu điều này chưa từng được nghĩ đến trước đây và đã thử. Có nó? Làm thế nào nó hoạt động?


1
Bạn có thể thử nghiệm với sự khuếch tán hợp tác . Nó hoạt động bằng giá trị diffusiong vào lưới, kẻ thù sau đó leo lên lưới. Nó hoạt động ít nhất cho tìm đường. Nếu bạn tạo thêm giá trị để khuếch tán (riêng biệt?) Và leo đồi phức tạp hơn (chọn nơi tiếp theo dựa trên một số giá trị) ...
user712092

Thế còn Alpha-Beta Prising ? Nó là phiên bản tốt hơn của min-max.
dùng712092

Tôi thấy Alpha-Beta Prucky là một loại min-max.
Joh

Vâng, đúng vậy. Nhưng nó phải nhanh hơn. Không biết nó có giúp gì cho bạn không ...
user712092

Tôi đã từ bỏ ý tưởng đó. Tôi đang nghiêng về một AI có kịch bản "lỏng lẻo" nơi tôi sử dụng các ràng buộc thay vì hướng dẫn cụ thể về cách phản ứng với các sự kiện khác nhau. Tôi hy vọng rằng GA hoặc một số thuật toán tối ưu hóa khác có thể cung cấp hành vi thông minh.
Joh

Câu trả lời:


5

Nó phụ thuộc vào cơ chế của trò chơi. Nhìn chung, cây trò chơi có thể không thể áp dụng được, nhưng có thể nó được áp dụng ở một số khu vực. Điều phổ biến là một số vị trí trên bản đồ rất quan trọng về mặt chiến lược. Tối thiểu có thể áp dụng ở cấp chiến lược mà những vị trí đó cần kiểm soát. Ở cấp độ chiến thuật, đối với các ô vuông x quanh mỗi vị trí chiến lược, min-max có thể được sử dụng để quyết định cách các đơn vị triển khai để nắm bắt và bảo vệ nó.


9

Đây không phải là thuật toán minimax, tuy nhiên những kẻ chịu trách nhiệm về Killzone AI đã phát hành một bài báo dựa trên các chức năng đánh giá vị trí mà một số AI cờ vua cũng sử dụng.

Nó rất đơn giản ở chỗ tất cả những gì nó làm là chọn một vị trí trên bảng dựa trên kiến ​​thức hiện tại của đại lý. Vì vậy, nếu đặc vụ có sức khỏe thấp, thì các vị trí càng xa kẻ thù của nó sẽ được thưởng điểm cao hơn vì mong muốn được ra khỏi phạm vi của kẻ thù.

Bài báo có thể được tìm thấy trong Trí tuệ lập trình trò chơi AI 3 và có tiêu đề Đánh giá vị trí chiến thuật động.

Một bản nháp của bài báo có thể được tìm thấy trực tuyến tại đây:
http://www.cgf-ai.com/docs/straatman_remco_killzone_ai.pdf

Mong rằng sẽ giúp.


2

Tôi không nghĩ rằng nó sẽ đủ tốt. Việc chọn cấu hình N cụ thể, bao nhiêu và cái nào, hầu như không thể trong một cái gì đó phức tạp. Hãy nhớ rằng nếu trò chơi của bạn có các tài nguyên vô hạn hoặc một cái gì đó tương tự, thì có thể có các vòng tròn về cách nó có thể được chơi, khiến việc khai thác AI như vậy tương đối dễ dàng.


2

Tôi sẽ đề nghị ít nhất là thực hiện tối thiểu với việc cắt tỉa alpha-beta.

Không thử nó và quyết định nó là không thực tế (tức là hiệu suất khủng khiếp) và không có thêm nền tảng về cơ chế trò chơi, tôi không hiểu tại sao bạn nghĩ min-max không thể áp dụng được.

Kích thước của bảng có khả năng là một vấn đề, nhưng với việc cắt tỉa, loại bỏ các con đường bị mất cho phép tìm kiếm sâu hơn với cùng số lượng tính toán, vì vậy có lẽ các khu vực bảng lớn hơn sẽ không phải là vấn đề khi được cắt tỉa? Ngoài ra, giả sử kích thước bảng là một vấn đề có thể là sớm, nó không phải là kích thước của bảng nhiều như sự phức tạp của cơ học và có bao nhiêu di chuyển có thể từ mỗi vị trí bảng. Nếu trò chơi của bạn có diện tích dân cư rộng nhưng thưa thớt, số lần di chuyển có thể từ mỗi trạng thái bảng có thể không khác nhiều so với nếu bảng chỉ đủ lớn để phù hợp với tất cả các quân cờ. Tất nhiên, nếu bạn có một bảng khổng lồ đã đầy 90% và mọi thứ có thể di chuyển đến mọi nơi mỗi lượt, điều đó sẽ đòi hỏi rất nhiều tìm kiếm.

Tôi cũng không chắc tại sao chuyển động đồng thời vốn là một vấn đề. Miễn là bạn chuyển từ trạng thái bảng kín này sang trạng thái khác và có chức năng đánh giá, thuật toán nên được áp dụng.

Tôi giả sử bạn cần phải có một chức năng đánh giá, và bất kể tìm kiếm bạn sử dụng là gì, chức năng đánh giá là nơi hầu hết các công việc có thể đi. Thuật toán min-max với việc cắt tỉa rất đơn giản để thực hiện, một số thứ bạn có thể làm trong một hoặc hai giờ và phần lớn cơ sở hạ tầng như lưu trữ trạng thái bảng, đánh giá, tạo di chuyển, có thể sẽ giống nhau bất kể tìm kiếm bạn giải quyết trên.


liên quan đến chuyển động đồng thời: Ban đầu tôi không thấy cách chuyển đổi tối thiểu, thường được giải thích bằng cách sử dụng các trò chơi theo lượt như cờ vua, cho trường hợp di chuyển đồng thời. Tôi nghĩ rằng tôi đang bắt đầu để xem làm thế nào để làm điều đó, nhưng nó không tầm thường.
Joh

Tôi đã đưa ra một giải pháp cho vấn đề chuyển động đồng thời của bạn trong bài viết của mình (tiêu đề "Có thể di chuyển ở mỗi vị trí"). Bạn chỉ có thể xử lý việc này bằng cách chỉ thực hiện một động tác trong mỗi lần lặp kết hợp với động tác "bây giờ tôi kết thúc lượt chơi" rõ ràng của mình, điều này mang lại lượt chơi cho đối thủ. Điều này cho phép cắt tỉa alpha-beta trung gian để phá vỡ sự phức tạp của những di chuyển đồng thời.
SDwarfs

1

Người chiến thắng trong thử thách Google AI năm 2011 đã sử dụng min-max (độ sâu 1). Một thí sinh hàng đầu khác đã sử dụng lấy mẫu ngẫu nhiên . Thí sinh này đã đề cập rằng sự pha trộn giữa lấy mẫu tối thiểu và ngẫu nhiên, về cơ bản là những gì tôi mô tả trong câu hỏi của mình, thực hiện kém. Điều này giải quyết nó, tôi đoán.

Mặt khác, nó cho thấy có thể sử dụng min-max trong các trò chơi lớn. Tuy nhiên, có vẻ như cần phải giới hạn nó trong các nhóm kiến ​​nhỏ, hoạt động với toàn bộ kiến ​​có lẽ đã quá chậm. Một quan sát thú vị khác là độ sâu 1 là đủ. Chúng tôi (con người) đã trở nên khá giỏi trong việc chơi cờ và một AI cho trò chơi này cần những cây tìm kiếm sâu hơn nhiều để thử thách. Các trò chơi mới phức tạp hơn đã không được chơi và nghiên cứu quá lâu và AI ngu ngốc có thể có đủ giá trị giải trí.


1

Ý tưởng cơ bản của AI cờ vua là lập danh sách tất cả các nước đi có thể từ nước đi tốt nhất hiện được ước tính, sau đó đánh giá chúng và lặp lại quá trình. Nó đánh rơi những người có quá ít cơ hội vì họ sẽ không bị bắt (hoặc có thể được giả định là không được thực hiện vì họ dường như không tạo ra lợi thế).

Ý tưởng cơ bản yêu cầu bạn lập một danh sách tất cả các nước đi có thể, và lặp lại quá trình đó cho tất cả các nước cờ đó, v.v. Điều này có thể có trong cờ vua (trong đó danh sách các nước cờ tiếp theo có thể được liệt kê một cách hiệu quả; một bàn cờ bắt đầu có 20 nước có thể ) và lên đến một điểm cho những thứ khác như backgammon, cờ đam và giải khối Rubik.

Nếu tôi lấy một trò chơi theo lượt đơn giản (Civilization 2) làm ví dụ, mỗi người của bạn có thể di chuyển đến tổng cộng 8 ô vuông (hoặc 24) trong một lượt. Nếu bạn có 10 người (không nhiều, bạn thường có nhiều hơn vào thời điểm nó bắt đầu trở nên thú vị), tổng số lần "di chuyển" có thể từ trạng thái hiện tại (vì vậy một cấp độ) đã là 8 ^ 10 hay khoảng 4 tỷ đồng. Ngay cả khi bạn tỉa 99,99% trong số đó, bạn vẫn không thể đi sâu vào cây vì số lần di chuyển có thể phát nổ rất nhanh.

Thêm vào đó, trò chơi hơi giống với vấn đề khối lập phương của Rubik, trong đó bạn chỉ thấy tiến triển sau 10 hoặc 12 lần di chuyển, vấn đề bùng nổ đến mức các ưu điểm của min / max tiêu chuẩn chỉ phổ biến ở dung lượng bộ nhớ là nhiều hơn máy tính thông thường của bạn sẽ có.

Nói cách khác, các chiến lược mà nó sẽ tìm thấy sẽ có thể lặp lại nhưng rất tệ.

Đối với vấn đề thực tế, làm thế nào để tạo ra một AI tốt, tôi sẽ đi theo hướng chuyển động ngẫu nhiên về cơ bản (di chuyển mỗi chàng trai với một chút thông minh cơ bản), đánh giá và điều chỉnh. Làm điều này song song cho 100 hoặc 1000 cái khác nhau và chọn cái cuối cùng là tốt nhất. Bạn có thể phản hồi kết quả từ điều này vào hệ thống lái thông minh ban đầu để điều chỉnh lại. Một chút giống như mô phỏng monte-carlo.


0

Để áp dụng thành công tối thiểu / tối đa cho trò chơi chiến lược theo lượt, bạn cần áp dụng chính xác tất cả các kỹ thuật cờ vua có sẵn ...

Chức năng đánh giá

Ngay cả các động cơ cờ vua có một sức mạnh rất xấu, nếu chức năng đánh giá của bạn là xấu. Phiên bản đơn giản nhất của chức năng đánh giá là: 1 = trò chơi thắng trắng, -1 = trò chơi thắng bằng màu đen, 0 = tất cả các trường hợp khác; Nhưng, điều này sẽ cung cấp cho bạn một hiệu suất rất xấu. Điều tương tự cũng xảy ra với trò chơi theo lượt của bạn! Nếu bạn muốn sử dụng min / max (với công cụ cắt tỉa alpha / beta) như trong cờ vua, bạn cũng phải thực hiện chức năng đánh giá hợp lý! Khác, bạn không thể so sánh hiệu suất của các thuật toán đó khi được áp dụng cho trò chơi chiến lược của mình với trường hợp nó được áp dụng cho cờ vua.

Những chức năng đánh giá của động cơ cờ vua làm gì, là đánh giá những thứ như:

  • Làm thế nào tốt là một vị trí của một mảnh trên bảng?
  • Bao nhiêu lần là một mảnh bị tấn công?
  • Bao nhiêu lần là mảnh được bảo vệ?
  • Làm thế nào tốt mỗi phần có thể tự do "di chuyển" trên bảng? (hoặc: Có bao nhiêu gạch "kiểm soát")

Những phần của chức năng đánh giá trước tiên phải được "dịch" sang trò chơi của bạn:

  • Vị trí của mảnh: Có phải là ví dụ trên một ngọn đồi, đang mở rộng phạm vi bắn của nó?
  • Bị tấn công: Mỗi mảnh nguy hiểm là bao nhiêu? (ví dụ: tổng giá trị tấn công của các đơn vị có thể tấn công một đơn vị đặc biệt nhân với xác suất bị tấn công bởi nó; xác suất tăng, nếu đơn vị đã bị hư hại; giảm nếu nhiều đơn vị khác nằm trong phạm vi của đơn vị tấn công)
  • Tấn công riêng: Có bao nhiêu đơn vị có thể bị tấn công bởi mỗi đơn vị này?
  • Bảo vệ: Có bao nhiêu mảnh riêng bên cạnh nó (để giúp đỡ)? Có thể một đơn vị không được tấn công các đơn vị dưới một khoảng cách tối thiểu và tốt nhất là bảo vệ nó bởi đơn vị có khả năng tấn công các đơn vị gần đó.
  • Tính cơ động: Đơn vị di động của bạn như thế nào? (nó có thể chạy trốn không?)

Các xếp hạng khác nhau phải được tổng hợp theo hàm trọng số (Fact_a * rating_a + Fact_b * ranting_b + ...) cho tất cả các đơn vị ...

Trong các trò chơi chiến lược, các tài nguyên (vàng, gỗ, ...) còn lại phải được tính đến.

Nếu chức năng đánh giá của bạn đủ tốt, bạn không cần phải thực sự tìm kiếm "sâu" vào cây trong hầu hết các trường hợp. Vì vậy, có lẽ bạn chỉ cần xem xét kỹ hơn về 3 hoặc 10 lựa chọn hứa hẹn nhất. Xem chương tiếp theo ...

Di chuyển có thể ở mỗi vị trí

Vấn đề khó khăn nhất khi sử dụng min / max cho các game chiến thuật là bạn có thể chỉ huy nhiều đơn vị trong một lượt, trong khi trong cờ vua, bạn chỉ được phép chỉ huy một đơn vị (ngoại trừ việc ném, nhưng đây là tổ hợp di chuyển được xác định rõ ràng). Điều này gây ra 5 ^ N khả năng di chuyển cho N đơn vị cho mỗi "vị trí" (thuật ngữ cờ vua), nếu bạn chỉ quyết định giữa "di chuyển về phía bắc, nam, tây, đông HOẶC dừng" cho mỗi đơn vị. Bạn có thể giải quyết điều này bằng cách chia nhỏ lệnh phức tạp thành các lệnh cấp thấp: ví dụ: chọn hành động cho đơn vị A, đi sâu và quyết định cho đơn vị B .... quyết định cho đơn vị N ... và sau đó kết thúc lượt này. Nhưng, điều này một mình không thay đổi sự phức tạp! Bạn phải tối ưu hóa thứ tự các hành động được gán cho các đơn vị (ví dụ: đơn vị đầu tiên B, C, D và sau đó là đơn vị A). Bạn có thể ghi lại tác động của quyết định cho từng đơn vị trong lần tính toán cuối cùng và sau đó sắp xếp theo mức độ quan trọng. Cách cắt tỉa alpha-beta này có thể được sử dụng để loại bỏ bất kỳ sự kết hợp xấu nào từ cây tìm kiếm từ rất sớm. Ưu tiên cao nhất phải luôn là "không làm gì thêm và kết thúc lượt của bạn" (cắt tỉa di chuyển null) trong mỗi lần lặp. Bằng cách này, bạn có thể "bỏ qua" việc giao hầu hết các nhiệm vụ cho hầu hết các đơn vị và để họ tiếp tục những gì họ đã làm trước đó. Bằng cách này, việc tìm kiếm sẽ đi vào chiều sâu một cách nhanh chóng bằng cách chỉ nhìn vào các đơn vị "quan trọng" (ví dụ: những đơn vị thực sự đang chiến đấu ngay bây giờ). Đảm bảo chỉ ra lệnh cho mỗi đơn vị một lần ... Bạn cũng có thể sử dụng một số tính ngẫu nhiên để đảm bảo rằng các đơn vị "quan trọng" thỉnh thoảng cũng nhận được lệnh. Đặc biệt, các đơn vị hoàn thành một số công việc (ví dụ

Lặp đi lặp lại sâu + bộ nhớ đệm / bảng băm

Sau đó, bạn có thể "đào sâu tương tác" để đi sâu hơn và nhiều hơn nữa cho đến khi đạt được giới hạn thời gian. Vì vậy, bạn sẽ tìm kiếm sâu hơn nếu có ít đơn vị hơn và bạn luôn có một số "kết quả" nếu bạn ngừng tìm kiếm một giải pháp tốt hơn. Việc lặp lại sâu sẽ yêu cầu sử dụng bảng băm để lưu trữ các kết quả tìm kiếm trước đây. Điều này cũng cho phép sử dụng lại một số kết quả từ tìm kiếm lượt cuối cùng (nhánh của cây tìm kiếm bao gồm các lệnh thực sự được thực hiện trong lượt cuối cùng). Để thực hiện điều này, bạn cần một chức năng băm rất tốt (hãy xem "khóa zobrist"), có thể được cập nhật lặp lại. Cập nhật khóa băm có nghĩa là bạn chỉ cần lấy khóa băm của "vị trí" cũ và có thể chỉ cần thay đổi vị trí (ví dụ: lấy đi đơn vị ở vị trí x và đặt nó ở vị trí y). Cách tính toán khóa băm này rất nhanh chóng và bạn không cần xử lý toàn bộ tình huống của bảng để tính toán nó, chỉ để kiểm tra xem hàm băm có chứa mục nhập cũ cho vị trí này không. Theo một cách nào đó, bạn phải chắc chắn rằng không có va chạm băm xảy ra.

Hành vi không xác định

Hành vi không xác định là một vấn đề đối với các tìm kiếm tối thiểu / tối đa. Điều này có nghĩa là, không chắc chắn liệu bạn có trúng mục tiêu bị tấn công hay không (ví dụ: xác suất là 10%). Sau đó, bạn không thể lập kế hoạch này xảy ra. Trong trường hợp đó, bạn cần sửa đổi thuật toán và đặt một lớp "xác suất" ở giữa. Nó hơi giống như "đến lượt xác suất". Mỗi kết quả độc lập phải được xem xét riêng. Việc đánh giá thông qua "lớp" độ sâu này sau đó phải được lấy mẫu (lấy mẫu monte carlo) và kết quả của việc đánh giá sâu phải được cân nhắc bởi xác suất xảy ra. Các kết quả khác nhau của lớp xác suất phải được coi là các bước di chuyển khác nhau (nhưng thay vì tối thiểu / tối đa thì phải tính "trung bình"). Điều này tất nhiên sẽ làm tăng sự phức tạp của cây tìm kiếm.

Tóm lược

Khi áp dụng tất cả các kỹ thuật (tất cả được sử dụng bởi các công cụ cờ hiện tại) vào một trò chơi xác định, bạn chắc chắn sẽ có thể đạt được kết quả hợp lý cho một trò chơi. Đối với các trò chơi không xác định, điều này có thể sẽ phức tạp hơn, nhưng tôi nghĩ vẫn có thể quản lý được.

Một nguồn tốt để giải thích về các kỹ thuật đó (cho cờ vua) là http://chessprogramming.wikispaces.com/

Bạn thậm chí có thể thực hiện một số loại ngẫu nhiên theo chỉ dẫn trong các tìm kiếm tối thiểu / tối đa. Thay vì điều tra một cách xác định các kết quả tốt nhất trước tiên trong mỗi lần lặp, bạn chỉ cần chọn ngẫu nhiên và để thứ tự của nó được quyết định bởi phân phối xác suất dựa trên các đánh giá hiện tại ...

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.