Đưa ra một vị trí đặt bom thông minh Bomberman AI


13

Tôi đang cố gắng thực hiện thuật toán AI cho Bomberman. Hiện tại tôi có một cách triển khai thô sơ nhưng không thông minh lắm (AI hiện tại quá nhiệt tình trong việc đặt bom).

Đây là AI đầu tiên tôi từng thử thực hiện và tôi hơi bế tắc. Các thuật toán phức tạp hơn tôi có trong đầu (những thuật toán mà tôi mong đợi để đưa ra quyết định tốt hơn) quá phức tạp để trở thành giải pháp tốt.

Bạn có lời khuyên chung nào để triển khai Bomberman AI? Có những cách tiếp cận hoàn toàn khác nhau để làm cho bot trở nên phòng thủ hoặc tấn công hơn?


Chỉnh sửa: Thuật toán hiện tại

Thuật toán hiện tại của tôi đi một cái gì đó như thế này (mã giả):

1) Cố gắng đặt một quả bom và sau đó tìm một tế bào an toàn với tất cả các quả bom, bao gồm cả quả bom mà bạn vừa đặt. Để tìm ô đó, lặp qua bốn hướng; nếu bạn có thể tìm thấy bất kỳ tế bào phân kỳ an toàn nào và đến kịp thời (ví dụ: nếu hướng lên hoặc xuống, hãy tìm một ô được tìm thấy ở bên trái hoặc bên phải của con đường này), vậy thì an toàn để đặt bom và di chuyển theo hướng đó.

2) Nếu bạn không thể tìm thấy và an toàn các tế bào phân kỳ, hãy thử KHÔNG đặt bom và nhìn lại. Lần này bạn sẽ chỉ cần tìm một ô an toàn theo một hướng (bạn không phải chuyển hướng khỏi nó).

3) Nếu bạn vẫn không thể tìm thấy một tế bào an toàn, đừng làm gì cả.

for $(direction) in (up, down, left, right):
    place bomb at current location
    if (can find and reach divergent safe cell in current $(direction)):
        bomb = true
        move = $(direction)
        return

for $(direction) in (up, down, left, right):
    do not place bomb at current location
    if (any safe cell in the current $(direction)):
        bomb = false
        move = $(direction)
        return

else:
    bomb = false
    move = stay_put

Thuật toán này làm cho bot rất vui mừng (nó sẽ đặt bom rất thường xuyên). Nó không tự sát, nhưng nó có thói quen khiến bản thân dễ bị tổn thương bằng cách đi vào ngõ cụt, nơi nó có thể bị chặn và giết bởi những người chơi khác.

Bạn có gợi ý nào về cách tôi có thể cải thiện thuật toán này không? Hoặc có lẽ tôi nên thử một cái gì đó hoàn toàn khác?

Một trong những vấn đề với thuật toán này là nó có xu hướng rời khỏi bot với rất ít (thường chỉ là một) tế bào an toàn mà nó có thể đứng. Điều này là do bot để lại một vệt bom phía sau nó, miễn là nó không tự sát.

Tuy nhiên, để lại một vệt bom phía sau để lại một vài nơi mà bạn có thể trốn. Nếu một trong những người chơi hoặc bot khác quyết định đặt bom ở đâu đó gần bạn, điều đó thường xảy ra là bạn không có nơi nào để trốn và bạn chết.

Tôi cần một cách tốt hơn để quyết định khi nào đặt bom.


Thật khó để nghĩ về một cái gì đó hoạt động 100% từ màu xanh. Nhưng có lẽ nếu bạn thêm thuật toán mà bạn hiện có, tất cả chúng ta đều có thể giúp cải thiện dần dần. Có lẽ bạn cũng không phải là người có sở thích đầu tiên cố gắng thực hiện Bomberman AI và tôi đã tìm thấy khá nhiều cuộc thi AI của Bomberman với một tìm kiếm ngẫu nhiên trên Google có thể chứng minh nguồn thông tin vô giá cho bạn.
Roy T.

Tôi nghĩ rằng bạn có thể khái quát AI máy bay ném bom AI theo hai điều: 1) cố gắng bảo vệ bản thân khỏi bị nổ tung bởi những người chơi khác ném bom 2) đặt bom lên bảng trò chơi để cố gắng làm cho người khác chết (trong khi giữ nguyên tắc 1): để tránh bị nổ tung / bị mắc kẹt bởi bom của chính bạn).
tigrou

Có lẽ sẽ tốt hơn nếu bạn đăng ít nhất một tổng quan cấp cao về việc triển khai hiện tại của bạn (giả sử đó là rất nhiều mã) và chúng tôi có thể giúp bạn giải quyết vấn đề của bạn khi họ quá nhiệt tình trong việc đặt bom.
Tết

@Tetrad Tôi đang trong quá trình thực hiện một thuật toán mới. Tôi sẽ xem cách nó đi và đăng thuật toán ở đây nếu cần thiết.
Paul Manta

Mặc dù đó không phải là một mẹo thực sự nhưng bạn có thể xem mã clanbomber . đó là một trò chơi theo nhiều cách tương tự như máy bay ném bom.
Ali1S232

Câu trả lời:


4

Vấn đề bạn gặp phải là AI của bạn không bao giờ dừng lại để đưa ra quyết định thông minh về nơi nó sẽ đặt quả bom tiếp theo, khiến nó chỉ thả bom bất cứ khi nào có thể và sau đó giải quyết "shit, shit, tôi phải làm gì bây giờ! ? "

Tạm dừng suy nghĩ

