Đề xuất AI của nhân vật PacMan cho hướng tiếp theo tối ưu


9

Thứ nhất, đây là AI cho PacMan chứ không phải ma .

Tôi đang viết một hình nền sống Android chơi Pacman xung quanh các biểu tượng của bạn. Mặc dù nó hỗ trợ các đề xuất của người dùng thông qua các lần chạm màn hình, nhưng phần lớn trò chơi sẽ được chơi bởi AI. Tôi đã hoàn thành 99% với tất cả các chương trình cho trò chơi nhưng bản thân AI cho PacMan vẫn cực kỳ yếu. Tôi đang tìm kiếm sự giúp đỡ trong việc phát triển một AI tốt để xác định hướng đi tiếp theo của PacMan.

Kế hoạch ban đầu của tôi là:

  1. Khởi tạo bộ đếm điểm cho mỗi hướng với giá trị bằng 0.
  2. Bắt đầu tại vị trí hiện tại và sử dụng BFS để đi ra ngoài theo bốn hướng ban đầu có thể bằng cách thêm chúng vào hàng đợi.
  3. Bỏ một phần tử ra khỏi hàng đợi, đảm bảo rằng nó chưa được "nhìn thấy", đảm bảo đó là một vị trí bảng hợp lệ và thêm vào các hướng ban đầu tương ứng ghi một giá trị cho ô hiện tại dựa trên:

    1. Có một dấu chấm: cộng 10
    2. Tăng sức mạnh: cộng thêm 50
    3. Có một quả: cộng với giá trị quả (thay đổi theo cấp độ)
    4. Có một con ma sợ hãi: cộng thêm 200
    5. Có một con ma đi về phía PacMan: trừ 200
    6. Có một con ma đi từ PacMan: không làm gì cả
    7. Có một con ma đi vuông góc: trừ 50
    8. Nhân giá trị của ô nhân với một pecentage dựa trên số bước của ô, càng nhiều bước từ hướng ban đầu, giá trị của ô càng gần bằng 0.

    và enqueue ba hướng có thể từ các tế bào hiện tại.

  4. Khi hàng đợi trống, hãy tìm điểm cao nhất cho mỗi trong bốn hướng ban đầu có thể và chọn điều đó.

Nghe có vẻ tốt với tôi trên giấy nhưng những bóng ma bao quanh Pacman cực kỳ nhanh chóng và anh ta co giật qua lại trong cùng hai hoặc ba tế bào cho đến khi một người chạm tới anh ta. Điều chỉnh các giá trị cho sự hiện diện ma cũng không giúp được gì. Dấu chấm BFS gần nhất của tôi ít nhất có thể đạt đến cấp 2 hoặc 3 trước khi trò chơi kết thúc.

Tôi đang tìm kiếm mã, suy nghĩ và / hoặc liên kết đến các tài nguyên để phát triển một AI phù hợp - tốt nhất là hai cái trước. Tôi muốn phát hành nó trên Thị trường vào cuối tuần này vì vậy tôi hơi vội. Bất kỳ trợ giúp nào cũng được đánh giá rất cao.


FYI, điều này ban đầu được đăng trên StackOverflow


Rất nhiều thứ này phụ thuộc vào AI ma. Nếu bạn đang sử dụng cùng một thuật toán AI từ trò chơi gốc, bạn có thể yêu cầu pac-man theo một trong nhiều mẫu đã được phát hiện, không cần AI ngoại trừ bảng tra cứu. Nếu những con ma đang nhanh chóng kết thúc với pac-man của bạn, bạn có nghĩ rằng vấn đề là AI ma quá tốt, thay vì AI của pac-man quá yếu?
Ian Schreiber

@Ian Ghost AI giống hệt như trong trò chơi nhưng cách bố trí bảng không giống nhau. Đó chỉ là một bố cục lưới đơn giản giáp với bố cục biểu tượng của bạn (4 x 4, v.v.). Pacman hiện tại chỉ là dấu chấm gần nhất không có ma giữa chính nó và dấu chấm. Nó sẽ hướng thẳng về phía một con ma miễn là có những chấm ở giữa. Có lẽ tôi chỉ cần nhìn xa hơn một vài bước so với dấu chấm gần nhất và xác định xem đó có phải là một hướng đi tốt hay không. Vì toàn bộ hướng tìm kiếm logic này phải xảy ra trong mọi chuyển động của tế bào, nó cũng phải tương đối đơn giản và nhanh chóng.
Jake Wharton

Nhìn vào sự hợp tác khuếch tán, ti có thể giúp bạn bằng cách nào đó.
dùng712092

Câu trả lời:


3

Ý tưởng của Tandem về thuật toán leo đồi là tốt. Một cách khác là: một số biến thể trên A * để xem bạn có thể đi bao xa để xem làm thế nào bạn có thể đạt điểm cao nhất trong N lượt tiếp theo, trong đó N được điều chỉnh để đưa ra kết quả mong muốn.

Các giá trị tính điểm bạn đưa ra có thể được coi là "chi phí để di chuyển" - về cơ bản bạn đang đi đúng hướng, nhưng bạn sẽ phải điều chỉnh các giá trị cho đến khi bạn nhận được kết quả bạn muốn.

