Saran AI karakter PacMan untuk arahan berikutnya yang optimal

9

Pertama, ini adalah AI untuk PacMan dan bukan hantu .

Saya sedang menulis wallpaper hidup Android yang memainkan PacMan di sekitar ikon Anda. Meskipun mendukung saran pengguna melalui sentuhan layar, sebagian besar game akan dimainkan oleh AI. Saya 99% selesai dengan semua pemrograman untuk game tetapi AI untuk PacMan sendiri masih sangat lemah. Saya mencari bantuan dalam mengembangkan AI yang baik untuk menentukan arah perjalanan PacMan selanjutnya.

Rencana awal saya adalah ini:

  1. Inisialisasi penghitung skor untuk setiap arah dengan nilai nol.
  2. Mulai dari posisi saat ini dan gunakan BFS untuk melintasi ke luar dalam empat kemungkinan arah awal dengan menambahkannya ke antrian.
  3. Lepaskan elemen dari antrian, pastikan elemen tersebut belum "terlihat", pastikan itu adalah posisi papan yang valid, dan tambahkan ke arahan awal yang sesuai, nilai untuk sel saat ini berdasarkan pada:

    1. Memiliki titik: tambah 10
    2. Memiliki kekuatan: ditambah 50
    3. Memiliki buah: ditambah nilai buah (bervariasi berdasarkan level)
    4. Memiliki hantu yang ketakutan: ditambah 200
    5. Punya hantu bepergian ke PacMan: kurangi 200
    6. Memiliki hantu yang bepergian dari PacMan: tidak melakukan apa pun
    7. Memiliki hantu yang bepergian tegak lurus: kurangi 50
    8. Lipat gandakan nilai sel dikali persentase berdasarkan jumlah langkah ke sel, semakin banyak langkah dari arah awal, semakin dekat nilai sel menjadi nol.

    dan enqueue tiga kemungkinan arah dari sel saat ini.

  4. Setelah antrian kosong, cari skor tertinggi untuk masing-masing dari empat arah awal yang mungkin dan pilih itu.

Kedengarannya bagus bagi saya di atas kertas, tetapi hantu-hantu mengelilingi PacMan dengan sangat cepat dan ia bergerak bolak-balik dalam dua atau tiga sel yang sama sampai satu mencapai dia. Menyesuaikan nilai untuk kehadiran hantu juga tidak membantu. Dot BFS terdekat saya setidaknya bisa mencapai level 2 atau 3 sebelum game berakhir.

Saya mencari kode, pemikiran, dan / atau tautan ke sumber daya untuk mengembangkan AI yang tepat - sebaiknya yang kedua. Saya ingin merilis ini di Pasar akhir pekan ini jadi saya agak terburu-buru. Setiap bantuan sangat dihargai.


FYI, ini awalnya diposting di StackOverflow

Jake Wharton
sumber
Banyak dari ini tergantung pada AI hantu. Jika Anda menggunakan algoritma AI yang sama persis dari game aslinya, Anda bisa meminta pac-man mengikuti salah satu dari banyak pola yang telah ditemukan, tidak ada AI yang diperlukan kecuali tabel pencarian. Jika hantu mendekati pac-man Anda dengan cepat, apakah Anda menganggap bahwa masalahnya adalah hantu AI terlalu baik, daripada AI pac-man terlalu lemah?
Ian Schreiber
@Ian Hantu AI persis seperti di dalam game tetapi tata letak papan tidak sama. Itu hanya tata letak kotak sederhana yang berbatasan dengan tata letak ikon Anda (4x4, dll.). PacMan saat ini hanyalah titik terdekat yang tidak memiliki hantu antara dirinya dan titik. Ini akan langsung menuju hantu selama ada titik di antaranya. Mungkin saya hanya perlu melihat beberapa langkah lebih jauh dari titik terdekat dan menentukan apakah itu arah yang baik untuk diambil. Karena seluruh arah pencarian logika ini harus terjadi pada setiap pergerakan sel, ia harus relatif sederhana dan cepat juga.
Jake Wharton
Lihatlah Difusi Kolaboratif, entah bagaimana mungkin Anda dapat membantu Anda.
user712092

Jawaban:

3

Gagasan Tandem tentang algoritma mendaki bukit itu bagus. Yang lain adalah: beberapa variasi pada A * untuk melihat seberapa jauh Anda bisa melihat bagaimana Anda bisa mendapatkan skor tertinggi selama belokan N berikutnya, di mana N disetel untuk memberikan hasil keinginan.

