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:
- Inisialisasi penghitung skor untuk setiap arah dengan nilai nol.
- Mulai dari posisi saat ini dan gunakan BFS untuk melintasi ke luar dalam empat kemungkinan arah awal dengan menambahkannya ke antrian.
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:
- Memiliki titik: tambah 10
- Memiliki kekuatan: ditambah 50
- Memiliki buah: ditambah nilai buah (bervariasi berdasarkan level)
- Memiliki hantu yang ketakutan: ditambah 200
- Punya hantu bepergian ke PacMan: kurangi 200
- Memiliki hantu yang bepergian dari PacMan: tidak melakukan apa pun
- Memiliki hantu yang bepergian tegak lurus: kurangi 50
- 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.
- 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
sumber
Jawaban:
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
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!
sumber
Coba lihat video ini: http://www.youtube.com/watch?v=2XjzjAfGWzY
Anda mungkin menginginkan semacam algoritma pencarian jalur mendaki bukit .
sumber
Anda akan melakukan pencarian.
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.
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
N
node telah diperiksa dan cukup gunakan jalur terbaik yang ditemukan sejauh ini. Pendekatan ini bagus karena Anda dapatN
mencari 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. LakukanM
jalan-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
N
node 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.
sumber