Nói chung (không phải cụ thể về Pacman), bạn cần phân bổ các giá trị phù hợp cho

  • Làm tổn thương người khác.
  • Giết người khác.
  • Đạt được một số mục tiêu khác (ngoài việc giết chóc)
  • Bị thương.
  • Đã bị giết.

và sau đó tìm kiếm động thái sẽ dẫn đến số điểm tối đa N lần lượt trong tương lai. Bạn cũng có thể muốn tránh các động thái dẫn đến bất kỳ điểm nào dưới X (giả sử, chi phí chết) N biến thành tương lai.

Khi bạn đã ghi được tất cả các bước di chuyển có thể, hãy thêm tiền thưởng cho mức độ có thể xảy ra trong tương lai và được khấu trừ vì nó có thể trở nên kém như thế nào trong tương lai, sau đó bạn chỉ cần sắp xếp mảng và di chuyển tốt nhất.

Hãy cho chúng tôi biết nó diễn ra như thế nào!



0

Bạn sẽ thực hiện tìm kiếm.

  • Nút / Bang: Vị trí Pacman, Vị trí ma, Vị trí viên, Tổng số điểm, Tổng số sinh mạng.
  • Chuyển đổi: Pacman di chuyển lên, xuống, trái hoặc phải. Nếu Pacman di chuyển vào một bức tường và thay đổi địa điểm hoàn toàn tốt (điều đó có thể dẫn đến một số chiến lược đình trệ thực sự thú vị). Nếu Pacman đánh một con ma, hãy loại bỏ một sinh mạng và di chuyển anh ta và những con ma về nguồn gốc.
  • Chi phí: Nếu Pacman di chuyển lên viên 1, nếu anh ta di chuyển vào một khoảng trống 2.
    Chi phí hơi khó khăn, vì điều đó là không rõ ràng. Hàm chi phí tôi mô tả sẽ khuyến khích Pacman hoàn thành cấp độ. Điều này ngăn cản một chiến lược có thể và chỉ cắm trại chờ đợi trái cây thưởng xuất hiện. Nhưng tôi nghĩ rằng chúng tôi muốn AI Pacman hoàn thành mê cung ngay cả khi nó mang lại điểm thấp hơn.
  • Mục tiêu: đạt điểm tối đa. Điều đó có nghĩa là tất cả các viên, trái cây và viên năng lượng được ăn.

A * hoặc UCS là tuyệt vời khi tìm kiếm mục tiêu. Cách tôi mô tả Trạng thái / Chuyển đổi / Mục tiêu sẽ tìm thấy con đường đi bộ tuyệt vời cho Pacman, AI không cần phải xem xét cụ thể để tránh cái chết hoặc tìm kiếm trái cây. Nó sẽ tự làm điều đó. Vì trò chơi hoàn toàn mang tính quyết định, bạn có thể "tìm kiếm" từ vị trí bắt đầu của Pacman và tìm đường đi bộ tối ưu để kết thúc (tất cả các viên được tiêu thụ) dưới dạng tính toán trước và chỉ cần AI Pacman đi trên con đường đó, không cần AI đi. Hạn chế lớn của phương pháp này là điều này có thể dễ dàng vượt khỏi tầm kiểm soát về thời gian và bộ nhớ của cpu.

Thay vì dành CPU và bộ nhớ để thực hiện tìm kiếm hoàn chỉnh, bạn có thể thực hiện tìm kiếm một phần khi đang di chuyển.

Bạn vẫn có thể sử dụng UCS / A * nhưng dừng tìm kiếm sau khi kiểm tra Ncác nút đã được kiểm tra và chỉ sử dụng đường dẫn tốt nhất được tìm thấy cho đến nay. Cách tiếp cận này rất hay ở chỗ bạn có thể điều chỉnh Nđể tìm sự cân bằng giữa tốc độ và độ chính xác.

Một phương pháp khác tôi đặc biệt yêu thích là tìm kiếm Monte-Carlo Tree. Trong phương pháp này, bạn để Pacman thực hiện một bước Ndi chuyển ngẫu nhiên . Sau mỗi lần đi bộ ngẫu nhiên, bạn ghi lại bước di chuyển ban đầu và điểm số cuối cùng của anh ấy. Thực hiện Mcác bước đi ngẫu nhiên (hoặc chỉ tiếp tục thực hiện chúng cho đến khi bạn hết thời gian hoặc bất cứ điều gì). Chọn di chuyển ban đầu với mức trung bình tốt nhất của các lần đi ngẫu nhiên.

Những tìm kiếm một phần có một nhược điểm nghiêm trọng. Nếu tìm kiếm bằng UCS và Pacman hoàn toàn không ghi được điểm nào trong các Nnút đầu tiên được kiểm tra, anh ta sẽ bị kẹt và vì tất cả các chuyển động đều tệ như nhau.
A * sẽ không có vấn đề này miễn là người heuristic cẩn thận di chuyển Pacman đến gần các viên chưa ăn.
MCTS có thể tránh được vấn đề này nếu đi bộ ngẫu nhiên bị thiên lệch để di chuyển về phía các viên không ăn và bước đi ngẫu nhiên không bao giờ dừng lại trước khi ghi bàn (tức là đi bộ ngẫu nhiên tiếp tục nếu Pacman có 0 điểm.

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.