Nilai skor yang Anda berikan dapat dianggap sebagai "biaya untuk pindah" - Anda pada dasarnya berada di jalur yang benar, tetapi Anda harus mengubah nilai sampai Anda mendapatkan hasil yang Anda inginkan.

Secara umum (bukan khusus PacMan), Anda perlu mengalokasikan nilai yang sesuai untuk

  • Luka pada pria lain.
  • Membunuh pria lain.
  • Mencapai beberapa tujuan lain (selain membunuh)
  • Terluka.
  • Terbunuh.

dan kemudian mencari langkah yang akan mengarah pada skor maksimum N belokan di masa depan. Anda mungkin juga ingin menghindari gerakan yang mengarah ke skor di bawah X (katakanlah, biaya sekarat) N berubah menjadi masa depan.

Setelah Anda mencetak semua gerakan yang mungkin, tambahkan bonus untuk seberapa baik itu berubah di masa depan dan dikurangi untuk seberapa buruk itu mungkin terjadi di masa depan, maka Anda cukup mengurutkan array dan mengambil langkah terbaik.

Beri tahu kami bagaimana hasilnya!

Olie
sumber
0

Anda akan melakukan pencarian.

  • Node / Status: Lokasi Pacman, Lokasi hantu, Lokasi pelet, Skor total, Total nyawa.
  • Transisi: Pacman bergerak ke atas, bawah, kiri, atau kanan. Jika Pacman pindah ke dinding dan mengubah lokasi yang benar-benar baik-baik saja (itu mungkin mengarah pada beberapa strategi mengulur waktu yang sangat menarik). Jika Pacman menabrak hantu, singkirkan kehidupan dan pindahkan dia dan hantu ke tempat asalnya.
  • Biaya: Jika Pacman pindah ke pellet 1, jika ia pindah ke ruang kosong 2.
    Biaya agak rumit, karena tidak jelas. Fungsi biaya yang saya jelaskan akan mendorong Pacman untuk menyelesaikan level. Ini menghalangi strategi yang mungkin dan hanya berkemah menunggu buah bonus muncul. Tapi saya pikir kami ingin AI Pacman menyelesaikan labirin bahkan jika itu menghasilkan skor yang lebih rendah.
  • Sasaran: skor maksimum tercapai. Itu berarti semua pelet, buah, dan pelet listrik dimakan.

A * atau UCS sangat bagus ketika mencari tujuan. Cara saya menggambarkan Negara / Transisi / Tujuan akan menemukan jalan setapak yang bagus untuk Pacman, AI tidak perlu secara khusus mempertimbangkan menghindari kematian atau mencari buah. Itu akan melakukannya sendiri. Karena gim ini sepenuhnya deterministik, Anda dapat "mencari" dari lokasi awal Pacman dan menemukan jalur jalan kaki yang optimal ke ujung (semua pelet dikonsumsi) sebagai pra-perhitungan dan biarkan saja AI Pacman berjalan di jalur itu, tidak ada AI yang terbang. Kelemahan utama dari pendekatan ini adalah ini dapat dengan mudah lepas dari waktu dan konsumsi memori.

Alih-alih mendedikasikan CPU dan memori untuk melakukan pencarian lengkap Anda bisa melakukan pencarian parsial dengan cepat.

Anda masih dapat menggunakan UCS / A * tetapi berhenti mencari setelah memeriksa Nnode telah diperiksa dan cukup gunakan jalur terbaik yang ditemukan sejauh ini. Pendekatan ini bagus karena Anda dapat Nmencari keseimbangan antara kecepatan dan presisi.

Metode lain yang sangat saya sukai adalah pencarian Monte-Carlo Tree. Dalam metode ini Anda membiarkan Pacman melakukan gerakan acak N. Setelah setiap berjalan acak Anda merekam langkah awal dan skor akhir. Lakukan Mjalan-jalan acak (atau terus lakukan sampai Anda kehabisan waktu atau apa pun). Pilih langkah awal dengan rata-rata jalan acak terbaik.

Pencarian parsial ini memiliki kelemahan serius. Jika mencari dengan UCS dan Pacman sama sekali tidak mendapat skor di Nnode pertama yang diperiksa dia akan macet dan karena semua gerakan sama buruknya.
A * tidak akan memiliki masalah ini selama heuristik berhati-hati untuk memindahkan Pacman lebih dekat ke pelet yang tidak dimakan.
MCTS mungkin dapat menghindari masalah ini jika random walk bias bergerak menuju pellet yang tidak dimakan dan random walk tidak pernah berhenti sebelum skor (yaitu random walk terus berjalan jika Pacman memiliki skor 0.

deft_code
sumber