Ngay bây giờ, AI của bạn chỉ đi lang thang đến nơi đặc biệt. Tuy nhiên, đôi khi, nó thực sự nên di chuyển đến một mục tiêu. Ví dụ, nếu nó nhìn thấy một sức mạnh và nghĩ rằng nó có thể tiếp cận nó trước người chơi, có lẽ nó nên tìm một con đường an toàn đến viên gạch đó và di chuyển đến đó, để mắt đến bom và tránh chúng trên đường đi.

Hành vi di chuyển đến mục tiêu tương tự có thể được sử dụng khi nó nghĩ về nơi đặt quả bom tiếp theo của nó .

Khi AI của bạn có thể đặt bom, thay vì chỉ thực hiện ngay lập tức, nó nên sử dụng nhanh thuật toán tìm kiếm để chọn từ các vị trí đặt bom có ​​sẵn dựa trên các tiêu chí như:

  • Có gần đó không? (để nó không đi đến góc đối diện chéo của bản đồ mỗi lần nó muốn đặt bom)
  • Có nơi nào tôi có thể trốn khỏi vụ nổ - và tôi có thể đến đó trước khi quả bom phát nổ không?
  • Vụ nổ sẽ thổi tung gạch và cho tôi sức mạnh?
  • Nó sẽ có khả năng tấn công người chơi? (một AI dễ dàng hơn có thể tránh điều này trong trò chơi đầu, một AI hung hăng sẽ theo đuổi điều này - trong khi không quên về sức mạnh)

Khi quyết định này được đưa ra, AI đã chọn một vị trí đặt bom và một nơi để trốn tránh vụ nổ. Bây giờ nó có thể đi bộ đến chỗ, đặt bom, sau đó đi bộ đến nơi ẩn náu của nó. Một khi nó đến nơi ẩn náu của nó, nó có thể muốn tiếp tục đi bộ và tìm vị trí đặt bom (nếu nó có nhiều quả bom), với điều kiện là phải nhớ tránh xa quả bom mà nó đi bộ đến đây để tránh.

Đi bộ và tìm một con đường an toàn

Bạn có thể phát triển cho AI của mình một phương pháp đi bộ duy nhất và sử dụng phương pháp này mỗi khi bạn muốn nó đi bộ ở một nơi nào đó. Phương pháp này có thể sử dụng thuật toán tìm kiếm A * để tìm đường dẫn của nó.

Để giữ cho AI an toàn, bạn có thể muốn làm cho nó kiểm tra lại đường đi của nó mỗi khi đặt một quả bom mới. Để tránh các vụ nổ, nó có thể kiểm tra thời gian cho đến khi quả bom phát nổ và xem xét một viên gạch nổ tiềm năng an toàn để đi qua nếu quả bom không nổ trong khi nó đi qua viên gạch đó - và nếu nó không an toàn, hãy coi nó như một viên gạch không thể xuyên thủng .

Để cung cấp cho các lỗi AI của bạn (đôi khi nó thực sự có thể bị nổ tung), bạn nên mắc lỗi tính toán: quên một quả bom lơ đãng, đánh giá thấp kích thước vụ nổ hoặc thời gian cho đến khi quả bom phát nổ, v.v.

Lưu ý bên lề: Bạn cũng có thể làm cho việc đi bộ ngẫu nhiên của nó có vẻ có mục đích hơn bằng cách chọn ngẫu nhiên các điểm để đi bộ hoặc luôn có một vị trí đặt bom mới trong tâm trí để đi bộ, thay vì chỉ chọn ngẫu nhiên một viên gạch liền kề để đi lang thang. Theo cách đó, nó sẽ không đi lang thang qua lại cùng một chỗ như thể nó không thể quyết định được.


Tôi quên cung cấp một số chi tiết có liên quan về trò chơi. Đây là phiên bản đơn giản của Bomberman: không tăng sức mạnh, người chơi luôn có thể đặt bom không giới hạn và bom luôn có phạm vi tối đa (từ đầu này đến đầu kia của bản đồ). Hệ thống điểm cũng khác nhau ... [tiếp]
Paul Manta

[cont.] Bạn nhận được 1 điểm khi đặt bom, nhưng 0 điểm khi phá hủy bức tường. Bạn cũng nhận được 30 điểm cho một vụ giết người, 15 điểm cho một trợ lý và -20 cho một vụ tự sát. [tiếp theo]
Paul Manta

[cont.] Với suy nghĩ đó, AI nên cố gắng đặt bom thường xuyên nhất có thể (vì đặt bom cho bom), nhưng không cần phải đặc biệt cẩn thận về nơi đặt bom. Nó phải được cẩn thận về việc luôn luôn có một nơi an toàn để đi. [tiếp theo]
Paul Manta

[cont.] Bạn có nghĩ rằng khi chọn một hướng đi, việc tôi chọn một hướng dẫn đến một khu vực an toàn là đủ . Thay vì tìm kiếm một tế bào an toàn, tôi sẽ tìm kiếm khu vực an toàn lớn nhất, vì vậy tôi có thể trốn tránh những quả bom được đặt bởi những người chơi khác, không chỉ riêng tôi. Ngoài ra, nó có phải là một ý tưởng tốt để ủng hộ các hướng giúp tôi gần gũi hơn với một trong những người chơi khác không?
Paul Manta

3
Vậy thì chúng ta không nói về Bomberman và AI của nó! Chúng ta chỉ nói về một số trò chơi với những quả bom mà bề ngoài giống với Bomberman nhưng Under the Hood hoàn toàn khác biệt và khuyến khích bạn trở thành một Trigg Happy Lunatic , và tôi có ít kinh nghiệm hơn khi đối phó với trò chơi đó.
doppelgreener
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.